Comment résoudre l’avertissement la déclaration de fonction n'est pas un prototype
en C
En écrivant des programmes en C, vous pouvez rencontrer un avertissement qui dit “la déclaration de fonction n’est pas un prototype”. Cet avertissement peut être déroutant, surtout si vous essayez d’appeler des fonctions de votre propre bibliothèque. Dans cet article de blog, nous allons explorer ce que signifie cet avertissement, pourquoi il se produit et comment déclarer correctement les prototypes de fonction pour résoudre le problème.
Comprendre l’avertissement
L’avertissement se produit lorsque le compilateur détecte une déclaration de fonction qui ne respecte pas les règles strictes des prototypes de fonction en C. Cela peut arriver pour diverses raisons ; cependant, la racine du problème réside souvent dans la façon dont vous déclarez les fonctions dans vos fichiers d’en-tête.
Le code d’exemple
Pour illustrer cet avertissement, examinons un exemple utilisant trois fichiers :
-
mylib.c – L’implémentation de la fonction.
#include <mylib.h> int testlib() { printf("Bonjour, le monde !\n"); return (0); }
-
mylib.h – Le fichier d’en-tête où la fonction est déclarée.
#include <stdio.h> extern int testlib();
-
myprogram.c – Le programme principal qui appelle la fonction.
#include <mylib.h> int main(int argc, char *argv[]) { testlib(); return (0); }
L’erreur de compilation
Lorsque vous compilez myprogram.c
, vous pourriez voir une erreur comme celle-ci :
Dans le fichier inclus depuis myprogram.c:1
mylib.h:2 avertissement : la déclaration de fonction n'est pas un prototype
Cet avertissement indique que la déclaration de fonction dans mylib.h
est incorrecte ou incomplète selon les normes du langage C.
Comment corriger le problème
Le prototype de fonction
Il est important de comprendre qu’en C, un prototype de fonction spécifie le type de retour de la fonction et ses paramètres. Par exemple :
int testlib();
(Cela signifie quetestlib
peut prendre n’importe quel nombre d’arguments.)int testlib(void);
(Cela signifie explicitement quetestlib
ne prend aucun argument.)
Utilisez void
pour aucun argument
Pour éliminer toute confusion et garantir que votre fonction soit correctement interprétée par le compilateur, utilisez toujours void
dans la liste des paramètres pour les fonctions qui ne prennent aucun argument. Modifiez votre mylib.h
comme suit :
#include <stdio.h>
int testlib(void); // Déclaration corrigée
Supprimez extern
inutile
Un autre point important est que le mot-clé extern
n’est techniquement pas nécessaire pour les déclarations de fonction, puisque tous les noms de fonction sont résolus au moment de la liaison par défaut. Vous pouvez simplement écrire :
#include <stdio.h>
int testlib(void); // Façon préférée de déclarer
En suivant ces pratiques, le compilateur interprétera correctement la fonction comme un prototype qui ne prend aucun paramètre, éliminant ainsi l’avertissement.
Conclusion
Traiter l’avertissement “la déclaration de fonction n’est pas un prototype” est simple. N’oubliez pas d’utiliser void
dans la liste des paramètres lorsque qu’une fonction ne prend aucun argument et notez que l’utilisation explicite de extern
est généralement inutile. En suivant ces directives, vous pouvez éviter toute confusion et vous assurer que vos programmes C se compilent sans problème.
Si vous incorporez ces meilleures pratiques dans vos habitudes de codage, vous constaterez que vous pouvez écrire un code C plus propre et plus précis sans rencontrer de déclarations de fonction ambiguës. Bon codage !