Sdílet prostřednictvím


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:
returnexpressionvolit ;

Hodnota expressionfunkce , 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ý inttyp .

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 squareda 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 fractiona 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

Viz také

Výkazy