/* 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++ 도 비슷하지 않을까...싶다.