- 06/10/2020
- 4 minuty ke čtení
-
- c
- n
- M
- g
return
prohlášení ukončí provádění funkce a vrátí řízení do volající funkce. Spuštění se obnoví ve funkci volání v bodě bezprostředně po volání. Příkaz return
může vrátit hodnotu volající funkci. Pro více informací, viz typ návratu.
Syntax
jump-prohlášení:
return
expressionopt;
hodnota výrazu, pokud je přítomen, je vrácena volající funkci. Pokud je výraz vynechán, návratová hodnota funkce není definována. Výraz, pokud je přítomen, je vyhodnocen a poté převeden na typ vrácený funkcí. Když return
prohlášení obsahuje vyjádření funkcí, které mají void
návratový typ, kompilátor generuje varování, a výraz není vyhodnocen.
Pokud ne, return
prohlášení se objeví v definici funkce, ovládání se automaticky vrátí do volající funkce po posledním prohlášení z názvem funkce se provede. V tomto případě není návratová hodnota volané funkce definována. Pokud má funkce jiný typ návratu než void
, je to vážná chyba a kompilátor vytiskne varovnou diagnostickou zprávu. Pokud má funkce void
návratový typ, je toto chování v pořádku, ale může být považováno za špatný styl. Použijte prostý return
prohlášení, aby byl váš záměr jasný.
jako správná technická praxe vždy zadejte typ návratu pro své funkce. Pokud není požadována návratová hodnota, deklarujte, že funkce má void
návratový typ. Pokud není zadán návratový typ, kompilátor C předpokládá výchozí návratový typ int
.
mnoho programátorů používá závorky k uzavření argumentu výrazu příkazu return
. C však nevyžaduje závorky.
kompilátor může vydat varování diagnostickou zprávu o nedosažitelný kód, pokud zjistí jakékoli prohlášení umístěny po return
prohlášení.
ve funkci main
je příkaz a výraz return
volitelný. Co se stane s vrácenou hodnotou, pokud je zadána, závisí na implementaci. Specifické pro Microsoft: implementace Microsoft C vrací hodnotu výrazu procesu, který vyvolal program, například cmd.exe
. Pokud není dodán výrazreturn
, vrátí Microsoft C runtime hodnotu, která označuje úspěch (0) nebo selhání(nenulová hodnota).
příklad
tento příklad je JEDEN program v několika částech. Ukazuje příkaz return
a jak se používá jak k ukončení provádění funkcí, tak k navrácení hodnoty.
// 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 );}
funkce square
vrací čtverec svého argumentu v širším typu, aby se zabránilo aritmetické chybě. Specifické pro Microsoft: v implementaci Microsoft C je typ long long
dostatečně velký, aby držel produkt dvou hodnot int
bez přetečení.
závorek return
výraz v square
jsou hodnoceny jako součást výraz, a nejsou vyžadovány return
prohlášení.
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;}
ratio
funkce vrací poměr dvou int
argumenty jako plovoucí-bod double
hodnota. Výraz return
je nucen použít operaci s plovoucí desetinnou čárkou odléváním jednoho z operandů do double
. V opačném případě by byl použit operátor celočíselného dělení a zlomková část by byla ztracena.
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
volání funkce square
s parametrem hodnota INT_MAX
, největší celé číslo se znaménkem hodnotu, která se hodí v int
. Výsledek long long
je uložen v squared
a poté vytištěn. report_square
funkce void
návratový typ, tak to nemá výraz v jeho return
prohlášení.
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
volání funkce ratio
s parametrem hodnoty 1
INT_MAX
. Výsledek double
je uložen v fraction
a poté vytištěn. Funkce report_ratio
mávoid
návratový typ, takže nemusí explicitně vracet hodnotu. Provedení report_ratio
„spadne ze dna“ a nevrátí volajícímu žádnou hodnotu.
int main(){ int n = 1; int x = INT_MAX; report_square(); report_ratio( n, x ); return 0;}
main
funkce volá dvě funkce: report_square
report_ratio
. Protože report_square
nemá žádné parametry a vrací void
, nepřiřazujeme jeho výsledek proměnné. Stejně tak report_ratio
vrací void
, takže ani neukládáme jeho návratovou hodnotu. Po každém z těchto volání funkcí pokračuje provádění při dalším příkazu. main
vrátí hodnotu 0
(obvykle se používá k hlášení úspěch) ukončit program.
Chcete-li zkompilovat příklad, vytvořte soubor zdrojového kódu s názvem C_return_statement.c
. Poté zkopírujte celý příkladový kód v uvedeném pořadí. Uložte soubor a zkompilovat v Developer okno příkazového řádku pomocí příkazu:
cl /W4 C_return_statement.c
Pak, chcete-li spustit příklad kódu, zadejte C_return_statement.exe
na příkazovém řádku. Výstup příkladu vypadá takto: