【发布时间】:2014-09-13 10:34:50
【问题描述】:
以下程序正在打印49
#include <stdio.h>
#define SQR(x) (x*x)
void main(void) {
int x, y; x = 5;
y = SQR(++x);
printf("y is %d\n", y);
}
我不明白我错过了什么。
这是我所理解的它可能是如何工作的
在SQR(++x) 中,++x 将被评估为6,在x*x 之后应返回36。
因此y = 36
但答案是 49
【问题讨论】:
-
想想宏是如何工作的以及表达式被计算了多少次。
-
@Matt:不,它本身不是未定义的。
-
@Matt:啊,我明白了——
++x的执行顺序未知...
标签: c