#include <stdio.h>
void main()
{
int imsi_int=12;
int temp=11;
int *ptemp= &temp;
void * imsip;
imsip = &imsi_int;
printf(\"%x %x %x\\n\",&imsi_int,imsip,((int *)imsip)++);
//문제점 발생
//12ff60 12ff64 12ff60
// ㄴ이거 왜늘었는지 몰라서
printf(\"%x %x %x\\n\",&temp,ptemp,ptemp);
//12ff54 12ff54 12ff54
printf(\"%x %x %x\\n\",&temp,ptemp,ptemp++);
//12ff54 12ff58 12ff54
// ㄴ이 미친놈이 늘었다는 것을 알게 됨..
/*
뒤에 있는 값이 늘었는데 왜 중간에 있는 엄한 놈이 늘었나요?
ptemp 후위연산이라 안늘었는데 중간놈은 왜 늘었는지..
*/
}
&temp ptemp++ ptemp 순서로 해봐...
ㄴ 이건 모두가 예상하던 결과로 됩니다.
아 vs2008 이고 windows xp 쓰고 있습니다.
나도 잘 몰라서ㅋ이렇다라고 얘기해줄 수가 없네ㅋ..그냥,, 함수 호출?..가변인자?..에 이런일이 일어날 수 있다는거,,-뒤쪽부터 연산이 된다는거.....그냥 이런얘기 봤떤 기억이 있는거 같아...ㅋ//또 표준이다, 컴파일러다, 호출규약이다 이런것도 영향있겠지?...//친절한 횽들이 답을 달아줘야하는데,,,ㅋ
함수 호출시 argument가 evaluation되는 순서는 정의되어있지 않다.
printf 함수를 가변인자를 사용해서 만들어 보았는데 가변인자 이놈이 말썽이었네요. 자기맘대로 호출
답변 감사합니다~
파라미터가 오른쪽에서 왼쪽으로 스택에 저장되었다가 &nData,pnData,pnData++,&nData,pnData,pnData++,&nData,pnData,pnData++ <- 이렇게 호출되면 당연히 증가된 값이 출력되는 것 (스택에 저장되는 방식이 __cdel)