我的编译器(GCC)给我警告:

警告:函数的隐式声明

它为什么会来?


当前回答

GNU C编译器告诉您,它可以在程序作用域中找到特定的函数名。尝试在头文件中将其定义为私有原型函数,然后将其导入到主文件中。

其他回答

如果你定义了正确的头文件并且使用了非GlibC库(比如Musl C),当遇到malloc_trim这样的GNU扩展时,gcc也会抛出error:函数的隐式声明。

解决方案是包装扩展和头:

#if defined (__GLIBC__)
  malloc_trim(0);
#endif

When you get the error: implicit declaration of function it should also list the offending function. Often this error happens because of a forgotten or missing header file, so at the shell prompt you can type man 2 functionname and look at the SYNOPSIS section at the top, as this section will list any header files that need to be included. Or try http://linux.die.net/man/ This is the online man pages they are hyperlinked and easy to search. Functions are often defined in the header files, including any required header files is often the answer. Like cnicutar said,

您正在使用的函数的编译器没有看到 声明(“原型”)。

发生此错误是因为您正在尝试使用编译器无法理解的函数。如果要使用的函数是用C语言预定义的,只需包含与隐式函数关联的头文件。 如果它不是一个预定义的函数,那么在主函数之前声明它总是一个很好的做法。

正确的方法是在头文件中声明函数原型。

例子

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
}

你需要在主函数之前声明你想要的函数:

#include <stdio.h>
int yourfunc(void);

int main(void) {

   yourfunc();
 }