宏扩展后的输出似乎不符合理解(可能是错误的理解)

时间:2017-07-02 05:07:35

标签: c macros

您需要了解以下程序的执行步骤。

#include<stdio.h>
#define SQUARE(x) (x)*(x)
void main()
{
 int i = 5;
 printf("%d\n", SQUARE(++i));
}

因为我理解像(++i)*(++i)这样的宏展开,结果(7)*(6) = 42但输出为49,我不明白为什么?

1 个答案:

答案 0 :(得分:1)

这正是宏的问题,如果你不注意,你最终会得到未定义的行为。见Why are these constructs (using ++) undefined behavior?

(++i)*(++i)是未定义的行为,结果可能包括爆炸您的计算机。