我决定尝试一下.我知道宏是邪恶的,应该避免,但想看看如果我做这样的事情会发生什么.
#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)- 它只看到宏扩展.
| 归档时间: |
|
| 查看次数: |
58 次 |
| 最近记录: |