return — instrukcja (C)
Instrukcja return kończy wykonywanie funkcji i zwraca sterowanie do funkcji wywołującej.Wykonanie wznawia działanie w funkcji wywołującej w punkcie bezpośrednio po wywołaniu.Instrukcja return może również zwrócić wartość do funkcji wywołującej.Zobacz Zwracany typ aby uzyskać więcej informacji.
Składnia
- jump-statement:
return expression opt**;**
Wartość expression, jeśli jest obecna, jest zwracana do funkcji wywołującej.Jeśli expression jest pominięte, wartość zwracana funkcji jest niezdefiniowana.Wyrażenie, jeśli jest obecne, jest wykonywane i następnie konwertowane na typ zwracany przez funkcję.Jeśli funkcja została zadeklarowana z typem zwracanym void, instrukcja return zawierająca wyrażenie generuje ostrzeżenie i wyrażenie nie jest wykonywane.
Jeśli w definicji funkcji nie występuje instrukcja return, sterowanie automatycznie wraca do funkcji wywołującej po wykonaniu ostatniej instrukcji wywołanej funkcji.W tym przypadku wartość zwracana funkcji jest niezdefiniowana.Jeśli wartość zwracana nie jest wymagana, należy zadeklarować funkcję, mającą zwracany typ void; w przeciwnym razie domyślnym zwracanym typem jest int.
Wielu programistów używa nawiasów wokół argumentu expression instrukcji return.Jednakże, język C nie wymaga nawiasów.
Ten przykład ilustruje instrukcję return:
#include <limits.h>
#include <stdio.h>
void draw( int i, long long ll );
long long sq( int s );
int main()
{
long long y;
int x = INT_MAX;
y = sq( x );
draw( x, y );
return x;
}
long long sq( int s )
{
// Note that parentheses around the return expression
// are allowed but not required here.
return( s * (long long)s );
}
void draw( int i, long long ll )
{
printf( "i = %d, ll = %lld\n", i, ll );
return;
}
W tym przykładzie funkcja main wywołuje dwie funkcje: sq i draw.Funkcja sq zwraca wartość x * x do main, gdzie wartość zwracana jest przypisana do y.Nawiasy wokół zwracanego wyrażenia sq są wykonywane jako część wyrażenia i nie są wymagane przez instrukcję return.Ponieważ zwracane wyrażenie jest wykonywane przed konwersją na zwracany typ, sq wymusza, rzutowanie typu wyrażenia na typ zwracany, aby zapobiec możliwemu przepełnieniu zakresu liczb całkowitych, który może spowodować nieoczekiwane skutki.Funkcja draw jest zadeklarowana jako funkcja void.Drukuje wartości swoich parametrów, a następnie pusta instrukcja return kończy działanie funkcji i nie zwraca wartości.Próba przypisania wartości zwracanej draw spowodowałoby wyświetlenie komunikatu diagnostycznego.Następnie funkcja main zwraca wartość x do systemu operacyjnego.
Wyjście przykładu wygląda następująco: