【问题标题】:C++ #define directive [duplicate]C ++ #define指令[重复]
【发布时间】:2025-12-02 10:15:01
【问题描述】:

还有下一段代码:

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

int main()
{
    int a = 1, b = 2;
    int res = F(a + b);
}   

res值是6,但是为什么呢?

【问题讨论】:

  • 试试#define F(x) (2*(x)*(x)),看看你会得到什么。
  • 宏是简单的文本替换。您的宏扩展为 (2*a+b*a+b)

标签: c++ operation


【解决方案1】:

宏用于替换文本。这就是 ht 代码正在做的事情:

2*x*x

将 x 替换为 (a+b) 2*a+b*a+b

a = 1 b = 2

答案是 6

【讨论】:

    【解决方案2】:

    #define 指令只是替换宏中的参数。所以在你的代码中:

    F(a + b) 变成 2*a + b*a + b2*1+2*1+2 等于 6。

    我建议在这个问题上使用内联函数,但如果你真的想使用宏(由于很多原因,在这种情况下强烈不推荐使用宏)用括号括住每个参数。

    示例:#define F(x) (2*(x)*(x))

    【讨论】: