我对宏预处理器指令有想法。在下面的问题中,编译器如何完成源代码中的替换,它给出的输出为 “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。
最佳答案
您的代码的行为未定义。
CUBE(++x)
扩展为 (++x *++x *++x)
:该表达式中没有排序点,并且它同时读取和写入x
。
这概括了为什么进行算术的宏在计算上是致命的。
关于c - 宏预处理器指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48646282/