了解 extern inline 的作用
内联函数是优化代码性能的宝贵工具,它允许编译器直接插入以下代码将函数放入调用代码中,消除了函数调用开销。但是,内联函数仍然会生成可链接的目标代码,可能允许其他模块引用它们。
外部内联与内联和静态内联
在 C99 之前的 C 中, inline 关键字由各种编译器作为扩展实现。 GNU 的实现引入了三种结构:内联、静态内联和外部内联。虽然内联函数可能由编译器自行决定是否内联,但它们始终会生成可链接的目标代码。
相反,外部内联函数在内联时不会生成可链接的目标代码。这意味着它们不能被其他模块引用,从而确保它们在整个代码库中一致内联。
另一方面,静态内联函数不会生成外部可见的目标代码。这使得它们适合在单个模块内内部使用,而不需要跨多个模块进行协调。
确保函数内联
在您的场景中,您想要确保函数是内联的并且需要使用 FILE 和 LINE 宏, extern inline 会还不够。它仍然允许编译器选择调用外联版本(如果可用)。
为了确保内联,您可以结合使用以下技术:
编译器和版本之间的差异
extern inline 的行为在不同的编译器中有所不同供应商和版本。有些编译器可能不支持它,而其他编译器可能遵循不同的约定。最好参考您所使用的特定编译器的文档。
在 C 中,内联函数必须在使用它们的每个翻译单元中完全定义。因此,extern inline 和 static inline 与 C 中的意义不同。
以上是外部内联与内联和静态内联:什么时候应该使用它们?的详细内容。更多信息请关注PHP中文网其他相关文章!