C定义语句函数调用一次还是每次使用宏时调用?
在下面的C代码中,该宏是将C定义语句函数调用一次还是每次使用宏时调用?,c,macros,C,Macros,在下面的C代码中,该宏是将MIN\u WORDS的所有实例替换为size\u to\u WORDS(0)还是将替换为该函数调用的结果 #define MIN_WORDS size_to_words(0) 我不希望每次调用函数都会带来性能开销。好问题,要了解发生了什么,您需要认识到这两件事 宏由预处理器解析 函数调用在程序执行期间解析 将发生的情况如下: 编译包含宏的代码时,预处理器 将首先用宏的定义替换所有宏 创建可执行文件时,将使用所有这些 函数调用。在运行时,您将调用该函数 每一次
MIN\u WORDS
的所有实例替换为size\u to\u WORDS(0)
还是将替换为该函数调用的结果
#define MIN_WORDS size_to_words(0)
我不希望每次调用函数都会带来性能开销。好问题,要了解发生了什么,您需要认识到这两件事
- 宏由预处理器解析
- 函数调用在程序执行期间解析
- 编译包含宏的代码时,预处理器 将首先用宏的定义替换所有宏
- 创建可执行文件时,将使用所有这些 函数调用。在运行时,您将调用该函数 每一次
tl;dr:预处理器不会解析函数调用并优化代码,因此,如果宏是函数,则除非为您进行优化,否则代码将调用函数。好问题,要理解发生了什么,您需要识别这两件事
- 宏由预处理器解析
- 函数调用在程序执行期间解析
- 编译包含宏的代码时,预处理器 将首先用宏的定义替换所有宏
- 创建可执行文件时,将使用所有这些 函数调用。在运行时,您将调用该函数 每一次
tl;dr:预处理器不会解析函数调用并优化代码,因此如果宏是函数,则除非为您进行优化,否则代码将调用函数。函数调用在运行时进行。宏替换发生在编译时。此外,除非函数很长且需要花费大量时间,否则函数的实际调用足够快,几乎无法测量。你没有尝试做任何事吗?“不想要”或“不能拥有”?我很少进行优化,除非有几个因素,甚至是速度的大小需要提高。函数调用发生在运行时。宏替换发生在编译时。此外,除非函数很长且需要花费大量时间,否则函数的实际调用足够快,几乎无法测量。你没有尝试做任何事吗?“不想要”或“不能拥有”?我很少优化,除非有几个因素,甚至是速度的大小来获得。