extern inline int foo() 与extern int foo() 有什么区别?

编程语言 2026-07-09

浏览这三个链接:这个这个这个,我了解到 inline int foo() {} 与通常的 int foo() {} 不同,因为它对语法提出了额外的要求,例如代码中的某处需要extern声明。

我也理解 static inline int foo() {}static int foo() {} 的区别在于,前者在其翻译单元内被内联的可能性更大。

根据标准,extern inline int foo() {}extern int foo() {} 之间有什么差异?它是否暗示在翻译单元内进行内联?当foo在某个其他.c文件中被调用时,它是否有可能跨翻译单元被内联? 这里的已采纳答案 解释说,C99中的 extern inline foo() {} 是GNU89的原始 inline foo() {},并且可能会被内联。但我不清楚这种内联可能发生的范围,即局限于某个TU,还是跨整个项目。

解决方案

这取决于所使用的C 标标准版本和编译器实现,因为它是在C99的基础上重新定义的。如果在编译时未指定C 版本,那么得到的就是你所用编译器的默认值。

extern inline 最常见的用意,是让编译器在每次使用该函数时,既可以选择进行内联,也可以使用一个全局版本(该全局版本也必须可用)。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章