Vidéo: Langage C #8 - fonctions 2024
Que se passe-t-il lorsque vous ne prototypez pas? Comme pour tout ce qui est en programmation C, lorsque vous faites la grimace, le compilateur ou l'éditeur de liens vous informe avec un message d'erreur - ou le programme ne fonctionne pas correctement. Ce n'est pas la fin du monde - non, pas comme programmer un robot militaire ou concevoir un code génétique pour une nouvelle espèce de flytrap de Vénus.
FONCTION DE BASE; NO RETURN
#include l'invite void (); / * Fonction prototype * / int main () {int boucle; entrée char [32]; boucle = 0; while (loop ");}
Exercice 1 : Modifier le code source à partir de la fonction de base; Pas de retour Commentaire sur le prototype de la ligne 3. Construire le résultat.
Les erreurs du compilateur sont des choses merveilleuses, délicieusement précises mais totalement cryptiques: voici le message d'erreur généré par Code:: Blocks, bien que seulement les parties pertinentes du message:
13 Attention: déclaration de fonction implicite ' prompt '23 Attention: types conflictuels pour' prompt '13 Attention: la déclaration implicite précédente de' prompt 'était ici
La première alerte se produit à la ligne 13 du fichier de code source, où la fonction prompt () est utilisée dans le main Le compilateur vous dit que vous utilisez une fonction sans prototype, comme l'indique le message d'erreur, vous déclarez implicitement une fonction, c'est une erreur non-non, mais pas complète. >
L'avertissement final est une référence à l'endroit où la fonction a été appelée, toujours à la ligne 13.
Pour le dire succinctement: Le compilateur n'a aucune idée de ce qui se passe avec la fonction prompt (). Votre code compile, mais l'exécuter est risqué.
Exercice
2 : Modifiez votre code source à partir de l'exercice 10-3. Supprimez le prototype de fonction qui a été commenté à la ligne 3. Coupez et collez (déplacez) la fonction prompt () du bas du listage du code source vers le haut, au-dessus de la fonction main (). Enregistrez, créez et exécutez. Éviter le prototype de fonction montre la solution pour l'exercice 2.
ÉVITER LA FONCTION PROTOTYPE
#include / * Invite d'affichage * / invite de void (void) {printf ("C: DOS>");} int main () {int boucle; entrée char [32]; boucle = 0; while (boucle <5) {prompt (); fgets (entrée, 31, stdin); loop = loop + 1;} return (0);}
L'écriture de la fonction main () suivie d'autres fonctions permet une meilleure lisibilité, même si vous êtes libre de mettre vos propres fonctions en premier pour éviter le prototypage.Et si vous ne le faites pas, gardez à l'esprit que d'autres programmeurs peuvent le faire de cette façon, alors ne soyez pas surpris quand vous le voyez.
Messages d'erreur du compilateur dans Code:: Les blocs ont des parenthèses après eux. Les commentaires entre parenthèses font référence à l'option
switch , ou à l'option de ligne de commande traditionnelle, qui permet de vérifier un avertissement particulier. Par exemple, les messages d'erreur de l'exercice 1 sont lus en entier: 11 Attention: déclaration implicite de la fonction 'prompt' (-Wimplicit-function-declaration) 20 Attention: types conflictuels pour 'prompt' (activé par défaut) >