오늘 인터뷰에서 이와 같은 질문이 있습니다.VS2013에서 __cdecl을 사용하지 않습니다.
#include <stdio.h>
int main(void)
{
char *s="123456790";
printf("%c,%c",*(char *)((int *)s+++1),*s);
return 0;
}
내 대답은 5,1이지만 면접자가 5,2라고 말했습니다. 물론 C에서 기본 호출 규칙이 __cdecl이라는 것을 알았습니다. 인수 전달 순서가 오른쪽에서 왼쪽이므로이 사실에 관해 이야기했습니다. 그러나 그는 그것을 믿지 않았다. VS2013에서 실행하는 것보다. IT가 5,2 !!!!! 표시했습니다.
이제 집으로 돌아와서 다시 시도해보십시오. 답은 5,1입니다 !!! http://ideone.com/sq6yRE 왜?! 나는 너무 혼란 스럽다. 누가 나를 도울 수 있니?
호출 규칙은 인수가 *, * 그들이 * * 전달되는 단지 순서를 평가하는 순서에 대해 아무것도 의미하지 않는 방법에 대해 설명합니다. 비슷한 토론은 –
[여기를 참고하십시오] (http://stackoverflow.com/a/8785539/2065121)를 참조하십시오. –
이 회사에서 일하지 마십시오. 분명히 그들은 당신에게 일할 불특정 작업을 줄 것입니다. – fritzone