- 06/10/2020
- 4 minutter at læse
-
- c
- n
- m
- g
- s
a return
sætning afslutter udførelsen af en funktion og returnerer kontrolelementet til opkaldsfunktionen. Udførelsen genoptages i opkaldsfunktionen på det punkt umiddelbart efter opkaldet. Enreturn
erklæring kan returnere en værdi til opkaldsfunktionen. For mere information, se returtype.
syntaks
jump-statement:
return
udtrykopt;
værdien af udtryk, hvis det er til stede, returneres til opkaldsfunktionen. Hvis udtryk udelades, er funktionens returværdi udefineret. Udtrykket, hvis det er til stede, evalueres og konverteres derefter til den type, der returneres af funktionen. Når enreturn
sætning indeholder et udtryk i funktioner, der har envoid
returtype, genererer kompilatoren en advarsel, og udtrykket evalueres ikke.
Hvis ingenreturn
erklæring vises i en funktionsdefinition, vender kontrol automatisk tilbage til opkaldsfunktionen, efter at den sidste sætning af den kaldte funktion er udført. I dette tilfælde er returværdien af den kaldte funktion udefineret. Hvis funktionen har en anden returtype end void
, er det en alvorlig fejl, og kompilatoren udskriver en advarselsdiagnostisk besked. Hvis funktionen har en void
returtype, er denne opførsel okay, men kan betragtes som dårlig stil. Brug en almindeligreturn
erklæring for at gøre din hensigt klar.
som en god ingeniørpraksis skal du altid angive en returtype for dine funktioner. Hvis en returværdi ikke er påkrævet, skal du erklære funktionen for at have void
returtype. Hvis en returtype ikke er angivet, antager C-kompilatoren en standard returtype int
.
mange programmører bruger parenteser til at vedlægge ekspressionsargumentet for return
erklæring. C kræver dog ikke parenteserne.
kompilatoren kan udstede en advarselsdiagnostisk meddelelse om utilgængelig kode, hvis den finder nogen udsagn placeret efterreturn
erklæring.
i en main
funktion er return
sætning og udtryk valgfri. Hvad der sker med den returnerede værdi, hvis en er angivet, afhænger af implementeringen. Microsoft-specifik: Microsoft C-implementeringen returnerer ekspressionsværdien til den proces, der påberåbte programmet, såsom cmd.exe
. Hvis der ikke leveres nogen return
udtryk, returnerer Microsoft C runtime en værdi, der angiver succes (0) eller fiasko (en værdi, der ikke er nul).
eksempel
dette eksempel er et program i flere dele. Det demonstrerer return
– sætningen, og hvordan den bruges både til at afslutte funktionsudførelse og eventuelt til at returnere en værdi.
// 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
returnerer kvadratet af dets argument i en bredere type for at forhindre en aritmetisk fejl. Microsoft-specifik: i Microsoft C-implementeringen er long long
typen stor nok til at holde produktet af to int
værdier uden overløb.
parenteserne omkringreturn
udtryk isquare
evalueres som en del af udtrykket og kræves ikke afreturn
erklæring.
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
returnerer forholdet mellem dets toint
argumenter som et flydende punktdouble
værdi. Udtrykketreturn
er tvunget til at bruge en flydende punktoperation ved at kaste en af operandene tildouble
. Ellers ville heltalsdelingsoperatøren blive brugt, og den delvise del ville gå tabt.
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
funktion opkald square
med en parameterværdi på INT_MAX
, den største signerede heltalværdi, der passer ind i en int
long long
resultatet gemmes isquared
, derefter udskrevet. Funktionenreport_square
har envoid
returtype, så den har ikke et udtryk i sinreturn
erklæring.
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
funktion opkald ratio
med parameterværdier af 1
og INT_MAX
double
resultatet gemmes ifraction
, derefter udskrevet. Funktionenreport_ratio
har envoid
returtype, så det behøver ikke eksplicit at returnere en værdi. Udførelse af report_ratio
“falder fra bunden” og returnerer ingen værdi til den, der ringer op.
int main(){ int n = 1; int x = INT_MAX; report_square(); report_ratio( n, x ); return 0;}
main
funktionen kalder to funktioner:report_square
ogreport_ratio
. Som report_square
tager ingen parametre og returnerervoid
, tildeler vi ikke resultatet til en variabel. Ligeledesreport_ratio
returnerervoid
, så vi gemmer heller ikke dens returværdi. Efter hvert af disse funktionsopkald fortsætter udførelsen ved den næste erklæring. Såmain
returnerer en værdi af0
(typisk bruges til at rapportere succes) for at afslutte programmet.
for at kompilere eksemplet skal du oprette en kildekodefil med navnetC_return_statement.c
. Kopier derefter al eksempelkoden i den viste rækkefølge. Gem filen, og kompilere det i en udvikler kommandoprompt vindue ved hjælp af kommandoen:
cl /W4 C_return_statement.c
indtast derefter C_return_statement.exe
ved kommandoprompten for at køre eksempelkoden. Udgangen af eksemplet ser sådan ud: