<分区>
#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=150
和 b=6
的值。请解释一下。
我认为当它执行时 a
的值将被计算为 a=4*5*6=120
但根据编译器,这不是真的,所以请解释一下逻辑....
标签 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=150
和 b=6
的值。请解释一下。
我认为当它执行时 a
的值将被计算为 a=4*5*6=120
但根据编译器,这不是真的,所以请解释一下逻辑....
最佳答案
没有逻辑,这是未定义的行为,因为
++b * ++b * ++b;
修改并读取 b
3 次,没有交错序列点。
奖励:如果您尝试 CUBE(1+2)
,您会看到另一个奇怪的行为。
关于c - 解释这个 C 程序的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15438794/