return
Příkaz (C)
Příkaz return
ukončí provádění funkce a vrátí ovládací prvek volající funkci. Provádění se obnoví ve volající funkci v okamžiku bezprostředně po volání. Příkaz return
může vrátit hodnotu volající funkci. Další informace naleznete v tématu Návratový typ.
Syntaxe
jump-statement
:
return
expression
volit;
Hodnota expression
funkce , pokud je k dispozici, je vrácena volající funkci. Pokud expression
je vynechána, návratová hodnota funkce není definována. Výraz, pokud je k dispozici, je vyhodnocen a pak převeden na typ vrácený funkcí. return
Pokud příkaz obsahuje výraz ve funkcích, které mají návratový void
typ, kompilátor vygeneruje upozornění a výraz se nevyhodnocuje.
Pokud se v definici funkce nezobrazí žádný return
příkaz, ovládací prvek se automaticky vrátí do volající funkce po provedení posledního příkazu volané funkce. V tomto případě není definována návratová hodnota volané funkce. Pokud má funkce jiný návratový typ než void
, jedná se o závažnou chybu a kompilátor vytiskne diagnostickou zprávu s upozorněním. Pokud má funkce návratový void
typ, je toto chování v pořádku, ale může být považováno za špatný styl. K vymazání záměru použijte prostý return
příkaz.
Dobrým technickým postupem je vždy zadat návratový typ pro vaše funkce. Pokud návratová hodnota není povinná, deklarujte funkci tak, aby měla void
návratový typ. Pokud není zadán návratový typ, kompilátor jazyka C předpokládá výchozí návratový int
typ .
Mnoho programátorů používá závorky k uzavření expression
argumentu return
příkazu. Jazyk C však nevyžaduje závorky.
Kompilátor může vydat diagnostickou zprávu s upozorněním na nedostupný kód, pokud najde nějaké příkazy umístěné za příkazem return
.
main
Ve funkci return
je příkaz a výraz volitelné. Co se stane s vrácenou hodnotou, pokud je zadána, závisí na implementaci. Specifické pro Microsoft: Implementace jazyka Microsoft C vrátí hodnotu výrazu procesu, který vyvolal program, například cmd.exe
. Pokud není zadán žádný return
výraz, vrátí modul runtime jazyka Microsoft C hodnotu, která označuje úspěch (0) nebo selhání (nenulovou hodnotu).
Příklad
Tento příklad je jeden program v několika částech. return
Ukazuje příkaz a způsob použití k ukončení provádění funkce a volitelně k vrácení hodnoty.
// C_return_statement.c
// Compile using: cl /W4 C_return_statement.c
#include <limits.h> // for INT_MAX
#include <stdio.h> // for printf
long 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
vrátí druhou mocninu argumentu v širším typu, aby se zabránilo aritmetické chybě. Specifické pro Microsoft: V implementaci long long
jazyka Microsoft C je typ dostatečně velký, aby držel součin dvou int
hodnot bez přetečení.
Závorky kolem výrazu return
se square
vyhodnocují jako součást výrazu a nejsou vyžadovány příkazem return
.
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;
}
Funkce ratio
vrátí poměr svých dvou int
argumentů jako hodnota s plovoucí desetinou čárkou double
. Výraz return
je nucen použít operaci s plovoucí desetinou čárkou přetypováním jednoho z operandů na double
. V opačném případě by se použil operátor dělení celého čísla a zlomková část by se ztratila.
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.
}
Funkce report_square
volá square
s hodnotou parametru INT_MAX
, největší podepsaná celočíselná hodnota, která se vejde do int
. Výsledek long long
se uloží do squared
a pak se vytiskne. Funkce report_square
má návratový void
typ, takže ve svém return
příkazu nemá výraz.
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.
}
Funkce report_ratio
volá ratio
hodnoty 1
parametrů a INT_MAX
. Výsledek double
se uloží do fraction
a pak se vytiskne. Funkce report_ratio
má návratový void
typ, takže nemusí explicitně vracet hodnotu. report_ratio
Spuštění "spadne zespodu" a volajícímu nevrátí žádnou hodnotu.
int main()
{
int n = 1;
int x = INT_MAX;
report_square();
report_ratio( n, x );
return 0;
}
Funkce main
volá dvě funkce: report_square
a report_ratio
. Protože report_square
nepřijímá žádné parametry a vrací void
, nepřiřazujeme jeho výsledek proměnné. Stejně tak report_ratio
vrátí hodnotu void
, takže neukládáme jeho návratovou hodnotu. Po každém z těchto volání funkce bude provádění pokračovat v dalším příkazu. Potom main
vrátí hodnotu 0
(obvykle se používá k nahlášení úspěchu) k ukončení programu.
Chcete-li zkompilovat příklad, vytvořte soubor zdrojového kódu s názvem C_return_statement.c
. Potom zkopírujte veškerý ukázkový kód v uvedeném pořadí. Uložte soubor a zkompilujte ho v okně příkazového řádku pro vývojáře pomocí příkazu:
cl /W4 C_return_statement.c
Potom spusťte ukázkový kód zadáním C_return_statement.exe
na příkazový řádek. Výstup příkladu vypadá takto:
value = 2147483647, squared = 4611686014132420609
1 / 2147483647 = 0.0000000004656613