我对宏预处理器指令有所了解。在下面的问题中,源代码中的替换是由编译器完成的,它将输出作为输出 " y是392"
#include <stdio.h>
#define CUBE(x) (x*x*x)
void main(void)
{
int x;
int y;
x = 5;
y = CUBE(++x);
printf("y is %d\n", y);
}
输出:y是392。
答案 0 :(得分:1)
代码的行为是未定义。
CUBE(++x)
扩展为(++x * ++x * ++x)
:该表达式中没有排序点,它同时读取和写入x
。
这就是为什么做算术的宏在计算上是致命的。
答案 1 :(得分:0)
预处理器正在用
替换它y = (++x*++x*++x);
这是未定义的行为。