【发布时间】:2011-07-19 04:47:17
【问题描述】:
在以下简化的example.c 文件上执行cc -std=c99 example.c:
inline void a()
{
}
int main()
{
a();
return 0;
}
得到我:
在函数“main”中:
example.c:(.text+0x7): undefined reference to 'a'
collect2: ld 返回 1 个退出状态
据我了解,这与 C99 标准的要求有关,即在无法内联正文的情况下使用的每个内联非静态函数都需要一个确切的定义?如果是这样,我想我可以用static inline 代替,但我不希望这以后会咬我,那么这里最好的做法是什么?显然,我想坚持 C99 并且我想内联一些函数。 (是的,我知道编译器通常知道要内联什么而不被告知,但我有我的理由)
【问题讨论】:
-
inline关键字不是您想的那样。充其量只是向编译器暗示此代码可能是内联的候选者。更糟糕的是,它被忽略了。 -
你的cc可以编译其他文件吗?可能是编译器有问题。
-
实际上我正在使用'-Winline',所以在我的情况下它不会被忽略。请原谅我没有具体说明这一点,但我不认为有人会评论
inline在 C 中的含义或对这方面的问题做出反应。在上述大多数其他变体中,您当然是绝对正确的。 @Mihran 不,编译器没有问题。在仔细检查了 C99 规范之后,我将有问题的内联函数指定为static inline并且一切正常。我确实想知道我是否在这里采取了正确的步骤......