2014-12-03 3 views
-4

다음 코드의 출력을 이해할 수 없습니까 누군가 나를 도와 줄 수 있습니까?전 처리기 지시문

#define PRODUCT(x) (x*x) 
main() 
{ 
    int i=3,j,k; 
    j=PRODUCT(i++); 
    k=PRODUCT(++i); 
    printf("\n %d%d",j,k); 
} 

위의 경우 I는 출력 가지고 :

9

49 내가 49이오고 방법을 이해 할 수없는 생각을하고 나는 밖으로

k=PRODUCT(++i); 
댓글을 달았 때

결과가 25로 나타납니다. progra에서 어떤 일이 일어나는지 모릅니다. m

+2

아. 완벽한 정의되지 않은 동작 ... –

+0

매크로가 포함 된 코드를 이해하지 못하면 먼저 수동으로 매크로를 확장해야합니다. (물론 매크로를 사용하는 경우에는 사용하지 않아야합니다.) –

+0

가능한 복제본 http://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points –

답변

1

매크로는 텍스트 대체를 수행합니다. PRODUCT(i++)(i++*i++)으로 확장됩니다. 현재 두 가지 수정 사항이 i 인 두 가지 수정 사항이 순서대로 지정되지 않았기 때문에 이는 정의되지 않은 동작입니다.