如何解决在其他文件中声明的GCC和内联C函数“功能体不可用”问题
| 我在不同文件中定义内联函数时遇到了一个奇怪的问题。请考虑以下情形。 在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()
吗?令人费解的...
解决方法
将实现移到头文件。您可以在前面声明函数,然后在下面定义它,甚至在头的底部甚至包含#inline.inl这样的特殊文件以将其隐藏,但是从根本上讲,如果函数定义是内联的,则必须可用。
, 如果要编译,则必须将内联函数的实现放入头文件中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。