宏观问题和可能的产出是什么?

时间:2013-09-14 05:15:37

标签: c macros operators increment

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

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

3 个答案:

答案 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)

  1. 使用#define CUBE(x) ((x)*(x)*(x))以避免在x表达时出错。

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