【发布时间】:2013-07-06 15:24:18
【问题描述】:
如果我将 .h 文件中的函数定义为
extern int returnaint(void);
在相关的.c文件中定义为
inline int returnaint(void) {
return 1;
}
并将标题包含在另一个 .c 文件中并使用该功能?当我单独编译这些东西,为每个 .c 文件创建一个目标文件然后链接它们时,是否包含内联函数,或者会发生什么?
我知道编译器可以忽略inline,但是如果它在这种情况下不忽略它呢?
【问题讨论】:
-
然后你得到一个链接器错误。
-
@H2CO3,不,永远不会出现链接器错误。具有
inline定义的编译单元也看到extern声明,因此必须发出一个符号。请看我的回答。 -
请注意,inline 的语义是从 c99 开始定义的,一些编译器(例如 gcc)仍然默认为 c89。 greenend.org.uk/rjk/tech/inline.html 有一个很好的总结和一个关于如何根据你想要支持的编译器标准使用内联的指南。
-
extern inline 的可能重复项。另请参阅What's the difference between static inline, extern inline and a normal inline function? 和 Jonathan Wakely 在 GCC 邮件列表中的答案undefined errors for inline function。
标签: c compiler-construction header linker inline