/* test.c */
#include <stdio.h>
int a = 1;
int main(int argc, char *argv[]) {
printf("%d %d %d", a, a++, ++a);
return 0;
}
gcc 실행 결과
3 2 2
아래는 C형태로 구현한것.
/* test2.c */
#include <stdio.h>
#include <stdlib.h>
int a = 1;
int prefix_inc(int *_a)
{
printf("prefix_inc called.
");
(*_a) = (*_a) + 1;
return (*_a);
}
int postfix_inc(int *_a)
{
printf("postfix_inc called.
");
return (*_a) + 1;
}
void call_print()
{
int *p_a = &a;
printf("%d %d %d"
, a
, postfix_inc(&a)
, prefix_inc(&a) );
(*p_a) = (*p_a) + 1; /* for postifx_inc */
}
int main(int argc, char *argv[]) {
call_print();
return 0;
}
결과
3 2 2
질문자가 컴파일러를 뭘썼는지 모르겠다만, 위의 결과가 표준으로 알고 있었는데, 찾아보니 표준은 아니네.
C/C++ 은 파라미터가 오른쪽부터 전달되는것은 맞는데,
evaluation 순서는 C에서 정의안된다고 나오네.
order of evaluation of function arguments is unspecified, from C99 §6.5.2.2p10:
궁금하면. C99 표준 6.5.2 참조해봐.
C++ 도 비슷하지 않을까...싶다.
짤 ㅇㅂ