Menu

Comment organiser des procedures avant main [Résolu/Fermé]

Messages postés
19
Date d'inscription
mardi 4 décembre 2007
Statut
Membre
Dernière intervention
15 août 2008
- - Dernière réponse : zaratta
Messages postés
19
Date d'inscription
mardi 4 décembre 2007
Statut
Membre
Dernière intervention
15 août 2008
- 28 avril 2008 à 23:32
Bonjour,
#include<stdio.h>
#include<conio.h>
#include<string.h>

// * la procedure de confirmation *

void conf(char sc[120][17],int *f,char *o,char t)
{
if (sc[*f][15]==t){
(*f)++;
}
else{
printf(" ON S'ATTEND A : %s \n",o);
}

}

// * la procedure DECLARATION *

void dec(char sc[120][17],int i)
{ char *o="UNE VARIABLE";
char *p="UN BEGIN";
switch (sc[i][15]){
case 'c': { var(sc,i);
pp(sc,i);

break; }

case 'b': { pp(sc,i);

break; }

default : printf(" ON S'ATTEND A : %s OU A : %s \n",o,p);;

}
}

// * la procedure principale PASCAL *

void pas(char sc[120][17],int i)
{ char *o="UN PROGRAM";
char *p="UN IDENTIFICATEUR";
char *q="UN POINT VIRGULE";
switch (sc[i][15]){
case 'a': { conf(sc,&i,o,'a');
conf(sc,&i,p,'x');
conf(sc,&i,q,'o');
dec(sc,i);

break; }

default:printf(" ON S'ATTEND A : %s \n",o);;

}
}

// * la procedure VARIABLES *

void var(char sc[120][17],int i)
{ char *o="UNE VARIABLE";
switch (sc[i][15]){
case 'c': { conf(sc,&i,o,'c');
l_v(sc,i);

break; }

default : printf(" ON S'ATTEND A : %s \n",o);;

}
}

// * la procedure L_V *

void l_v(char sc[120][17],int i)
{ char *o="UN IDENTIFICATEUR";
char *p="DEUX POINTS ";
char *q="TYPE DE VARIABLE";
char *r="UN POINT VIRGULE";
switch (sc[i][15]){
case 'x': { l_ident(sc,i);
conf(sc,&i,p,'p');
conf(sc,&i,q,'d');
conf(sc,&i,r,'o');
l_v1(sc,i);

break; }

default : printf(" ON S'ATTEND A : %s \n",o);;

}
}

// * la procedure L_V1 *

void l_v1(char sc[120][17],int i)
{
switch (sc[i][15]){
case 'x': { l_v(sc,i);

break; }

default : ;

}
}

// * la procedure L_IDENT *

void l_ident(char sc[120][17],int i)
{ char *o="UN IDENTIFICATEUR";
char *p="UNE VIRGULE";
switch (sc[i][15]){
case 'x': { conf(sc,&i,o,'x');
conf(sc,&i,p,'q');
l_ident1(sc,i);

break; }

default : printf(" ON S'ATTEND A : %s \n",o);;

}
}

// * la procedure L_IDENT1 *

void l_ident1(char sc[120][17],int i)
{ switch (sc[i][15]){
case 'x': {
l_ident(sc,i);

break; }

default : ;

}
}
main(){............
............ }

bon voici mon probleme:
j'ai déclaré des fonctions avant le main, mais quand j'ai compileron m'affiche ce message
"function sould have a protype" pour certaines de ces fonctions
c à d :il y a des fonctions appelées par des fonctions qui sont déclarées avant

ma question comment dois-je procéder pour les organiser?

et surtout ne me proposez pas de les placer avant ( car g besoin qu'ils soient dans cet ordre )

merci d'avance
Afficher la suite 

3 réponses

Messages postés
21510
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
8 octobre 2012
3345
0
Merci
Salut,


Pour pouvoir utiliser une fonction il n'y a pas mille règles.
Soit tu la définie avant l'utilisation, soit tu écrit un prototype et la définition tu le mettra après l'emplacement où tu l'utlises.

Tu peux écrire les prototypes dans un fichier programme.h et les fonctions dans un fichier programme_fonctions.c

Lit bien les messages d'erreurs pour voir les nom des fonctions qui pose des problèmes.

Par exemple si je fait comme ça

#include<stdio.h>

int main()
{
   fonction1();
   return 0;
}

void fonction1(){
...........
}

je vais avoir un message d'erreur puisque j'essaie d'utilsier fonction1() dans main sans l'avoir préalablement déclarée.

Donc soit j'écrit comme ça
#include<stdio.h>
void fonction1();

int main()
{
   fonction1();
   return 0;
}

void fonction1(){
...........
}

soit comme ça
#include<stdio.h>

void fonction1(){
...........
}

int main()
{
   fonction1();
   return 0;
}

Messages postés
19
Date d'inscription
mardi 4 décembre 2007
Statut
Membre
Dernière intervention
15 août 2008
0
Merci
merci infiniment pour ta réponse....

j"ai essayé avec cette méthode ...

#include<stdio.h>
void fonction1();

int main()
{
fonction1();
return 0;
}

void fonction1(){
...........
}

et apres complilation on m'affiche:
" Extra parameter in call to fonction1() "

par exemple la procédure VAR(); qui appelle la procédure l_v(); qui vient juste aprés
par conséquence "function 'l_v' should have a protype"
sachant aussi qu'on est pas encore rentré dans main()

bonne soirée à tous et surtout merci d'avance
Newtron
Messages postés
2
Date d'inscription
samedi 19 avril 2008
Statut
Membre
Dernière intervention
28 avril 2008
9 -
la fonction doit etre declarée soit:
- par simple prototype avant main() puis definition complète apres main()
- par definition complete avant main()

N.B : 1- l'entete de la fonction (= la ligne contenant le nom de la fonction et ses parametres) doit preceder l'appel de cette fonction, donc l'ordre de la declaration des fonction doit etre le meme ordre de l'appel des fonction si on est hors main car les fonctions qu(on declare ne sont pas toutes appelées dans main() mais peuvent etre appelées par des autres fonctions. Donc, la declaration d'une fonction non-utilisée dans main() mais dans une autre fonction doit etre avant la declaration de cette derniere (la fonction appelante)

2-les arguments dans l'entete d'une fonction doivent etre les memes qu'on appelle la fonction, dans le sens qu'on doit respecter les types et l'ordre (les noms des variables n'est pas important).

3-le msg d'erreur: - "...should have a prototype...." signifie oubien la fonction n'est pas declarée, oubien declarée aprés son appel, oubien le nom utilisé lors de l'appel ne coincide pas avec le nom de la fonction declarée, N.B: la casse est sensible.
- "..........extra parametre....." signifie que le nombre d'arguments n'est pas respecté.
Messages postés
19
Date d'inscription
mardi 4 décembre 2007
Statut
Membre
Dernière intervention
15 août 2008
0
Merci
bon salut à tout lemonde...
je vous remercie tous pour vos précieuses réponses
ma solution était de declaré un prototype void fonction();
avant la fonction qui l'appelle c à d:

#les includes<.............h>
void fonction();
void fonction_appelante()
{ ...........................
fonction();
...........................
}
void fonction(char o,int p)
{ ...........................

...........................
}
main(){................................
.............................

}

et aussi ( et surtout ), les parametres du prototype..comme suit:

#les includes<.............h>
void fonction(char s(ou o,ou n'importe),int k);
void fonction_appelante()
{ ...........................
fonction();
...........................
}
void fonction(char o,int p)
{ ...........................

...........................
}
main(){................................
.............................

}