我的编译器(GCC)给我警告:
警告:函数的隐式声明
它为什么会来?
我的编译器(GCC)给我警告:
警告:函数的隐式声明
它为什么会来?
当前回答
发生此错误是因为您正在尝试使用编译器无法理解的函数。如果要使用的函数是用C语言预定义的,只需包含与隐式函数关联的头文件。 如果它不是一个预定义的函数,那么在主函数之前声明它总是一个很好的做法。
其他回答
不要忘记,如果函数中调用了任何函数,它们的原型必须位于代码中函数的上方。否则,编译器在尝试编译函数之前可能找不到它们。这将产生问题中的错误。
你需要在主函数之前声明你想要的函数:
#include <stdio.h>
int yourfunc(void);
int main(void) {
yourfunc();
}
如果你定义了正确的头文件并且使用了非GlibC库(比如Musl C),当遇到malloc_trim这样的GNU扩展时,gcc也会抛出error:函数的隐式声明。
解决方案是包装扩展和头:
#if defined (__GLIBC__)
malloc_trim(0);
#endif
正确的方法是在头文件中声明函数原型。
例子
main.h
#ifndef MAIN_H
#define MAIN_H
int some_main(const char *name);
#endif
c
#include "main.h"
int main()
{
some_main("Hello, World\n");
}
int some_main(const char *name)
{
printf("%s", name);
}
用一个文件替代(main.c)
static int some_main(const char *name);
int some_main(const char *name)
{
// do something
}
我认为这个问题并没有百分之百的答案。我正在寻找缺少typeof()的问题,这是编译时指令。
以下链接将有助于了解情况:
https://gcc.gnu.org/onlinedocs/gcc-5.3.0/gcc/Typeof.html
https://gcc.gnu.org/onlinedocs/gcc-5.3.0/gcc/Alternate-Keywords.html#Alternate-Keywords
作为结论,尝试使用__typeof__()代替。还有gcc…-Dtypeof = __typeof__……能帮上忙。