161 votes

ATTENTION : incompatible déclaration implicite de la fonction intégrée « xyz »

Je reçois un certain nombre de ces mises en garde lors de la compilation de quelques fichiers binaires :

Pour tenter de résoudre ce problème, j’ai ajouté

en haut des fichiers C associée à cet avertissement, en plus de la compilation avec les indicateurs suivants :

J’utilise GCC 4.1.2 :

Que dois-je faire pour résoudre ces avertissements ? Merci pour vos conseils.

267voto

Ville Laurikari Points 10484

En C, en utilisant un non déclaré auparavant la fonction constitue une déclaration implicite de la fonction. Dans une déclaration implicite, le type de retour est - int si je me souviens bien. Maintenant, la GCC a intégré dans les définitions de certaines fonctions standard. Si une déclaration implicite ne correspond pas à la construit-dans la définition, vous obtenez ce message d'avertissement.

Pour résoudre le problème, vous devez déclarer les fonctions avant de les utiliser; normalement, vous le faire en incluant l'en-tête approprié. Je recommande de ne pas utiliser l'option-fno-builtin-* drapeaux si possible.

Au lieu de stdlib.h, vous devriez essayer

#include <string.h>

C'est là que strcpy et strncpy sont définies, au moins selon la fonction strcpy(2) page de man.

L' exit fonction est définie dans stdlib.h, si, donc je ne sais pas ce qui se passe là-bas.

16voto

Brandon Points 1135

Dans le cas de certains programmes, ces erreurs sont normales et ne doivent pas être fixe.

Je reçois ces messages d'erreur lors de la compilation du programme phrap (par exemple). Ce programme arrive à contenir du code qui modifie ou remplace une partie des fonctions intégrées, et quand j'ai inclure les fichiers d'en-tête pour résoudre les mises en garde, au lieu de GCC génère un tas d'erreurs. Donc, fixant les avertissements rompt effectivement l'accumulation.

Si vous avez la source dans le cadre d'une distribution qui devrait compiler normalement, les erreurs pourraient être normal. Consultez la documentation pour en être sûr.

10voto

Eric Leschinski Points 14289

Voici un code C qui génère l’erreur mentionné ci-dessus :

Mise à jour sur Fedora 17 Linux 64 bit avec gcc comme ceci :

Pour rendre la mise en garde s’en aller, ajoutez cette déclaration au début du fichier :

7voto

ajlittoz Points 18

J’ai rencontré ces avertissements sur `` fonction. Page de manuel dit que cette fonction est un GNU, extension et carnet de bord indique :

Lorsque est ajouté à ma source avant la , les déclarations pour les extensions de GNU sont rendues visibles et avertissements disparaissent.

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