Mein Compiler (GCC) warnt mich:
Warnung: implizite Funktionsdeklaration
Bitte helfen Sie mir zu verstehen, warum es kommt.
c
compiler-warnings
Angus
quelle
quelle
Antworten:
Sie verwenden eine Funktion, für die der Compiler noch keine Deklaration (" Prototyp ") gesehen hat.
Beispielsweise:
Sie müssen Ihre Funktion vor main deklarieren, entweder direkt oder in einer Kopfzeile:
quelle
Der richtige Weg ist, den Funktionsprototyp im Header zu deklarieren.
Beispiel
main.h
Haupt c
Alternative mit einer Datei (main.c)
quelle
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".
Das Obige erzeugt nicht den Fehler "implizite Funktionsdeklaration", sondern das Folgende:
Genau die gleiche # include-Liste, nur andere Reihenfolge.
Nun, das hat es für mich getan.
quelle
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-Eingabeaufforderungman 2 functionname
denSYNOPSIS
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,quelle
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 zmalloc_trim
.Die Lösung besteht darin, die Erweiterung und den Header zu verpacken :
quelle
Sie müssen die gewünschte Funktion vor Ihrer Hauptfunktion deklarieren :
quelle
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 . Auchgcc ... -Dtypeof=__typeof__ ...
kann helfen.quelle