作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在以下简化的 example.c
文件上执行 cc -std=c99 example.c
:
inline void a()
{
}
int main()
{
a();
return 0;
}
让我:
In function `main':
example.c:(.text+0x7): undefined reference to 'a'
collect2: ld returned 1 exit status
据我了解,这与 C99 标准的要求有关,要求为在主体无法内联的情况下使用的每个内联非静态函数再定义一个?如果是这样,我猜我可以用 static inline
来代替,但我不希望这以后会影响到我,那么这里最好的做法是什么?显然,我想坚持使用 C99,我想内联一些功能。 (是的,我知道编译器通常在没有被告知的情况下知道要内联什么,但我有我的理由)
最佳答案
使用 -O2 左右编译时可能不会出现该错误。
内联函数定义应该放在头文件中,extern inline
声明应该放在一个编译单元中。做
inline void a(void){
// empty
}
// in just one .c file
#include "the-file.h"
extern inline void a(void);
顺便说一句,在没有 void
的情况下声明 a
不是原型(prototype)。
关于c - 如何在 C99 中正确内联和使用内联函数,更正链接失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5369888/
我是一名优秀的程序员,十分优秀!