A quoi sert le return ?
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.
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.
2 réponses
-
ContributeurSalut Maxence,
Le cas mentionné par KX est celui d'une fonction autre que la fonction principalemain
, c'est à dire une fonction appelée parmain
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 typevoid
comme le dit KX, et lereturn
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 simplereturn;
. Dans ce casreturn;
ne retourne rien et signifiera seulement : retourner (revenir) à la fonction appelante.
Le cas de la fonctionmain
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 fonctionmain
une ou plusieurs instructionsreturn
avec un entier.
Dans ce cas, l'instructionreturn
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 deEXIT_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 estEXIT_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 deEXIT_SUCCESS
ouEXIT_FAILURE
.
Par exemple, sous GNU Linux, la commandegrep
, 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 demain
, un retour implicite avec une valeur de 0 lorsque l'exécution atteint l'accolade fermante dumain
.
Dal