- 06/10/2020
- 4 minuter att läsa
-
- c
- n
- c
- n
- m
- g
- s
areturn
utförande av en funktion och returnerar kontrollen till anropsfunktionen. Utförandet återupptas i samtalsfunktionen vid den punkt som omedelbart följer samtalet. Ettreturn
– uttalande kan returnera ett värde till anropsfunktionen. Mer information finns i returtyp.
Syntax
hoppa-uttalande:
return
expressionopt;
värdet av uttrycket, om det finns, returneras till samtalsfunktionen. Om uttryck utelämnas är funktionens returvärde odefinierat. Uttrycket, om det finns, utvärderas och konverteras sedan till den typ som returneras av funktionen. När ettreturn
– uttalande innehåller ett uttryck i funktioner som har ettvoid
returtyp genererar kompilatorn en varning och uttrycket utvärderas inte.
om ingetreturn
– uttalande visas i en funktionsdefinition återgår kontrollen automatiskt till anropsfunktionen efter att den sista satsen för den uppringda funktionen har utförts. I detta fall är returvärdet för den uppringda funktionen odefinierat. Om funktionen har en annan returtyp än void
är det ett allvarligt fel och kompilatorn skriver ut ett varningsdiagnostiskt meddelande. Om funktionen har en void
returtyp är detta beteende okej, men kan betraktas som dålig stil. Använd ett vanligtreturn
uttalande för att göra din avsikt tydlig.
som en bra teknisk praxis, ange alltid en returtyp för dina funktioner. Om ett returvärde inte krävs anger du att funktionen harvoid
returtyp. Om en returtyp inte anges antar C-kompilatorn en standard returtyp av int
.
många programmerare använder parenteser för att bifoga uttrycket argumentet förreturn
uttalande. Men C kräver inte parenteserna.
kompilatorn kan utfärda ett varningsdiagnostiskt meddelande om oåtkomlig kod om den hittar några uttalanden placerade efterreturn
uttalande.
i enmain
funktion ärreturn
uttalande och uttryck valfria. Vad som händer med det returnerade värdet, om ett anges, beror på implementeringen. Microsoft-specifikt: Microsoft C-implementeringen returnerar uttrycksvärdet till processen som åberopade programmet, till exempel cmd.exe
. Om ingetreturn
uttryck levereras returnerar Microsoft C runtime ett värde som indikerar framgång (0) eller fel (ett icke-nollvärde).
exempel
detta exempel är ett program i flera delar. Det visar return
– uttalandet och hur det används både för att avsluta funktionsexekveringen och eventuellt för att returnera ett värde.
// 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 );}
funktionensquare
Returnerar kvadraten av sitt argument, i en bredare typ för att förhindra ett aritmetiskt fel. Microsoft-specifik: i Microsoft C-implementeringen ärlong long
– typen tillräckligt stor för att hålla produkten av tvåint
värden utan överflöde.
parenteserna kringreturn
uttryck isquare
utvärderas som en del av uttrycket, och krävs inte avreturn
uttalande.
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;}
funktionenratio
returnerar förhållandet mellan dess tvåint
argument som en flytpunktdouble
värde. Uttrycketreturn
tvingas använda en flytpunktsoperation genom att casta en av operanderna tilldouble
. I annat fall skulle heltalsdelningsoperatören användas, och bråkdelen skulle gå förlorad.
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.}
report_square
funktionssamtal square
med ett parametervärde på INT_MAX
, det största signerade heltalsvärdet som passar i ett int
. Resultatetlong long
lagras isquared
och skrivs sedan ut. Funktionenreport_square
har ettvoid
returtyp, så det har inget uttryck i dessreturn
uttalande.
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.}
report_ratio
funktionssamtal ratio
med parametervärden på 1
och INT_MAX
. Resultatetdouble
lagras i fraction
och skrivs sedan ut. Funktionenreport_ratio
har envoid
returtyp, så det behöver inte uttryckligen returnera ett värde. Utförande av report_ratio
”faller av botten” och returnerar inget värde till den som ringer.
int main(){ int n = 1; int x = INT_MAX; report_square(); report_ratio( n, x ); return 0;}
main
funktionen anropar två funktioner:report_square
ochreport_ratio
. Eftersom report_square
tar inga parametrar och returnerarvoid
tilldelar vi inte resultatet till en variabel. På samma sättreport_ratio
returnerarvoid
, så vi sparar inte dess returvärde heller. Efter vart och ett av dessa funktionssamtal fortsätter körningen vid nästa uttalande. Dåmain
returnerar ett värde på0
(vanligtvis används för att rapportera framgång) för att avsluta programmet.
för att kompilera exemplet, skapa en källkodsfil med namnet C_return_statement.c
. Kopiera sedan all exempelkod i den ordning som visas. Spara filen och kompilera den i ett kommandotolkfönster för utvecklare med kommandot:
cl /W4 C_return_statement.c
för att köra exempelkoden anger du C_return_statement.exe
vid kommandotolken. Utmatningen av exemplet ser ut så här: