나는 결과가 2 + 3 + 4 = 9 일 것으로 예상되지만 출력은 내가 정의되지 않은 행동에 있다는 것을 알고 10c의 (a = a + 1) + (a = a + 1) + (a = a +</p> <pre><code>int a=1; printf("%d",(a=a+1)+(a=a+1)+(a=a+1)); </code></pre> <p>내가 GCC로이 코드를 컴파일하고 실행
입니다 (++a)+(++a)+(++a)
, 왜냐하면 3 개의 ++
부작용이 모두 (++ a)가 평가되기 전에 실행될 수 있기 때문입니다.
하지만 a=a+1
의 값은 정확히 a
이며 할당이 평가 된 것 같습니다. 따라서 컴파일러는 먼저 a=a+1
세 개를 처리 할 수없고 a=a+1
이 계산 된 후에 a=a+1
값으로 변수 a
의 값을 사용합니다.
C 표준에 따라 어디 잘못되었는지 알고 싶습니다.
코드는 실용적이지 않습니다. 시퀀스 포인트 등 –
나는 컴파일러를 연구 중이며 컴파일러가 C 표준에 따라 작동하는 방법을 알고 싶다 – zzh1996
"그러나 a = a + 1의 값은 할당이 평가 된 후 정확히 무엇인지 생각합니다." 왜 그렇게 생각하니? 왜 그것이'++ a '와 다른 점이 있을까요? (힌트 : 그렇지 않습니다.) – rici