2011-08-05 5 views
-1

가능한 중복은 :
Order of evaluation in C++ function parameters
Parameter evaluation order before a function calling in C이 문제를 설명해주십시오.

:~/work_space/cprogs$ !cat 
cat expression_associativity.c 
#include<stdio.h> 

int main() 
{ 

    int i = 0; 

    printf("\n no-incr:%d pre-incr:%d post-incr:%d no-incr:%d post-incr:%d no-incr:%d \n", i, ++i, i++, i, i++, i); 

    return 0; 
} 

:~/work_space/cprogs$ !./ 
./expression_associativity 

no-incr:3 pre-incr:3 post-incr:1 ***no-incr:3*** post-incr:0 ***no-incr:3*** 
:~/work_space/cprogs$ 

왜 마지막 중간 "노 증분"값은 3으로 인쇄? 마지막으로 "no-incr"이 0으로, 중간에 "no-incr"이 1이 될 것으로 예상했습니다.

누군가가 표현의 순서가 정확히 무엇인지 설명하고 왜이 값을보고 있습니까?

답변

2

정의되지 않은 동작입니다.

Unspecified에서 함수 인수를 평가 한 결과이므로 결과는 정의되지 않습니다.

정의되지 않은 동작은 어떤 일이 발생할 수 있으며 동작을 정의 할 수 없다는 것을 의미합니다.

+0

실제로 "지정되지 않음"이며 "정의되지 않음"과 현저히 다릅니다. – cnicutar

+0

@cnicutar : 내 대답은 이미 그것이 지정되지 않았 음을 나타내며 &이 경우 지정되지 않은 동작은 정의되지 않은 동작을 초래합니다. –

+0

이전 버전을 본 적이 있어야합니다 – cnicutar

1

인수의 평가 순서는 정의되지 않습니다. 보장되는 유일한 점은 함수가 호출되기 전에 모든 증분 및 감소가 완료된다는 것입니다. C 표준은 단순히 여기에 인쇄 될 내용을 예측할 수 없도록합니다.

관련 문제