Code Blocks error before int
Résolu/Fermé
calvinblue
Messages postés
45
Date d'inscription
samedi 23 mai 2009
Statut
Membre
Dernière intervention
4 mars 2012
-
23 nov. 2009 à 00:56
calvinblue Messages postés 45 Date d'inscription samedi 23 mai 2009 Statut Membre Dernière intervention 4 mars 2012 - 23 nov. 2009 à 18:43
calvinblue Messages postés 45 Date d'inscription samedi 23 mai 2009 Statut Membre Dernière intervention 4 mars 2012 - 23 nov. 2009 à 18:43
A voir également:
- Code Blocks error before int
- Code blocks free - Télécharger - Langages
- Code asci - Guide
- Code puk bloqué - Guide
- Code telephone oublié - Guide
- Code activation windows 10 - Guide
3 réponses
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
663
23 nov. 2009 à 01:11
23 nov. 2009 à 01:11
hum... je ne comprends pas trop ce que tu veux faire avec ton switch.
Tu mets dedans des définitions de fonctions, mais des fonctions ne peuvent pas être définies dans main(). On ne peut pas définir une fonction dans une autre fonction (et main n'est qu'une fonction spéciale).
Les définitions doivent se faire après ou avant le bloc main().
Si tu les mets après (ce qui est conseillé pour la clarté de ton fichier), il faut tout de même mettre des prototypes avant main() car sinon le compilo ne sait pas ce qu'il se passe.
En fait l'erreur que te donne le compilo est que avant le "int " qui comment la déclaration de fonction, tu te trouves dans un bloc {, ce qui est impossible.
ce que tu peux mettre dans ton bloc switch ce sont des appels à la fonction.
Tu mets dedans des définitions de fonctions, mais des fonctions ne peuvent pas être définies dans main(). On ne peut pas définir une fonction dans une autre fonction (et main n'est qu'une fonction spéciale).
Les définitions doivent se faire après ou avant le bloc main().
Si tu les mets après (ce qui est conseillé pour la clarté de ton fichier), il faut tout de même mettre des prototypes avant main() car sinon le compilo ne sait pas ce qu'il se passe.
En fait l'erreur que te donne le compilo est que avant le "int " qui comment la déclaration de fonction, tu te trouves dans un bloc {, ce qui est impossible.
ce que tu peux mettre dans ton bloc switch ce sont des appels à la fonction.
calvinblue
Messages postés
45
Date d'inscription
samedi 23 mai 2009
Statut
Membre
Dernière intervention
4 mars 2012
4
23 nov. 2009 à 07:12
23 nov. 2009 à 07:12
Waw merci pour cette réponse détaillée et rapide!
D'apres ce que jeai compris, on donne juste apres les directives de préprocesseur, les prototypes
et apres on fait appel à la fonction n'importe ou dans le main . et si on inclu le .h dans lequel est situé cette fonction , ça marchera tout seul? (je veu dire il la trouvera?).
En suirte j'aimeai que tu me fasse un exemple d'un prototype et de lappel de fonction qui lui correspond stp
Merci Beaucoup!
D'apres ce que jeai compris, on donne juste apres les directives de préprocesseur, les prototypes
et apres on fait appel à la fonction n'importe ou dans le main . et si on inclu le .h dans lequel est situé cette fonction , ça marchera tout seul? (je veu dire il la trouvera?).
En suirte j'aimeai que tu me fasse un exemple d'un prototype et de lappel de fonction qui lui correspond stp
Merci Beaucoup!
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
663
23 nov. 2009 à 13:48
23 nov. 2009 à 13:48
oui. l'important est qu'avant main() le compilateur connaisse la syntaxe d'appel des fonctions que tu utilises dedans. Tu as donc plusieurs possibilités :
/////////////
// *définitions des fonctions "accessoires"
// *définition de la fonction main()
//////////
ou
/////////////
// *prototypes des fonctions "accessoires"
// *définition de la fonction main()
// *définitions des fonctions accessoires
//////////
ou
/////////////
// * inclusion d'un fichier externe qui fait ce que j'ai dit plus haut
// habituellement c'est un fichier de prototypes uniquement qu'on
// appelle un .h (h comme header : en-tête)
// il faut bien sûr que dans ce fichier .h tu fasses un include du .C ou .CPP
// afin de définir les fonctions correspondantes
// * définition de la fonction main()
//////////
Les exemples concret je suis sûr que tu arriveras à les faire toi ;).
Pour les projets à partir d'une certaine taille, on sépare donc le programme en plusieurs fichiers et aussi on sépare les fichiers de prototypes .h des fichiers d'implémentation des fonctions .cpp .
Il y a plusieurs raisons à cela.
1) deux fonctions peuvent s'appeler l'un l'autre. Il est donc obligatoire dans certains cas d'avoir des prototypes avant, sinon le compilateur ne comprend rien.
2) Je trouve que la raison majeure est pour la clarté du programme.
Ex : tu as programme tes fonctions additionner, soustraire, etc... correctement. Maintenant tu codes ton main(). Et là tu te dis "zut, dans quel ordre j'ai mis les argument ? Quel type me renvoie la fonction exactement ? Alors tu n'as qu'à aller voir le fichier .h, tu trouves rapidement le prototype ta fonction, et hop là c'est bon. Sinon tu dois rechercher dans le cpp qui est bien sûr beaucoup plus gros habituellement.
Tu n'as pas besoin de savoir exactement comment est écrite ta fonction pour l'appeler, tu veux juste savoir quels sont les arguments à mettre.
D'ailleurs une bonne pratique est de bien commenter ton fichier .h afin de décrire l'effet des différents arguments.
/////////////
// *définitions des fonctions "accessoires"
// *définition de la fonction main()
//////////
ou
/////////////
// *prototypes des fonctions "accessoires"
// *définition de la fonction main()
// *définitions des fonctions accessoires
//////////
ou
/////////////
// * inclusion d'un fichier externe qui fait ce que j'ai dit plus haut
// habituellement c'est un fichier de prototypes uniquement qu'on
// appelle un .h (h comme header : en-tête)
// il faut bien sûr que dans ce fichier .h tu fasses un include du .C ou .CPP
// afin de définir les fonctions correspondantes
// * définition de la fonction main()
//////////
Les exemples concret je suis sûr que tu arriveras à les faire toi ;).
Pour les projets à partir d'une certaine taille, on sépare donc le programme en plusieurs fichiers et aussi on sépare les fichiers de prototypes .h des fichiers d'implémentation des fonctions .cpp .
Il y a plusieurs raisons à cela.
1) deux fonctions peuvent s'appeler l'un l'autre. Il est donc obligatoire dans certains cas d'avoir des prototypes avant, sinon le compilateur ne comprend rien.
2) Je trouve que la raison majeure est pour la clarté du programme.
Ex : tu as programme tes fonctions additionner, soustraire, etc... correctement. Maintenant tu codes ton main(). Et là tu te dis "zut, dans quel ordre j'ai mis les argument ? Quel type me renvoie la fonction exactement ? Alors tu n'as qu'à aller voir le fichier .h, tu trouves rapidement le prototype ta fonction, et hop là c'est bon. Sinon tu dois rechercher dans le cpp qui est bien sûr beaucoup plus gros habituellement.
Tu n'as pas besoin de savoir exactement comment est écrite ta fonction pour l'appeler, tu veux juste savoir quels sont les arguments à mettre.
D'ailleurs une bonne pratique est de bien commenter ton fichier .h afin de décrire l'effet des différents arguments.
calvinblue
Messages postés
45
Date d'inscription
samedi 23 mai 2009
Statut
Membre
Dernière intervention
4 mars 2012
4
23 nov. 2009 à 18:43
23 nov. 2009 à 18:43
Re Merci pour tt ces réponses claires!!!!
Ca fait plaisir!
Ca fait plaisir!
23 nov. 2009 à 01:15
23 nov. 2009 à 01:18
Remarque aussi que dans un prototype ou une définition de fonction il faut mettre le type pour tous les arguments, pas seulement le premier comme quand tu définis des variables.
Et en plus dans les prototypes tu peux te passer du nom des variables. (Mais pas du type!)
Ex :
//définition correcte
int mafonction(int a, int b) {
//...
}
//prototypes corrects
int mafonction(int a, int b);
int mafonction(int, int);
//définition incorrecte
int mafonction(int a, b) {
//...
}