c - 解释这个 C 程序的输出?

标签 c

<分区>

#include<stdio.h>
#define CUBE(x) (x*x*x)

int main()
{
int a, b=3;
a = CUBE(++b);
printf("%d, %d\n", a, b);
return 0;
}

此代码返回 a=150b=6 的值。请解释一下。

我认为当它执行时 a 的值将被计算为 a=4*5*6=120 但根据编译器,这不是真的,所以请解释一下逻辑....

最佳答案

没有逻辑,这是未定义的行为,因为

++b * ++b * ++b;

修改并读取 b 3 次,没有交错序列点。

奖励:如果您尝试 CUBE(1+2),您会看到另一个奇怪的行为。

关于c - 解释这个 C 程序的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15438794/

相关文章:

c - 在 Xcode 中包含外部 C 库

c - 重构 mmap 调用的 "flags"参数

比较两个字符串之间的元素

c - 需要帮助理解我的示例的 malloc(0)

c - 文件记录排序的高效算法

CS50 集成开发环境 : printf returns extra characters

c - Arduino通过串口传递多个参数

c - a.out 中的内核空间

在 C 问题中创建多个线程

c - 了解 Linux 模块代码片段