我的编译器(GCC)向我发出警告:
警告:函数的隐式声明
请帮助我理解为什么会这样。
我的编译器(GCC)向我发出警告:
警告:函数的隐式声明
请帮助我理解为什么会这样。
Answers:
您使用的函数的编译器尚未看到声明(“ prototype ”)。
例如:
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);
正确的方法是在标头中声明函数原型。
主文件
#ifndef MAIN_H
#define MAIN_H
int some_main(const char *name);
#endif
main.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
}
在main.c中执行#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列表,只是顺序不同。
好吧,它对我有用。
当您获得error: implicit declaration of function
它时,还应该列出有问题的功能。通常由于头文件被遗忘或丢失而发生此错误,因此在shell提示符下,您可以键入man 2 functionname
并查看SYNOPSIS
顶部的部分,因为此部分将列出需要包含的所有头文件。或者尝试http://linux.die.net/man/这是它们的超链接且易于搜索的在线手册页。函数通常在头文件中定义,包括任何必需的头文件通常就是答案。就像尼古拉说的那样,
您正在使用编译器尚未看到声明(“原型”)的函数。
我认为这个问题不能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__()
代替。也gcc ... -Dtypeof=__typeof__ ...
可以帮助。