混合内联和宏功能

Tuğ*_*man 2 c++ macros inline

我决定尝试一下.我知道宏是邪恶的,应该避免,但想看看如果我做这样的事情会发生什么.

#include <iostream>
using namespace std;
inline void add(int x, int y) { cout << "Inline: " << x + y << endl; }
#define add(x,y) ( cout << "Macro: " << x + y << endl )

int main()
{
    add(3,5);
}
Run Code Online (Sandbox Code Playgroud)

它输出:

Macro: 8
Run Code Online (Sandbox Code Playgroud)

如果我注释掉#define内联线开始工作,输出就变成了Inline: 8.

我的问题是,为什么编译器决定使用宏函数而不是内联.谢谢!

我正在使用Linux Mint 18.2,g++ 5.4.0没有参数g++ -g t2.cpp -o t2.

小智 5

编译之前通过预处理器执行宏替换.因此编译器永远不会看到add(3,5)- 它只看到宏扩展.

  • 编译器不"忽略内联" - 它根本看不到`add(3,5)`函数调用,因此无法内联或不调用`add`函数. (2认同)