Bonjour,
y a t-il une différence entre un programme dont les fonctions sont avant "main" et le même avec les fonctions après "main"?
Merci
Bonjour,
y a t-il une différence entre un programme dont les fonctions sont avant "main" et le même avec les fonctions après "main"?
Merci
Comme toutes autres fonctions, main() doit connaitre la signature (prototype) des fonctions qu'elle utilise, mais elle se moque du code interne. Donc si le prototype est declare avant main(), soit dans le meme fichier ou dans un fichier entete inclus, on peut mettre le code des autres fonctions ailleurs (apres main() ou dans une autre unite de compilation). Si la fonction n'est utilisee que dans l'unite de compilation en cours, on la qualifie avec static et il est d'usage de mettre son code avant la fonction principale de cette unite.
Etant donné qu'une définition de fonction intègre son prototype, il est simple et logique de définir les fonctions avant de les utiliser (donc de les placer avant le main() dans le bon ordre). Ca permet de bien voir les liens qu'il y a entre elles (qui appelle qui...)
Mais il est techniquement possible de placer les fonctions après. Il faut cependant fournir un prototype séparé avant.
La logique et le bon sens commandent alors de séparer les fonctions et les prototypes dans 2 fichiers séparés à inclure comme il faut : c'est la programmation modulaire (ou séparée) :
http://emmanuel-delahaye.developpez....ganiser_source
http://emmanuel-delahaye.developpez.....htm#organiser
Merci
Quand je fais le prototype de la fonction avant le main puis le code juste après j'ai une erreur disant "previous declaration of fonction was here" en m'indiquant la ligne du prototype.
je vais réorganiser mon programme selon vos conseils, et j'aimerai tout de même savoir s'il est possible de résoudre l'erreur que j'ai eu.
Généralement, ce genre d'erreur indique que la fonction est différente du prototype.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
ça pour la fonction:
et ça c'est sont prototype
Code : Sélectionner tout - Visualiser dans une fenêtre à part void affichage(struct list_event *tete)
c'est pas comme ça qu'on fait?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 void affichage(struct list_event);
liste != list_event
Ton prototype doit donc être le suivant :
@+
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 void affichage(struct list_event*);
C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère
Installation de Code::Blocks sous Debian à partir de Nightly Builds
Il manque une étoile...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 void affichage(struct list_event *);
Partager