我在.c中定义了我的函数(没有头声明),如下所示:
inline int func(int i) {
return i+1;
}
Run Code Online (Sandbox Code Playgroud)
然后在下面的同一个文件中我使用它:
...
i = func(i);
Run Code Online (Sandbox Code Playgroud)
在链接期间,我得到了"未定义的引用'func'".为什么?
所以我有以下代码:
#include <stdio.h>
#define MAX(a,b) (a) > (b) ? a : b
int abs(int a)
{
if (a > 0)
return a;
else
return a*-1;
}
inline int avg(int a, int b)
{
return (a+b)/2;
}
int math_max(int a, int b)
{
return (avg(a,b)+abs(avg(a,b)-b));
}
int main(int argc, char** argv)
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我编译它时:gcc -g test.c -o test我得到:
/tmp/ccZbHEju.o: In function `math_max':
test.c:(.text+0x33): undefined reference to `avg'
test.c:(.text+0x44): undefined reference to `avg'
collect2: error: ld returned 1 …Run Code Online (Sandbox Code Playgroud) gcc是否完全符合C99标准中规定的内联模型?
我已经浏览了一些关于这个问题的信息.但我无法理解为什么必须使用"extern"或"static"指定内联函数.
在.c文件中,调用在同一转换单元中定义的内联函数会导致错误.编译器行为的原因是什么?
我发现一个帖子是"内联"而没有"静态"或"外部"在C99中有用吗?
这是什么意思?
如果在内联定义可见的情况下调用某些具有外部链接的函数func,则行为与调用另一个函数(例如__func,具有内部链接)的行为相同.