2014-04-29 4 views
1

오늘 인터뷰에서 이와 같은 질문이 있습니다.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 왜?! 나는 너무 혼란 스럽다. 누가 나를 도울 수 있니?

+3

호출 규칙은 인수가 *, * 그들이 * * 전달되는 단지 순서를 평가하는 순서에 대해 아무것도 의미하지 않는 방법에 대해 설명합니다. 비슷한 토론은 –

+0

[여기를 참고하십시오] (http://stackoverflow.com/a/8785539/2065121)를 참조하십시오. –

+1

이 회사에서 일하지 마십시오. 분명히 그들은 당신에게 일할 불특정 작업을 줄 것입니다. – fritzone

답변

1

C에서 함수 인수의 평가 순서는 지정되지 않습니다.

코드 출력으로 하나

Hello 
Hi 
3 6 

또는

Hi 
Hello 
3 6 

을 일으킬 수 있음

int main() 
{ 
    printf("%d %d\n", printf("Hi\n"), printf("Hello\n")); 
    return 0; 
} 

아래 작성.

그리고 관리자 나 면접관이 질문을 안하는 이유 등

+0

고마워, 알았어. C99 6.5.2.2 함수 호출 10. 함수 지정자의 평가 순서, 실제 인수 및 실제 인수 내의 하위 표현식은 지정되지 않지만 실제 호출 전에 시퀀스 포인트가 있습니다. –