Instrukcja zwrotu (C)

  • 06/10/2020
  • 4 minuty do odczytania
    • c
    • n
    • m
    • g
    • s

a return koniec oświadczenia wykonanie funkcji i zwraca sterowanie do funkcji wywołującej. Wykonywanie wznawia się w funkcji wywołującej w punkcie bezpośrednio po wywołaniu. Poleceniereturn może zwrócić wartość funkcji wywołującej. Aby uzyskać więcej informacji, zobacz Typ powrotu.

składnia

jump-statement:
return expressionopt ;

wartość wyrażenie, jeśli występuje, jest zwracane do funkcji wywołującej. Jeżeli wyrażenie jest pominięte, wartość zwracana funkcji jest niezdefiniowana. Wyrażenie, Jeśli występuje, jest obliczane, a następnie konwertowane na typ zwracany przez funkcję. Gdy poleceniereturn Zawiera wyrażenie w funkcjach, które mają typ zwracanyvoid, kompilator generuje ostrzeżenie, a wyrażenie nie jest obliczane.

Jeśli w definicji funkcji nie pojawia się poleceniereturn, control automatycznie powraca do funkcji wywołującej po wykonaniu ostatniego polecenia wywołanej funkcji. W tym przypadku wartość zwracana wywołanej funkcji jest niezdefiniowana. Jeśli funkcja ma typ zwracany inny niżvoid, jest to poważny błąd, a kompilator wypisuje komunikat diagnostyczny z ostrzeżeniem. Jeśli funkcja zwraca typvoid, to zachowanie jest w porządku, ale może być uznane za zły styl. Użyj prostegoreturn, aby jasno określić swój zamiar.

jako dobrą praktykę inżynierską, zawsze określaj Typ zwrotu dla swoich funkcji. Jeśli wartość zwracana nie jest wymagana, zadeklaruj, że funkcja ma void Typ zwracania. Jeśli typ zwracany nie jest określony, kompilator C przyjmuje domyślny typ zwracany int.

wielu programistów używa nawiasów do załączania argumentu wyrażenia return. Jednak C nie wymaga nawiasów.

kompilator może wydać ostrzeżenie o nieosiągalnym kodzie, jeśli znajdzie jakieś polecenia umieszczone po instrukcjireturn.

w funkcjimain instrukcja i wyrażeniereturn są opcjonalne. To, co stanie się z zwracaną wartością, jeśli zostanie określona, zależy od implementacji. Specyficzne dla Microsoft: implementacja Microsoft C Zwraca wartość wyrażenia procesowi, który wywołał program, na przykład cmd.exe. Jeśli nie podano wyrażeniareturn, środowisko wykonawcze Microsoft C Zwraca wartość wskazującą sukces (0) lub niepowodzenie (wartość niezerowa).

przykład

Ten przykład to JEDEN program w kilku częściach. Pokazuje instrukcjęreturn I sposób jej użycia zarówno do zakończenia wykonywania funkcji, jak i opcjonalnie do 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 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 );}

funkcja square Zwraca kwadrat swojego argumentu, w szerszym typie, aby zapobiec błędowi arytmetycznemu. Specyficzne dla Microsoft: w implementacji Microsoft C Typlong long jest wystarczająco duży, aby utrzymać iloczyn dwóch wartościint bez przepełnienia.

nawiasy wokółreturn wyrażenia wsquare są obliczane jako część wyrażenia i nie są wymagane przezreturn.

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 ratiozwraca stosunek swoich dwóch argumentów intjako wartość zmiennoprzecinkową double. Wyrażeniereturn. W przeciwnym razie użyty zostałby Operator dzielenia liczby całkowitej, a część ułamkowa zostałaby 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.}

report_square funkcja wywołuje square z wartością parametru INT_MAX, największą liczbą całkowitą ze znakiem, która pasuje do int. Wyniklong long jest zapisywany wsquared, a następnie drukowany. Funkcjareport_square ma typ zwracanyvoid, więc nie ma wyrażenia w instrukcjireturn.

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 wywołanie funkcjiratio z wartościami parametrów1 IINT_MAX. Wynikdouble jest zapisywany wfraction, a następnie drukowany. Funkcjareport_ratio ma typ zwracaniavoid, więc nie musi jawnie zwracać wartości. Wykonanie report_ratio „spada z dołu” i nie zwraca żadnej wartości do wywołującego.

int main(){ int n = 1; int x = INT_MAX; report_square(); report_ratio( n, x ); return 0;}

funkcja mainwywołuje dwie funkcje: report_squareI report_ratio. Ponieważ report_square nie przyjmuje żadnych parametrów i zwraca void, nie przypisujemy jej wyniku do zmiennej. Podobnie, report_ratio zwraca void, więc nie zapisujemy również jej zwracanej wartości. Po każdym wywołaniu funkcji, wykonywanie jest kontynuowane przy następnej instrukcji. Następnie main Zwraca wartość 0 (zwykle używana do zgłaszania sukcesu), aby zakończyć program.

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 wskazanej kolejności. Zapisz plik i skompiluj go w oknie wiersza polecenia programisty za pomocą polecenia:

cl /W4 C_return_statement.c

następnie, aby uruchomić przykładowy kod, wprowadźC_return_statement.exe w wierszu polecenia. Wynik przykładu wygląda tak:

Related Posts

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *