285 votes

avertissement : déclaration implicite de la fonction

Mon compilateur (GCC) me donne l'avertissement :

avertissement : déclaration implicite de la fonction

Aidez-moi à comprendre pourquoi cela se produit.

3 votes

Un "pourquoi ne donne-t-il pas une version d'erreur" : stackoverflow.com/questions/434763/

2 votes

Cela peut également se produire si vous oubliez d'inclure un fichier d'en-tête. Par exemple, si vous essayez d'utiliser strlen() sans inclure string.h, vous obtiendrez cette erreur

2voto

Stuart Points 61

Si vous avez défini les en-têtes corrects et que vous utilisez un système non GlibC (comme Musl C ) gcc lancera également error: implicit declaration of function lorsque les extensions GNU telles que malloc_trim sont rencontrés.

La solution consiste à envelopper l'extension et l'en-tête :

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

0 votes

Le premier lien est à moitié cassé. Le deuxième lien est complètement cassé ( "Hmm. Nous avons des difficultés à trouver ce site. Nous ne pouvons pas nous connecter au serveur de patchwork.alpinelinux.org." ).

0 votes

Alpine utilise désormais Gitlab - liens mis à jour

1voto

Chris Points 9

N'oubliez pas, si des fonctions sont appelées dans votre fonction et leurs prototypes doivent être situés au-dessus de votre fonction dans le code sinon le compilateur pourrait ne pas les trouver avant de tenter de compiler votre fonction. Cela générera l'erreur en question.

2 votes

Cela ajoute-t-il quelque chose qui n'a pas déjà été fourni par les autres réponses ?

1voto

i am francis Points 1

Cette erreur se produit parce que vous essayez d'utiliser une fonction que le compilateur ne comprend pas. Si la fonction que vous essayez d'utiliser est prédéfinie dans le langage C, il suffit d'inclure un fichier d'en-tête associé à la fonction implicite. S'il ne s'agit pas d'une fonction prédéfinie, il est toujours bon de déclarer la fonction avant la fonction principale.

-1voto

Peeter Vois Points 66

Je pense que la réponse à la question n'est pas complète. Je cherchais un problème lié à l'absence de typeof(), qui est une directive de compilation.

Les liens suivants vous éclaireront sur 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

à partir de la conculsion, essayez d'utiliser __typeof__() à la place. Aussi gcc ... -Dtypeof=__typeof__ ... peut vous aider.

0 votes

La première référence dit "Si vous écrivez un fichier d'en-tête qui doit fonctionner lorsqu'il est inclus dans des programmes ISO C, écrivez __typeof__ au lieu de typeof . "

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X