c - extern 内联 vs #define 宏
问题描述
我最近遇到了一个代码库,它倾向于使用宏而不是外部内联函数。这里使用的语言是 C99,具体实现对性能特别敏感(因此使用宏给出的参数是为了避免频繁调用函数的函数调用/堆栈帧设置)。
为了提高可读性,我建议删除宏以支持外部内联函数。例如,而不是:
#define FooBar(_AnArg, _AnotherArg) \
{ \
if (_AnotherArg) \
{ \
... \
} \
else \
{ \
... \
} \
}
我建议:
extern inline void FooBar(void* anArg, bool anotherArg) {
...
}
查看生成的程序集,我的函数似乎已正确内联,因此与宏一样有效,同时更易于阅读和调试。
有没有考虑我忽略的函数内联?我没有考虑使用宏的其他好处吗?
解决方案
extern inline
函数将导致发出外部符号。宏仅在定义时可见。如果您将extern inline
函数放在头文件中并且两个.c
源文件包含该头文件,那么您的链接器应该抱怨“同一函数的多个定义”错误。
用于static inline
替换宏。
推荐阅读
- javascript - 如何支持 HTML 以使用角度显示从 Mobile 的 DB 设置中获取的表情符号
- node.js - 从 txt 文件中获取 Steam 密钥,然后将其移动到另一个
- corda - 不使用 Corda 的 FinalityFlow
- java - 客户端在哪里放置 log4j.properties 文件?
- reactjs - ReactJS handleHover 更改类名
- python - csv writerows 只写第一行而不写其他行
- python - 来自 URL 的响应代码,其中 location.href = '/';
- python - 如何在 Scikit-Learn 中拟合连续批次?
- rabbitmq - 什么会导致 `whereis(user)` 返回 undefined?
- bash - 如何获取字符串的数字部分并将其存储在 shell 中的变量中?