在以下C代码中,此宏是否会将MIN_WORDS
的所有实例替换为size_to_words(0)
,还是会被该函数调用的结果替换?
#define MIN_WORDS size_to_words(0)
我不希望每次都调用该函数的性能开销。
答案 0 :(得分:3)
很好的问题,要了解发生了什么,你需要认识到这两件事。
将会发生以下情况:
如果使用优化标志进行编译,它可能会为您优化不必要的函数调用,请查看gcc -O3和-O2标志并查看它们的作用。
tl; dr:预处理器不会解析函数调用并优化代码,所以如果你的宏是一个函数,你的代码将调用函数,除非为你做了优化。