- 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 ratio
zwraca stosunek swoich dwóch argumentów int
jako 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 main
wywołuje dwie funkcje: report_square
I 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: