【发布时间】:2014-03-20 20:47:15
【问题描述】:
我有一个很长的代码,它被调用了数百万次, 我注意到,如果我将所有宏更改为内联函数,代码运行速度会快很多。
你能解释这是为什么吗?宏不只是文本替换吗?与可以调用函数的内联函数相反?
【问题讨论】:
-
类似于
#define MAX(x, y) ((x) > (y) ? (x) : (y)),它会多次评估其参数。 -
宏只是文本替换。要查看您的编译器对它们做了什么,请使用
-E标志进行编译,例如g++ -E file.cpp -
MAX(expensivecall(), otherexpensivecall())将执行其中一个昂贵的调用两次。使用多个宏,错误会变得更糟。 -
如果使用 C++,请不要使用宏。内联函数会更好
-
@Androidy - 编译器理解语言的语义。预处理器没有。因此编译器在优化时可以有更好的 bash
标签: c++ c performance