오늘 처음본 신기한고 이해가 안되는게 있어서 질문드리는데
int a=5;
printf("%d %d %d", a++, a++, a++);
위 코드에서 제가 생각하던 결과는 5 6 7이 출력되는건데 반대로 7 6 5가 출력되더라고여
그래서 printf에 넣어준 식들은 뒤에 있는거부터 처리되나보다 싶었는데
int b=0;
printf("%d %d %d", b, b=5, b);
이런식으로 코드를 짜면 뒤에서부터 계산해서 5 5 0이 찍히는게 아니라 5 5 5가 찍히더라고여??!?
그런데 다시 후치를 하나 넣어서
int c=0;
printf("%d %d %d", c, c=5, c++);
이렇게 하면 뒤에서부터 계산한거처럼 5 5 0이 찍히던데
printf 안에서 연산이 어떤 순서로 처리되길래 이렇게 되는지 궁금하네요.
아마 컴파일러 마음대로일걸
C에서는 여러 인자가 있는 함수 호출할때 어느 인자부터 처리하겠다고 명시된 순서같은게 없습니다... 최적화 과정 때문에 컴파일러가 좆대로 판단하는 부분임미다... 저렇게 코딩하지마세엽 8ㅅ8
https://stackoverflow.com/questions/376278/parameter-evaluation-order-before-a-function-calling-in-c