宏在c ++中增加

时间:2014-04-18 17:05:16

标签: c++ macros

1.macros一直很困难。 2.Below是代码和输出是125和7 ....请详细说明工作

#define mul(x) (x++ * ++x * x++)
#include<iostream.h>

void main()
{
    int a=4,j;
    j=mul(a);
    cout<<j<<endl;
    cout<<a<<endl;
}

2 个答案:

答案 0 :(得分:0)

您的程序会导致未定义的行为。 j可以是任何东西。

在此处阅读更多内容:Undefined behavior and sequence points

答案 1 :(得分:-1)

我认为发生的事情就是这样。

  1. a设为4。
  2. mul被调用,a被传入。
  3. 第二个乘法(++x)有前缀增量,因此xa)增加1. a现在为5。
  4. 现在正在进行乘法运算。由于第一个和最后一个具有后缀增量器,因此在乘法发生之后才会发生任何事情。所以我们有5 * 5 * 5 = 125。
  5. 由于现在完成了乘法运算,因此会发生后缀增量器,使xa)6然后是7。
  6. j则等于125。
  7. ???
  8. 利润!
  9. 编辑: 这解释了他正在经历的行为。我知道在每种情况下都不会发生这种情况。