0
#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;
}

我对这个宏定义语句感到困惑?我也需要输出?

4

3 回答 3

1

那个部分

CUBE(b++)

将转换为

(b++ * b++ * b++)

由于在单个语句中修改变量,这是未定义的行为或问题。建议避免这种情况。

尝试传递不带++or的变量--

于 2013-09-14T05:19:12.130 回答
0
a=CUBE(b++)/b++;  

      |  
      V  


a=(b++ * b++ * b++)/b++ ;    

在上面的表达式中,在序列点之间修改 b 值会由于缺少Sequence_point而导致未定义的行为

为了避免这种首先分配然后增加

   a=CUBE(b)/b;
   b++; 
于 2013-09-14T05:25:26.393 回答
0
  1. 用于#define CUBE(x) ((x)*(x)*(x))避免错误 whenx是一个表达式。

  2. a = CUBE(b++)/(b++);a after 执行语句的值取决于您使用的编译器或其他东西。这被称为undefined behavior

于 2013-09-14T05:27:18.413 回答