Mon compilateur (GCC) me donne l'avertissement:
avertissement: déclaration implicite de fonction
S'il vous plaît, aidez-moi à comprendre pourquoi cela arrive.
c
compiler-warnings
Angus
la source
la source
Réponses:
Vous utilisez une fonction pour laquelle le compilateur n'a pas encore vu de déclaration (" prototype ").
Par exemple:
Vous devez déclarer votre fonction avant main, comme ceci, directement ou dans un en-tête:
la source
La bonne façon est de déclarer le prototype de fonction dans l'en-tête.
Exemple
main.h
principal c
Alternative avec un fichier (main.c)
la source
Lorsque vous effectuez vos #includes dans main.c, placez la référence #include dans le fichier qui contient la fonction référencée en haut de la liste d'inclusion. Par exemple, dites que c'est main.c et que votre fonction référencée est dans "SSD1306_LCD.h"
Ce qui précède ne générera pas l'erreur de "déclaration implicite de fonction", mais ci-dessous:
Exactement la même liste #include, juste un ordre différent.
Eh bien, ça l'a fait pour moi.
la source
Lorsque vous obtenez le,
error: implicit declaration of function
il devrait également répertorier la fonction incriminée. Souvent, cette erreur se produit en raison d'un fichier d'en-tête oublié ou manquant, donc à l'invite du shell, vous pouvez taperman 2 functionname
et consulter laSYNOPSIS
section en haut, car cette section répertorie tous les fichiers d'en-tête qui doivent être inclus. Ou essayez http://linux.die.net/man/ Ce sont les pages de manuel en ligne sur lesquelles ils sont hyperliés et faciles à rechercher. Les fonctions sont souvent définies dans les fichiers d'en-tête, y compris tout fichier d'en-tête requis est souvent la réponse. Comme l'a dit cnicutar,la source
Si les en-têtes corrects sont définis et que vous utilisez une
GlibC
bibliothèque non (comme Musl C ), ellegcc
lancera également deserror: implicit declaration of function
extensions GNU telles que cellesmalloc_trim
rencontrées.La solution consiste à envelopper l'extension et l'en-tête :
la source
Vous devez déclarer la fonction souhaitée avant votre fonction principale :
la source
Je pense que la question n'est pas répondue à 100%. Je cherchais un problème avec le typeof () manquant, qui est la directive de temps de compilation.
Les liens suivants mettront en lumière la 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
à la suite d'une contrainte, essayez d'utiliser à la
__typeof__()
place.gcc ... -Dtypeof=__typeof__ ...
Peut également aider.la source