GCC和内联C函数在其他文件中声明(“函数体不可用”问题)

时间:2011-06-22 02:23:21

标签: c gcc

我正在使用在不同文件中定义的内联函数来解决一个奇怪的问题。请考虑以下情况。

在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()吗?它非常令人费解...

2 个答案:

答案 0 :(得分:2)

如果要进行编译,必须将内联函数的实现放在头文件中。

答案 1 :(得分:2)

将实现移动到头文件。您可以预先声明该函数,然后在下面定义它,或者甚至#include一个特殊的文件,如标题底部的inline.inl来隐藏它,但从根本上说,如果它是内联的,函数定义必须是可用的。