C ++预处理器中的前缀增量

时间:2011-05-30 19:33:49

标签: c++ c-preprocessor increment prefix

有人可以解释为什么b = 150?

#define CUBE(X) ((X) * (X) * (X))

using namespace std;

int main( void )
{
    int a = 3,b = 0;  

    cout << "before "<< endl;
    cout << "a = " << a;
    cout << endl;
    cout << "b = " << b;
    cout << endl;
    cout << "after"<< endl;
    b = CUBE( ++a );
    cout << "a = " << a;
    cout << endl;
    cout << "b = " << b;
    getchar();
    return 0;
}

3 个答案:

答案 0 :(得分:10)

因为您正在使用宏。宏不是函数。

该行:

b = CUBE( ++a );

重写为:

b = ((++a) * (++a) * (++a))
在代码编译之前

The code then invokes Undefined Behaviour因为您在序列点之间多次增加a

如果你改用函数会更好。

答案 1 :(得分:3)

(++a) * (++a) * (++a)undefined behaviour

答案 2 :(得分:3)

未定义的行为 - 您在序列点之间多次修改a。这就是为什么inline函数是非常优越的选择。