- 06/10/2020
- 4 minutes à lire
-
- c
- n
- c
- n
- iv je n’ai pas de problème avec le fait que je n’ai pas de problème avec le fait que je n’ai pas de problème avec le fait que je n’ai pas de problème avec le fait que je n’ai pas de problème avec le fait que je n’ai pas de problème avec le fait que je n’ai pas de problème avec le fait que je n’ai pas de problème avec le fait que je n’ai pas de problème avec le fait que je n’ai pas de problème avec le fait que je n’ai pas de problème avec le fait que je n’ai pas de problème avec le fait que je n’ai pas de problème avec le fait que je n’ai pas de problème avec le fait que je n’ai pas de problème avec le fait que je n’ai pas de problème avec le fait que je n’ai pas de problème avec le fait que je n’ai pas de problème avec le fait que je n’ai pas de problème avec le fait que je n’ai pas de problème avec le fait que je n’ai pas de problème avec le fait que je n’ai pas de problème avec le fait que je n’ai pas de problème avec le fait que je n’ai pas de problème avec le fait que je ne suis pas en mesure de le faire. met fin à l’exécution d’une fonction et renvoie le contrôle à la fonction appelante. L’exécution reprend dans la fonction appelante au point immédiatement après l’appel. Une instruction
return
peut renvoyer une valeur à la fonction appelante. Pour plus d’informations, consultez Type de retour.
Syntaxe
jump-statement:
return
expressionopt;
La valeur de l’expression, si elle est présente, est renvoyée à la fonction appelante. Si expression est omise, la valeur de retour de la fonction n’est pas définie. L’expression, si elle est présente, est évaluée puis convertie en type renvoyé par la fonction. Lorsqu’une instruction
return
contient une expression dans des fonctions qui ont un type de retourvoid
, le compilateur génère un avertissement et l’expression n’est pas évaluée.Si aucune instruction
return
n’apparaît dans une définition de fonction, le contrôle revient automatiquement à la fonction appelante après l’exécution de la dernière instruction de la fonction appelée. Dans ce cas, la valeur de retour de la fonction appelée n’est pas définie. Si la fonction a un type de retour autre quevoid
, c’est un bogue grave et le compilateur imprime un message de diagnostic d’avertissement. Si la fonction a un type de retourvoid
, ce comportement est correct, mais peut être considéré comme un style médiocre. Utilisez une instructionreturn
simple pour clarifier votre intention.En tant que bonne pratique d’ingénierie, spécifiez toujours un type de retour pour vos fonctions. Si une valeur de retour n’est pas requise, déclarez que la fonction a le type de retour
void
. Si aucun type de retour n’est spécifié, le compilateur C suppose un type de retour par défaut deint
.De nombreux programmeurs utilisent des parenthèses pour enfermer l’argument d’expression de l’instruction
return
. Cependant, C ne nécessite pas les parenthèses.Le compilateur peut émettre un message de diagnostic d’avertissement concernant le code inaccessible s’il trouve des instructions placées après l’instruction
return
.Dans une fonction
main
, l’instruction et l’expressionreturn
sont facultatives. Ce qui arrive à la valeur renvoyée, si une valeur est spécifiée, dépend de l’implémentation. Spécifique à Microsoft : L’implémentation Microsoft C renvoie la valeur d’expression au processus qui a appelé le programme, tel quecmd.exe
. Si aucune expressionreturn
n’est fournie, le runtime Microsoft C renvoie une valeur indiquant le succès (0) ou l’échec (une valeur non nulle).Exemple
Cet exemple est un programme en plusieurs parties. Il montre l’instruction
return
, et comment elle est utilisée à la fois pour terminer l’exécution de la fonction et, éventuellement, pour renvoyer une valeur.// C_return_statement.c// Compile using: cl /W4 C_return_statement.c#include <limits.h> // for INT_MAX#include <stdio.h> // for printflong long square( int value ){ // Cast one operand to long long to force the // expression to be evaluated as type long long. // Note that parentheses around the return expression // are allowed, but not required here. return ( value * (long long) value );}
La fonction
square
renvoie le carré de son argument, dans un type plus large pour éviter une erreur arithmétique. Spécifique à Microsoft : Dans l’implémentation Microsoft C, le typelong long
est suffisamment grand pour contenir le produit de deux valeursint
sans débordement.Les parenthèses autour de l’expression
return
danssquare
sont évaluées dans le cadre de l’expression et ne sont pas requises par l’instructionreturn
.double ratio( int numerator, int denominator ){ // Cast one operand to double to force floating-point // division. Otherwise, integer division is used, // then the result is converted to the return type. return numerator / (double) denominator;}
La fonction
ratio
renvoie le rapport de ses deux argumentsint
sous forme de valeurdouble
à virgule flottante. L’expressionreturn
est forcée d’utiliser une opération à virgule flottante en convertissant l’un des opérandes endouble
. Sinon, l’opérateur de division entière serait utilisé et la partie fractionnaire serait perdue.void report_square( void ){ int value = INT_MAX; long long squared = 0LL; squared = square( value ); printf( "value = %d, squared = %lld\n", value, squared ); return; // Use an empty expression to return void.}
La fonction
report_square
appellesquare
avec une valeur de paramètre deINT_MAX
, la plus grande valeur entière signée qui tient dans unint
. Le résultatlong long
est stocké danssquared
, puis imprimé. La fonctionreport_square
a un type de retourvoid
, elle n’a donc pas d’expression dans son instructionreturn
.void report_ratio( int top, int bottom ){ double fraction = ratio( top, bottom ); printf( "%d / %d = %.16f\n", top, bottom, fraction ); // It's okay to have no return statement for functions // that have void return types.}
La fonction
report_ratio
appelleratio
avec des valeurs de paramètres de1
etINT_MAX
. Le résultatdouble
est stocké dansfraction
, puis imprimé. La fonctionreport_ratio
a un type de retourvoid
, elle n’a donc pas besoin de renvoyer explicitement une valeur. L’exécution dereport_ratio
« tombe du bas » et ne renvoie aucune valeur à l’appelant.int main(){ int n = 1; int x = INT_MAX; report_square(); report_ratio( n, x ); return 0;}
La fonction
main
appelle deux fonctions :report_square
etreport_ratio
. Commereport_square
ne prend aucun paramètre et renvoievoid
, nous n’affectons pas son résultat à une variable. De même,report_ratio
renvoievoid
, nous n’enregistrons donc pas non plus sa valeur de retour. Après chacun de ces appels de fonction, l’exécution se poursuit à l’instruction suivante. Ensuite,main
renvoie une valeur de0
(généralement utilisée pour signaler le succès) pour terminer le programme.Pour compiler l’exemple, créez un fichier de code source nommé
C_return_statement.c
. Ensuite, copiez tout l’exemple de code, dans l’ordre indiqué. Enregistrez le fichier et compilez-le dans une fenêtre d’invite de commande de développeur en utilisant la commande :cl /W4 C_return_statement.c
Puis, pour exécuter l’exemple de code, entrez
C_return_statement.exe
à l’invite de commande. La sortie de l’exemple ressemble à ceci :