#include <stdio.h>
int main()
{
int a = 1, b = 2, c = 3, x;
x = (a, b, c);
printf("a1=%d, a2=%d, a3=%dn", a++,a++,a++); ----------(1)
printf("a1=%d, a2=%d, a3=%dn", ++a,++a,++a); ----------(2)
}
라는 소스가 있어
그리고 프로그램 실행 결과는 이렇게 나와
a1 = 1, a2 = 1, a3 = 1
a1 = 7, a2 = 6, a3 = 5
쉼표연산자는 출력 변수의 오른쪽부터 연산한다고 하니, (2)식이 왼쪽부터 '7, 6, 5' 순으로 인쇄되는건 알겠어
근데 그렇다고 하면 (1)식의 결과값은 왼쪽부터 '3, 2, 1' 이 되어야 하는거 아니야??
책에 있는 설명으로는 잘 이해할수가 없네 ㅠㅠ
왜 (1)식의 결과값이 1, 1, 1이 되는지 설명좀 해줘
gcc에서는 이렇게 나오는데? 컴파일러 구현마다 다른듯. 그냥 틀려라
http://codepad.org/jWfJuVwm
그리고 이건 쉼표 연산자 문제가 아니고 함수 인자 문제다. 쉼표 연산자는 이런거지
http://codepad.org/tsItyawh
최적화땜에 그런듯. volatile 키워드 붙이니까 제대로 나온다
http://codepad.org/4zjHaQId
함수 인자는 맨 오른쪽부터 계산하지
다른 아키텍처랑 다른 언어는 어떤지 모르겠는데 x86에서 C언어는 맨 오른쪽꺼부터 스택에 쳐넣는걸로 알고 있당
함수인자 계산순서는 컴파일러좃대로임
항상 장담할수는 없다는 얘기군