Udostępnij za pośrednictwem


return Instrukcja (C)

Instrukcja return kończy wykonywanie funkcji i zwraca kontrolkę do funkcji wywołującej. Wykonanie jest wznawiane w funkcji wywołującej natychmiast po wywołaniu. Instrukcja return może zwrócić wartość do funkcji wywołującej. Aby uzyskać więcej informacji, zobacz Zwracany typ.

Składnia

jump-statement:
returnexpressionZdecydować ;

Wartość expression, jeśli jest obecna, jest zwracana do funkcji wywołującej. Jeśli expression zostanie pominięta, zwracana wartość funkcji jest niezdefiniowana. Wyrażenie, jeśli jest obecne, jest obliczane, a następnie konwertowane na typ zwracany przez funkcję. return Gdy instrukcja zawiera wyrażenie w funkcjach, które mają void typ zwracany, kompilator generuje ostrzeżenie, a wyrażenie nie jest oceniane.

Jeśli żadna instrukcja nie return pojawia się w definicji funkcji, kontrolka automatycznie wraca do funkcji wywołującej po wykonaniu ostatniej instrukcji wywoływanej funkcji. W takim przypadku wartość zwracana wywołanej funkcji jest niezdefiniowana. Jeśli funkcja ma typ zwracany inny niż void, jest to poważna usterka, a kompilator wyświetla komunikat diagnostyczny ostrzegawczy. Jeśli funkcja ma typ zwracany void , to zachowanie jest w porządku, ale może być uważane za słaby styl. Użyj zwykłej return instrukcji, aby wyjaśnić intencję.

Dobra praktyka inżynieryjna zawsze określa typ zwracany dla funkcji. Jeśli wartość zwracana nie jest wymagana, zadeklaruj, że funkcja ma void zwracać typ. Jeśli typ zwracany nie jest określony, kompilator języka C przyjmuje domyślny typ zwracany .int

Wielu programistów używa nawiasów, aby ująć expression argument instrukcji return . Jednak język C nie wymaga nawiasów.

Kompilator może wydać komunikat diagnostyczny ostrzegawczy o nieprzygotowanym kodzie, jeśli znajdzie instrukcje umieszczone po instrukcji return .

main W funkcji return instrukcja i wyrażenie są opcjonalne. Co się stanie z zwróconą wartością, jeśli zostanie określona, zależy od implementacji. Specyficzne dla firmy Microsoft: implementacja języka Microsoft C zwraca wartość wyrażenia do procesu, który wywołał program, na przykład cmd.exe. Jeśli nie return podano wyrażenia, środowisko uruchomieniowe microsoft C zwraca wartość wskazującą powodzenie (0) lub niepowodzenie (wartość niezerowa).

Przykład

Ten przykład to jeden program w kilku częściach. Demonstruje instrukcję return i sposób jej użycia zarówno do zakończenia wykonywania funkcji, jak i opcjonalnie, w celu zwrócenia wartości.

// 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 );
}

Funkcja square zwraca kwadrat argumentu w szerszym typie, aby zapobiec błędowi arytmetycznemu. Specyficzne dla firmy Microsoft: W implementacji microsoft C typ jest wystarczająco duży, long long aby przechowywać produkt dwóch int wartości bez przepełnienia.

Nawiasy wokół return wyrażenia w obiekcie square są oceniane jako część wyrażenia i nie są wymagane przez instrukcję 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;
}

Funkcja ratio zwraca stosunek dwóch int argumentów jako wartość zmiennoprzecinkowa double . Wyrażenie return jest wymuszane na użyciu operacji zmiennoprzecinkowych przez rzutowanie jednego z operandów na double. W przeciwnym razie zostanie użyty operator dzielenia całkowitego, a część ułamkowa zostanie utracona.

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.
}

Funkcja report_square wywołuje square wartość parametru o wartości INT_MAX, największej podpisanej wartości całkowitej, która mieści się w obiekcie int. Wynik long long jest przechowywany w pliku squared, a następnie wydrukowany. Funkcja report_square ma typ zwracany void , więc nie ma wyrażenia w instrukcji return .

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.
}

Funkcja report_ratio wywołuje wartości ratio parametrów 1 i INT_MAX. Wynik double jest przechowywany w pliku fraction, a następnie wydrukowany. Funkcja report_ratio ma typ zwracany void , więc nie musi jawnie zwracać wartości. Wykonanie " report_ratio spada z dołu" i nie zwraca żadnej wartości do obiektu wywołującego.

int main()
{
    int n = 1;
    int x = INT_MAX;

    report_square();
    report_ratio( n, x );

    return 0;
}

Funkcja main wywołuje dwie funkcje: report_square i report_ratio. Ponieważ report_square nie przyjmuje żadnych parametrów i zwraca voidwartość , nie przypisujemy jej wyniku do zmiennej. Podobnie report_ratio zwraca wartość void, więc nie zapisujemy jej wartości zwracanej. Po każdym z tych wywołań funkcji wykonywanie będzie kontynuowane w następnej instrukcji. Następnie main zwraca wartość 0 (zwykle używaną do zgłaszania powodzenia) w celu zakończenia programu.

Aby skompilować przykład, utwórz plik kodu źródłowego o nazwie C_return_statement.c. Następnie skopiuj cały przykładowy kod w pokazanej kolejności. Zapisz plik i skompiluj go w oknie wiersza polecenia dewelopera przy użyciu polecenia :

cl /W4 C_return_statement.c

Następnie, aby uruchomić przykładowy kod, wprowadź C_return_statement.exe w wierszu polecenia. Dane wyjściowe przykładu wyglądają następująco:

value = 2147483647, squared = 4611686014132420609
1 / 2147483647 = 0.0000000004656613

Zobacz też

Zestawienia