Warning> procédures externes..

xkindool Messages postés 13 Date d'inscription dimanche 18 janvier 2004 Statut Membre Dernière intervention 18 juillet 2009 - 12 mars 2004 à 17:32
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 - 13 mars 2004 à 00:48
Bonjour, mon programme fonctionne mais lors de la compilation j'ai des warnings que j'aimerais débugger..
Voici le message d'erreur à la compilation :
[kindool@kindool tpc4]$ gcc tpc4.c
tpc4.c:126: warning: type mismatch with previous implicit declaration
tpc4.c:47: warning: previous implicit declaration of `proc1'
tpc4.c:126: warning: `proc1' was previously implicitly declared to return `int'
tpc4.c:137: warning: type mismatch with previous implicit declaration
tpc4.c:50: warning: previous implicit declaration of `proc2'
tpc4.c:137: warning: `proc2' was previously implicitly declared to return `int'
tpc4.c:149: warning: type mismatch with previous implicit declaration
tpc4.c:53: warning: previous implicit declaration of `proc3'
tpc4.c:149: warning: `proc3' was previously implicitly declared to return `int'

et maintenant voici le code :

#include <stdio.h>

main(){ 
int sommepp=0;
char chx;
int n=0;
int result;
/*------appel des fonctions ou procédures------*/
 void fct()	{
int choix;
int res;
printf("[1] : Utiliser While\n[2] : Utiliser Do-While\n[3] : Utiliser For\nVotre choix: ");
scanf("%d",&choix);
while(n==0)	{
printf("Veuillez entrer n (on effectura le calcul !n, avec n>0): \n");
scanf("%d",&n);
}
  	printf("Voici la somme des %d premiers entiers: ",n);//beuhhhhhh
 	switch (choix)	{
  		case 1:
res=fct1(n);
printf("%d\n",res);
break;
  		case 2:
res=fct2(n);
printf("%d\n",res);
break;
  		case 3:
res=fct3(n);
printf("%d\n",res);
break;
}
}

 void proc()	{
int choix;
int res=0;
printf("[1] : Utiliser While\n[2] : Utiliser Do-While\n[3] : Utiliser For\nVotre choix: ");
scanf("%d",&choix);
while(n==0)	{
 printf("Veuillez entrer n (on effectura le calcul !n, avec n>0): \n");
 scanf("%d",&n);
 		}
//	printf("Voici la somme des %d premiers entiers: ");//disponible dans chaque procédure
switch (choix)  {
case 1:
proc1(n,res);
break;
case 2:
proc2(n,res);
break;
case 3:
proc3(n,res);
break;
 			}
}
/*---------------------------------------------*/

//Début des instructions de main
printf("[f] ou [F] : Utiliser une fonction\n[p] ou [P] : Utiliser une procédure\nVotre choix: ");
scanf("%c",&chx);

switch (chx)
  {
  case 'f':
    fct();
    break;
  case 'F':
    fct();
    break;
  case 'p':
    proc();
    break;
  case 'P':
    proc();
    break;
  default: ("goodbye..\n");
  }
}
//Fin de main

// Définition des fonctions
/*----------------------------------*/
int fct1(int a)	{
int i=0;
int somme=0;

 	while (i<a+1)	{
somme=somme+i;
i++;
 	    		}
return somme;
}
/*----------------------------------*/
int fct2(int a)	{

int i=0;
int somme=0;

 	do	{
somme=somme+i;
i++;
 		}
 	while (i<a+1); 
return somme;
}
/*----------------------------------*/
int fct3(int a)	{

int i;
int somme=0;

 	for(i=0;i<a+1;i++){
   		somme=somme+i;
 			}
return somme;
}
/*----------------------------------*/

//Défintition des procédures
/*----------------------------------*/
void proc1(int a,int b)	{

int i=0;

while (i<a+1)	{
b=b+i;
i++;
 			}
printf("Voici la somme des %d premiers entiers: %d\n",a,b);
}
/*------------------------------------*/
void proc2(int a, int b){

int i=0;

 	do 	{
b=b+i;
i++;
 		}
 	while (i<a+1); 
printf("Voici la somme des %d premiers entiers: %d\n",a,b);
}
/*-------------------------------------*/
void proc3(int a, int b){

int i;

 	for(i=0;i<a+1;i++){
   		b=b+i;;
 			}
printf("Voici la somme des %d premiers entiers: %d\n",a,b);
}
/*-------------------------------------*/


Merci à vous si vous pouvez m'aider.

1 réponse

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
13 mars 2004 à 00:48
tu utilise les fonctions proc1, proc2 et proc3 avant de les définir => le compilo suppose donc qu'elle vont retourner un int (c'est par défaut).

puis plus-tard, tu dis qu'elle retourne void => il émet un warning.

pour les virer, déclare tes fonctions au début :
void proc1(int a, int b);
void proc2(int a, int b);
void proc3(int a, int b);

puis définit les où tu veux (là où elle sont, c'est très bien):
void proc3(int a, int b)
{
...
}
0
Rejoignez-nous