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

Prefix increment in C++ preprocessor

本文关键字:前缀 预处理 处理器 C++      更新时间:2023-10-16
有人能解释一下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))

在编译代码之前。

然后,代码调用Undefined Behavior,因为您在序列点之间将a递增几次。

如果你使用一个函数会更好。

(++a) * (++a) * (++a)是未定义的行为。

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