두 번째 printf의 출력이 왜 50이고 67이 62입니까? 최대 50과 62가 57이 아닌 이유는 무엇입니까?
#define MAX(a,b) ((a)>(b) ? (a): (b))
int incr(){
static int i =42;
i += 5;
return i;
}
int _tmain(int argc, _TCHAR* argv[])
{
int x = 50;
printf("max of %d and %d is %d\n",x, incr(), MAX(x, incr()));
printf("max of %d and %d is %d",x, incr(), MAX(x, incr()));
return 0;
}
printf("max of %d and %d is %d\n",x, incr(), MAX(x, incr()));
매크로 대체 후 다음과 같이됩니다.
printf("max of %d and %d is %d\n",x, incr(), ((x)>(incr()) ? (x): (incr())));
// ^1 ^2 ^3
incr()
이 단일 함수 호출에서 여러 번 호출되면 어떤 인수가 먼저 평가되는지는 지정되지 않습니다. 첫 번째 또는 두 번째가 먼저 호출되는지 여부는 예상치 못한 결과를 만듭니다.
확인해야 할 유일한 것은의 단락으로 인한 것입니다 ?:
. (x)>(incr()
는 표현식에의 값이 (x)
있는지 또는 세 번째 값이 incr()
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다