在下面的 C 代码中,这个宏会用 size_to_words(0)
替换 MIN_WORDS
的所有实例,还是会用该函数调用的结果替换?
#define MIN_WORDS size_to_words(0)
我不希望每次都调用该函数的性能开销。
最佳答案
好问题,要了解发生了什么,您需要认识到这两件事。
- 宏由预处理器解析
- 函数调用在程序执行期间被解析
接下来会发生什么:
- 当您编译包含宏的代码时,预处理器 将首先用它们的定义替换所有宏。
- 当你的可执行文件被创建时,它将与所有这些一起创建 函数调用。在运行时,您将调用该函数 每次。
如果您使用优化标志进行编译,它可能会为您优化不必要的函数调用,请检查 gcc -O3 和 -O2 标志并查看它们的作用。
tl;dr:预处理器不会解析函数调用并优化您的代码,因此如果您的宏是一个函数,您的代码将调用该函数,除非为您完成优化。
关于C define语句函数调用一次还是每次使用宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49799355/