c 关闭werror 警告:函数的隐式声明




关闭werror (5)

我认为这个问题不是100%的答案。 我正在寻找缺少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__()尝试使用__typeof__()来代替。 还有gcc ... -Dtypeof=__typeof__ ...可以提供帮助。

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

警告:函数的隐式声明

请帮我理解为什么会这样。


在main.c中执行#include时,将#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列表,只是不同的顺序。

那么,它为我做了。


如果你定义了正确的头文件并且正在使用非GlibC库(比如Musl C ),那么gcc也会抛出error: implicit declaration of function当遇到像malloc_trim这样的GNU扩展时, error: implicit declaration of function

解决方案是包装扩展名和标题

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

当你得到error: implicit declaration of function也应该列出违规函数。 通常这个错误是因为头文件被遗忘或缺失而发生的,所以在shell提示符下你可以输入man 2 functionname并查看顶部的SYNOPSIS部分,因为这部分将列出需要包含的所有头文件。 或者尝试http://linux.die.net/man/这是他们超链接并且易于搜索的在线手册页。 函数通常在头文件中定义,包括任何必需的头文件通常都是答案。 像cnicutar说的,

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


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

例如:

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);






compiler-warnings