|
김학래 님이 쓰신 글 :
: #include<stdio.h>
:
: main()
: {
: int i, j, m, n;
: i = j = m = n = 10;
: printf("i = %d, i++ = %d, ++i = %d\n", i, i++, ++i);
: printf("j = %d, j+1 = %d, j+2 = %d\n", j, j+1, j+2);
: printf("m = %d, m-- = %d, --m = %d\n", m, m--, --m);
: printf("n = %d, n-1 = %d, n-2 = %d\n", n, n-1, n-2);
: }
:
: 여기에서 결과값이
:
: 첫번째 12 11 11
: 두번째 10 11 12
: 세번째 8 9 9
: 네번째 10 9 8
:
: 이렇게 나오는데요.....첫번째랑 세번째가 왜 저렇게 나오는지
:
: 자세히 설명좀 해주세요......
:
: 도저히 이해가 안되네요 ㅜㅜ
함수 인자의 호출 순서는 ANSI/ISO C 표준에 정의되어 있지 않습니다.
표준에 정의되어 있지 않다는 것은 컴파일러에 따라 다르다는 겁니다.
그러므로 호환성을 위해서 위와 같이 동일한 함수 인자에 동일한 변수를 넘길 때 ++와 -- 연산자를 사용하는 것을 삼가하세요!!
참고로 Borland C++Builder에서는 __cdecl, __fastcall, __pascal, __stdcall의 네가지 호출 순서를 지원합니다. 디폴트는 __cdecl로서 오른쪽 파라미터부터 런타임 스택에 푸쉬하는 것으로 되어 있습니다. 이렇게 호출 순서가 다르면 다른 컴파일러로 만든 라이브러리(.lib, .dll)을 링크할 때 문제가 생깁니다. 보통 DLL의 표준 호출 순서는 __stdcall 입니다.
|