C define语句函数调用一次还是每次使用宏?

标签 c macros

在下面的 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/

相关文章:

带有三元运算符的 C void 指针

c - 验证某个键是否在哈希表中

c++ - 什么是 G_STMT_START 和 G_STMT_END?

html - 使用 OOoWrite,我想添加自定义 html 元素

c - 在 C 中使用宏处理操作

c - GPS代码不读取纬度数据

检查正在运行的程序中的内存泄漏

c 宏,不带引号的标记粘贴

c - 使 C 头文件带有结构函数指针的常规方法是什么?

c - 在C结构中添加字段时如何提醒开发人员访问和查看一些相关函数?