는 다음 코드 (11)를 인쇄 할, 그러나 10피연산자 평가 순서 + 할당 부작용
x=5; x1=x+(x=6); printf("%d\n",x1);
x=5; x1=(x=x)+(x=6); printf("%d\n",x1);
x=5; x1=(x+0)+(x=6); printf("%d\n",x1);
x=5; x1=(x=5)+(x=6); printf("%d\n",x1);
x=5; x1=(x=6)+x; printf("%d\n",x1);
x=5; x1=(x=6)+(x=x); printf("%d\n",x1);
x=5; x1=(x=6)+(x+0); printf("%d\n",x1);
x=5; x1=(x=6)+(x=5); printf("%d\n",x1);
GCC가 모든 경우에 말한다 인쇄 마지막 경우를 제외하고, 12을 인쇄 '경고 : 'x'에 대한 연산은 정의되지 않을 수 있습니다. '
그건 의미합니다.
베른 하
추신 : 죄송합니다. 귀하의 답변에 감사드립니다. :)
PPS : 실제 코드는 : 나는 ADR에서 비트 6 기다리고
while (data-(data=read(adr)&(1<<6))) i++;
는 전환 중지합니다.
변수를 변경했을를 두 시퀀스 포인트 사이의 un입니다 정의 된 동작. 변수를 돌연변이 한 다음 그 값을 읽는 것입니다. 결과로 얻으려는 가치에 관계없이 잘못된 가정입니다. 표준을 준수하도록 코드를 다시 작성해야합니다. –
[(i = i ++ + ++ i, i = i ++, etc ...) 이러한 정의되지 않은 동작을 설명 할 수있는 사람이 있습니까? (http://stackoverflow.com/questions/949433/could-anyone-explain-these- undefined-behaviors-iiiii-etc) –
결과는 컴파일러가 진단 한대로 정의되지 않습니다. 그렇게 코드를 작성하지 마십시오. –