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

警告:函数的隐式声明

它为什么会来?


当前回答

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

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

int main(void) {

   yourfunc();
 }

其他回答

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

#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

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,

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

在main.c中执行#includes时,将#include引用放在包含被引用函数的文件的include列表顶部。 例如,这是main.c,你引用的函数在“SSD1306_LCD.h”中

#include "SSD1306_LCD.h"    
#include "system.h"        #include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#include <string.h>
#include <math.h>
#include <libpic30.h>       // http://microchip.wikidot.com/faq:74
#include <stdint.h>
#include <stdbool.h>
#include "GenericTypeDefs.h"  // This has the 'BYTE' type definition

上面的代码不会生成“函数隐式声明”错误,但是下面的代码会生成-

#include "system.h"        
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#include <string.h>
#include <math.h>
#include <libpic30.h>       // http://microchip.wikidot.com/faq:74
#include <stdint.h>
#include <stdbool.h>
#include "GenericTypeDefs.h"     // This has the 'BYTE' type definition
#include "SSD1306_LCD.h"    

完全相同的#include列表,只是顺序不同。

对我来说确实如此。

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

例如:

int main()
{
    fun(2, "21"); /* The compiler has not seen the declaration. */       
    return 0;
}

int fun(int x, char *p)
{
    /* ... */
}

你需要在main之前声明你的函数,像这样,直接或在头文件中声明:

int fun(int x, char *p);