Menu

A quoi sert le return ?

- - Dernière réponse : [Dal]
Messages postés
4810
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
14 décembre 2018
- 10 oct. 2018 à 13:21
Bonsoir, j'ai une question : à quoi sert le return dans une fonction en C ?

Si je l’enlève etc... ça change rien au comportement du programme. J'ai regardé sur Google on me dit que ça veut dire "renvoyer" mais je sait même pas ce que 'renvoyer' veut dire. Quelqu'un pour m'expliquer ?

PS : Désolé si c'est une question complètement débile.
Afficher la suite 

Votre réponse

2 réponses

Messages postés
15866
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
14 décembre 2018
0
Merci
Bonjour,

Une fonction renvoie un résultat, le return indique la valeur de ce résultat.

Exemple :
int somme(a, b) {
    return a+b;
}

int c = somme(2, 3);
Ok mais est-on obligé de mettre un return ?
KX
Messages postés
15866
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
14 décembre 2018
> Maxence -
Si ta fonction ne renvoie pas de résultat (type void) ça ne sert à rien. Dans tous les autres cas il faut en mettre un (ou plusieurs) pour indiquer le résultat de la fonction.
Commenter la réponse de KX
Messages postés
4810
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
14 décembre 2018
0
Merci
Salut Maxence,

Le cas mentionné par KX est celui d'une fonction autre que la fonction principale
main
, c'est à dire une fonction appelée par
main
directement ou indirectement, où le programmeur qui conçoit une telle fonction décide de son prototype et si elle renvoie ou non quelque chose en fonction de l'usage qu'il veut en faire.

Si la fonction ne renvoie rien, elle est de type
void
comme le dit KX, et le
return
pour terminer la fonction avant l'accolade fermante est facultatif. Il peut être utilisé par contre pour terminer la fonction prématurément avant la fin et revenir à la fonction appelante. S'il est utilisé dans une fonction void, bien sûr on l'utilisera sous la forme simple
return;
. Dans ce cas
return;
ne retourne rien et signifiera seulement : retourner (revenir) à la fonction appelante.

Le cas de la fonction
main
est particulier et la norme définissant le langage C impose d'utiliser l'un des prototypes suivants :

int main(void);

ou

int main(int argc, char **argv);

Si tu veux faire un programme portable, ton programme devrait comporter pour la fonction
main
une ou plusieurs instructions
return
avec un entier.

Dans ce cas, l'instruction
return
signifie terminer le programme en rendant le contrôle à l'environnement hôte d'exécution du programme et l'entier sert à lui communiquer le statut de l'exécution du programme qu'il a lancé.

- s'il est suivi de zéro ou de
EXIT_SUCCESS
, le programme se termine en indiquant à l'environnement hôte d'exécution qu'il a "réussi",
- et si la valeur retournée est
EXIT_FAILURE
, le programme se termine en indiquant à l'environnement hôte d'exécution qu'il n'a "pas réussi".

Ainsi, un programme C minimal portable conforme à la norme du C89 qui ne fait rien d'autre que s'exécuter et se terminer serait :

int main(void) {
    return 0;
}

Ce que l'environnement hôte d'exécution fait du code de statut dépend de son implémentation et n'est pas défini par le langage C.

Un programmeur peut décider d'utiliser les codes de statut pour renseigner les programmes qui l'appellent sur le résultat de son exécution, éventuellement avec des codes additionnels. Il documente alors en général son programme, et indiquer dans la documentation de celui-ci la signification des différents codes de statut qu'il a décidé d'utiliser en plus de
EXIT_SUCCESS
ou
EXIT_FAILURE
.

Par exemple, sous GNU Linux, la commande
grep
, qui sert à rechercher la présence d'une chaîne de caractères dans une ligne d'un ou plusieurs fichiers, retourne 0 si les lignes recherchées ont été trouvées, 1 si aucune ligne n'a été trouvée, et 2 si une erreur s'est produite à l'exécution.

https://linux.die.net/man/1/grep

Note que dans la révision C99 de la norme, tu peux te contenter de

int main(void) {
}

car cette révision de la norme prévoit, dans le cas de
main
, un retour implicite avec une valeur de 0 lorsque l'exécution atteint l'accolade fermante du
main
.

Dal
Commenter la réponse de [Dal]