[완료] printf("%d %d %d\n", a++, a++, a++); 어떤 결과가 맞는걸까요??

plustag의 이미지

솔라리스(x86 gcc 3.4.6)
리눅스(x86 gcc 4.2.3)
윈도우(VS2008)
에서는 만약 a가 10이라면
12 11 10 이라는 결과가 나옵니다..

그런데
VS 6와 2005에서는
10 10 10 이 출력됩니다.

물론 양쪽 모두
그 다음 문장에선 a == 13이 됩니다.

컴파일러의 동작 방식에 따라 달라지는듯 한데
흔히 이런 경우를 거의 사용하는 일은 없지만
표준에 이런 경우에 대한 언급이 있는지 알고 싶습니다..

klara의 이미지

함수인자에 대한 평가순서에 대해선 어떤 보장도 없습니다.
Win32API의 경우는 함수호출규약으로 stdcall등을 이용하여 순서대로 평가되게 하지만, 표준은 아니구요.

나빌레라의 이미지

함수인자에 대한 평가 순서 및

하나의 statement에서 같은 변수에 대한 단일증감연산자(++,--) 평가 순서 역시

compiler define 입니다.

즉 표준에서 정해 놓지 않았습니다.

컴파일러 제작자들이 합의를 본것이 아닌 이상, 컴파일러 마다 값이 다르게 나오는것이 정상입니다.

-------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

plustag의 이미지

표준을 정해놓은게 아니였군요..

누구냐 넌?

freestyle의 이미지

어떻게 생각하시나요? ㅎㅎ

int a = 0;
printf("%d\n", (a++) ? ++a : --a);

요건 표준에 나와 있는 건데요...^^

--------------------------
Go to the U-City

----------------------------------------------------------------------------------------
Don't Feed the Trolls!
----------------------------------------------------------------------------------------

plustag의 이미지

조건은 0 -> false로 가기전 ++ 해서 1이었다가 --해서 0?

누구냐 넌?

cinsk의 이미지

cynicjj의 이미지

어떤 결과가 맞는지는 중요하지 않습니다.

저렇게 코딩하시면 저한테 맞습니다. ㅋㅋㅋ