gpt4 book ai didi

c - 宏中的意外结果

转载 作者:太空宇宙 更新时间:2023-11-04 05:26:46 26 4
gpt4 key购买 nike

我有一个简单的程序来计算立方体的体积。它运行良好,但我得到的结果是错误的。结果显示为“Y 是 392”。谁能帮我理解为什么是392?我刚开始学C,所以我不是很了解所有的代码。

我意识到这个宏写得不好,我只是想在重写它之前了解它的行为。

#define CUBE(x) (x*x*x)

void main(void);

void main(void){
int x, y;
x = 5;
y = CUBE(++x);
printf("Y is %d \n", y);
}

最佳答案

这是因为宏扩展为:

y = ++x * ++x * ++x;

由于这个原因,这是一个写得非常糟糕的宏;它看起来像一个函数调用(它只会对参数求值一次)但它实际上对它求值了三次。

这给出了未定义的行为,因为缺少 sequence points .

关于c - 宏中的意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22640204/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com