#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;
}
我对这个宏定义语句感到困惑?我也需要输出?
那个部分
CUBE(b++)
将转换为
(b++ * b++ * b++)
由于在单个语句中修改变量,这是未定义的行为或问题。建议避免这种情况。
尝试传递不带++
or的变量--
。
a=CUBE(b++)/b++;
|
V
a=(b++ * b++ * b++)/b++ ;
在上面的表达式中,在序列点之间修改 b 值会由于缺少Sequence_point而导致未定义的行为
为了避免这种首先分配然后增加
a=CUBE(b)/b;
b++;
用于#define CUBE(x) ((x)*(x)*(x))
避免错误 whenx
是一个表达式。
a = CUBE(b++)/(b++);
a after 执行语句的值取决于您使用的编译器或其他东西。这被称为undefined behavior
。