c++/g++ 宏异常

Macro anomaly in c++/g++

下面的代码应该 return 值 216 但它 returns 392 即 (7*7*8) 。有人可以解释一下吗?

#include<iostream>
#define cube(x) (x*x*x)
    using namespace std;

    int main()
     {
        int x=5;
        cout<<cube(++x);
        cout<<endl;
        return 0;
      } 

你真的应该使用函数而不是宏。 cube(++x) 扩展为

++x*++x*++x

这根本不是我们想要的。

宏展开后你将得到:

using namespace std;

int main()
 {
    int x=5;
    cout<<(++x*++x*++x);
    cout<<endl;
    return 0;
  }

这是未定义的行为。

只需使用函数而不是 cube 宏:

int cube(int x) {
   return x * x * x;
}