#define CUBE(x)(x*x*x)
int main()
{
int a, b;
b = 3;
a = CUBE(b++)/b++;
printf(a=%d b=%d\n", a, b);
return 0;
}
我对这个宏定义语句感到困惑?我也需要输出?
答案 0 :(得分:1)
部分
CUBE(b++)
将转换为
(b++ * b++ * b++)
由于在一个语句中修改变量而导致未定义的行为或问题。建议避免这样的事情。
尝试传递不带++
或--
的变量。
答案 1 :(得分:0)
a=CUBE(b++)/b++;
|
V
a=(b++ * b++ * b++)/b++ ;
在上面的表达式中,由于缺少Sequence_point
,b值在序列点之间修改会导致未定义的行为要避免这首先分配然后增加
a=CUBE(b)/b;
b++;
答案 2 :(得分:0)
使用#define CUBE(x) ((x)*(x)*(x))
以避免在x
表达时出错。
a = CUBE(b++)/(b++);
执行语句后a的值取决于您使用的编译器或其他内容。这称为undefined behavior
。