Bien programmer en langage C
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
-28%
Le deal à ne pas rater :
Brandt LVE127J – Lave-vaisselle encastrable 12 couverts – L60cm
279.99 € 390.99 €
Voir le deal

Affichage liste chaine C90

2 participants

Aller en bas

Affichage liste chaine C90 Empty Affichage liste chaine C90

Message  Piranha Jeu 19 Nov 2009 - 19:40

Bonjour,

Je cherche a afficher les différents élèments d'une structure, pour cela j'ai une fonction récursive terminal.
Code:
void print(cell *list) {

   if (list == NULL)
      return;

   printf("%s ",cell->name);
   
   return print(cell->next);
}

A ma grande surprise ce code n'est pas valide avec la norme C90, lorsque je le compile de la maniere suivante :
gcc -Wall -g -ansi -pedantic file.c

J'ai le warning suivant :
"warning: ISO C forbids ‘return’ with expression, in function returning void"

Il n'est pas possible de faire de la récursivité terminal avec une fonction void si l'on respecte la norme C90 ?

Merci

Piranha

Messages : 1
Date d'inscription : 19/11/2009

Revenir en haut Aller en bas

Affichage liste chaine C90 Empty Re: Affichage liste chaine C90

Message  -ed- Sam 21 Nov 2009 - 20:43

Piranha a écrit:je cherche a afficher les différents élèments d'une structure, pour cela j'ai une fonction récursive terminal.
Code:
void print(cell *list) {

   if (list == NULL)
      return;

   printf("%s ",cell->name);
   
   return print(cell->next);
}

A ma grande surprise ce code n'est pas valide avec la norme C90, lorsque je le compile de la maniere suivante :
gcc -Wall -g -ansi -pedantic file.c

J'ai le warning suivant :
"warning: ISO C forbids ‘return’ with expression, in function returning void"
Normal. La fonction est définie comme ne retournant rien, or elle retourne la valeur retournée par printf().
Il suffit de définir la fonction comme retournant la même chose qu'un printf(), c'est à dire un int...

Code:
int print(cell *list) {

   if (list == NULL)
      return 0;

   printf("%s ",cell->name);
   
   return print(cell->next);
}
ou alors, on sépare le print() du retour :
Code:
void print(cell *list) {

   if (list == NULL)
      return;

   printf("%s ",cell->name);
   print(cell->next);
   return ;
}
L'idée, c'est d'être cohérent ...
-ed-
-ed-
Admin
Admin

Messages : 290
Date d'inscription : 26/05/2008
Age : 67
Localisation : Paris 14eme arrondissement (75, France)

http://bien-programmer.fr

Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser