您需要了解以下程序的执行步骤。
#include<stdio.h>
#define SQUARE(x) (x)*(x)
void main()
{
int i = 5;
printf("%d\n", SQUARE(++i));
}
因为我理解像(++i)*(++i)
这样的宏展开,结果(7)*(6)
= 42但输出为49
,我不明白为什么?
答案 0 :(得分:1)
这正是宏的问题,如果你不注意,你最终会得到未定义的行为。见Why are these constructs (using ++) undefined behavior?
(++i)*(++i)
是未定义的行为,结果可能包括爆炸您的计算机。