我正在使用在不同文件中定义的内联函数来解决一个奇怪的问题。请考虑以下情况。
在main.c中:
#include "inline.h"
int main(void) {
int i = 0;
for (i = 0; i<=100000; i++) {
omfg(i);
}
return 0;
}
inline.h中的:
inline int omfg(unsigned int num);
和inline.c:
#include <stdio.h>
inline int omfg(unsigned int num) {
int i = 0;
for (i = 0; i<= 10; i++) {
printf(".");
num++;
}
return num;
}
当我用gcc编译时使用类似于:
的东西$ gcc inline.c main.c -o binary -Wall -Winline -Wextra -O2
我明白了:
main.c: In function 'main':
inline.h:2: warning: inlining failed in call to 'omfg': function body not available
main.c:7: warning: called from here
我做错了什么?我应该以不同的方式声明omfg()
吗?它非常令人费解...
答案 0 :(得分:2)
如果要进行编译,必须将内联函数的实现放在头文件中。
答案 1 :(得分:2)
将实现移动到头文件。您可以预先声明该函数,然后在下面定义它,或者甚至#include一个特殊的文件,如标题底部的inline.inl来隐藏它,但从根本上说,如果它是内联的,函数定义必须是可用的。