c++中的宏处理器

Macroprocessor in c++

本文关键字:处理器 c++      更新时间:2023-10-16

大家好,我对这个代码有疑问

#include<iostream>
#define SQR(x)(x*x) 
int main() {
    int a, b=3;
    a = SQR(b+1);
    std::cout << a;
}

结果是7而不是16。我不明白。

宏扩展为文字

(b + 1 * b + 1)

所以你的结果是:

3 + (1 * 3) + 1.

将宏更改为:

#define SQR(x)((x)*(x))

它应该起作用。

替换宏后,代码如下所示:

int main() {
    int a, b=3;
    a = b+1*b+1;
    std::cout << a;
}

与具有运算符优先级的b+(1*b)+1相同。你可以通过使用一个函数来修复它:

inline int SQR(int x) {
    return x*x;
}

或者更一般地说:

template<class T> inline T SQR(T x) {
    return x*x;
}

或者将宏参数括在括号中:

#define SQR(x) ((x)*(x))

这将扩展到((b+1)*(b+1))。但是,一般来说,我不建议为此使用宏,因为还有其他潜在的问题,例如SQR(x++)扩展到((x++)*(x++))

这就是您的代码扩展到的内容:

a = (b + 1 * b + 1)

由于*+具有更高的优先级,因此首先评估1 * b