Mein Compiler (GCC) warnt mich:
Warnung: implizite Funktionsdeklaration
Bitte helfen Sie mir zu verstehen, warum es kommt.
Mein Compiler (GCC) warnt mich:
Warnung: implizite Funktionsdeklaration
Bitte helfen Sie mir zu verstehen, warum es kommt.
Antworten:
Sie verwenden eine Funktion, für die der Compiler noch keine Deklaration (" Prototyp ") gesehen hat.
Beispielsweise:
int main()
{
fun(2, "21"); /* The compiler has not seen the declaration. */
return 0;
}
int fun(int x, char *p)
{
/* ... */
}
Sie müssen Ihre Funktion vor main deklarieren, entweder direkt oder in einer Kopfzeile:
int fun(int x, char *p);
Der richtige Weg ist, den Funktionsprototyp im Header zu deklarieren.
main.h
#ifndef MAIN_H
#define MAIN_H
int some_main(const char *name);
#endif
Haupt c
#include "main.h"
int main()
{
some_main("Hello, World\n");
}
int some_main(const char *name)
{
printf("%s", name);
}
Alternative mit einer Datei (main.c)
static int some_main(const char *name);
int some_main(const char *name)
{
// do something
}
Wenn Sie Ihre #includes in main.c ausführen, setzen Sie den # include-Verweis auf die Datei, die die referenzierte Funktion enthält, oben in die Include-Liste. Angenommen, dies ist main.c und Ihre referenzierte Funktion befindet sich in "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
Das Obige erzeugt nicht den Fehler "implizite Funktionsdeklaration", sondern das Folgende:
#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"
Genau die gleiche # include-Liste, nur andere Reihenfolge.
Nun, das hat es für mich getan.
Wenn Sie das bekommen error: implicit declaration of function
, sollte es auch die störende Funktion auflisten. Dieser Fehler tritt häufig aufgrund einer vergessenen oder fehlenden Header-Datei auf. Sie können also an der Shell-Eingabeaufforderung man 2 functionname
den SYNOPSIS
Abschnitt oben eingeben und anzeigen , da in diesem Abschnitt alle Header-Dateien aufgelistet werden, die eingeschlossen werden müssen. Oder versuchen Sie es mit http://linux.die.net/man/. Dies sind die Online-Manpages, auf die sie verlinkt sind und die leicht zu durchsuchen sind. Funktionen werden häufig in den Header-Dateien definiert, einschließlich aller erforderlichen Header-Dateien ist häufig die Antwort. Wie cnicutar sagte,
Sie verwenden eine Funktion, für die der Compiler noch keine Deklaration ("Prototyp") gesehen hat.
Wenn Sie die richtigen Header definiert haben und eine Nicht- GlibC
Bibliothek (wie Musl C ) verwenden, gcc
wird auch ausgelöst, error: implicit declaration of function
wenn GNU-Erweiterungen wie z malloc_trim
.
Die Lösung besteht darin, die Erweiterung und den Header zu verpacken :
#if defined (__GLIBC__)
malloc_trim(0);
#endif
Ich denke, die Frage ist nicht zu 100% beantwortet. Ich habe nach einem Problem mit dem fehlenden typeof () gesucht, bei dem es sich um eine Direktive zur Kompilierungszeit handelt.
Folgende Links beleuchten die Situation:
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
ab Zwang versuchen, __typeof__()
stattdessen zu verwenden . Auch gcc ... -Dtypeof=__typeof__ ...
kann helfen.