bonjour tout le monde,
je voudrais savoir comment faire pour qu'une fonction retourner plusieurs résulats de types différents.
en d'autres tere comment peut on impléménter une procédure avec le langage C
merci pour votre aide
bonjour tout le monde,
je voudrais savoir comment faire pour qu'une fonction retourner plusieurs résulats de types différents.
en d'autres tere comment peut on impléménter une procédure avec le langage C
merci pour votre aide
En C, une fonction ne peut renvoyer qu'une variable. Pour lui faire retourner plusieurs choses les possibilites sont :
* si toutes les variables de retour sont du meme type de lui faire retourner un tableau.
* lui faire retourner une strucuture
* ou passer les parametres par adresse et non par valeur et a ce moment la le retour se fait par les parametres.
Ce n'est pas possible par 'return'.Envoyé par sos
Le plus simple et le plus efficace est de créer une structure résultats :
d'ajouter à la fonction un paramètre pointeur de ce type:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 typedef struct { int a; double b; /* etc * / } result_s;
et d'appeler la fonction comme suit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 void myfunc (<autres params>, result_s *const p_res) { ... calculs ... if (p_res != NULL) { p_res->a = ...; p_res->b = ...; } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 { result_s res; myfunc (<autres params>, &res); }Il n'y a pas de 'procedure' en C. Seulement des fonctions.en d'autres termes comment peut on impléménter une procédure avec le langage C
Attention. Je pense que tu sais tout ça, mais ce que tu as écrit pourrait être mal interprété...Envoyé par gl
- On ne sait pas 'retourner un tableau' en C. Seulement l'adresse de celui-ci. De plus, elle doit être valide après l'exécution de la fonction, ce qui n'est pas le cas si le tableau est local à celle-ci.
- Retourner une structure peut être pénalisant (recopie d'un bloc mémoire plus ou moins gros...)
- En C, on ne sait passer que des paramètres par valeur. Ne pas confondre passer l'adresse d'une variable (qui se fait explicitement via un pointeur et l'opérateur '&' dans l'appel) et passer un paramètre par addresse qui n'existe pas en C (mais existe en C++. On dit aussi 'par référence').
Bien entendu, c'est vrai que j'ai fait un raccourci un peu rapide. Tu as bien fait de preciser. Concernant les structures, le probleme de la taille peu etre resolu en retournant un pointeur sur cette strucuture, avec la encore les memes precautions a prendre que pour les tableaux.Envoyé par Emmanuel Delahaye
Sur ce point je ne suis pas tout a fait d'accord. Passer l'adresse d'une variable revient bien, par definition meme, a passer cette variable par adresse (le passage par reference est encore un autre mecanisme). Mais bon ce n'est qu'une question de semantique.Envoyé par Emmanuel Delahaye
Partager