C ++预处理程序中的前缀增量

| 有人可以解释为什么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;
}
    
已邀请:
        因为您正在使用宏。宏不是函数。 该行:
b = CUBE( ++a );
被重写为:
b = ((++a) * (++a) * (++a))
在代码编译之前。 然后,代码将调用“未定义行为”,因为在序列点之间您将“ 3”递增了几次。 如果您改用函数会更好。     
        
(++a) * (++a) * (++a)
是未定义的行为。     
        未定义的行为-您在序列点之间多次修改
a
。这就是“ 6”功能是极为优越的选择的原因。     

要回复问题请先登录注册