宏预处理器指令

时间:2018-02-06 15:17:25

标签: c c-preprocessor

我对宏预处理器指令有所了解。在下面的问题中,源代码中的替换是由编译器完成的,它将输出作为输出 " 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。

2 个答案:

答案 0 :(得分:1)

代码的行为是未定义

CUBE(++x)扩展为(++x * ++x * ++x):该表达式中没有排序点,它同时读取和写入x

这就是为什么做算术的宏在计算上是致命的。

答案 1 :(得分:0)

预处理器正在用

替换它
y = (++x*++x*++x);

这是未定义的行为。