我在.c(不带标头声明)中定义了我的函数,如下所示:
inline int func(int i) {
return i+1;
}
然后在下面的同一个文件中,我使用它:
...
i = func(i);
在链接过程中,我得到了"未定义的对‘func’的引用".为什么?
我在.c(不带标头声明)中定义了我的函数,如下所示:
inline int func(int i) {
return i+1;
}
然后在下面的同一个文件中,我使用它:
...
i = func(i);
在链接过程中,我得到了"未定义的对‘func’的引用".为什么?
C99中的inline
种模式与大多数人的思维方式不同,特别是与C++所使用的模式不同.
inline
只是一个提示,编译器不会抱怨双重定义的符号.它不能保证函数是内联的,如果需要的话,实际上也不能保证生成符号.要强制生成符号,必须在inline
定义中添加一种实例化:
int func(int i);
通常在头文件中有inline
个定义,然后包含在多个头文件中.c文件(编译单元).你只能在一个编译单元中找到上面这一行.您可能只看到您遇到的问题,因为您没有在编译器运行中使用优化.
所以,你的用例中有inline
个.c文件没有多大意义,最好使用static
,即使是额外的inline
也买不到多少.