据我所知,当在单个翻译单元中使用时,C中的inline
函数的工作方式与C ++中的工作原理几乎相同,并且在这种情况下无需深入探讨extern inline
的困难。但是,以下包含三个文件的程序似乎无法在C中编译,我正在努力找出原因。
int f();
inline int g();
#include "f.h"
inline int g() {
return 5;
}
int f() {
return 3 + g();
}
#include "f.h"
#include <stdio.h>
int main() {
printf("%d", f());
return 0;
}
告诉存在对g
的未定义引用。但是,由于g
仅在f.c文件中使用,因此我无法确切确定问题出在哪里。
来自C标准(6.7.4函数规范)
7 ,,对于具有外部链接的功能,以下限制适用:如果使用内联函数指定符声明函数,然后也应在同一个翻译单元中定义]]
在您的项目中,函数
g
在带有main的转换单元中声明。