return statement
Terminates current function and returns specified value to the caller function.
Syntax
return expression ;
|
(1) | ||||||||
return ;
|
(2) | ||||||||
Explanation
If the type of the expression is different from the return type of the function, its value is converted as if by assignment to an object whose type is the return type of the function, except that overlap between object representations is permitted:
struct s { double i; } f(void); // function returning struct s union { struct { int f1; struct s f2; } u1; struct { struct s f3; int f4; } u2; } g; struct s f(void) { return g.u1.f2; } int main(void) { // g.u2.f3 = g.u1.f2; // undefined behavior (overlap in assignment) g.u2.f3 = f(); // well-defined }
If the return type is a real floating type, the result may be represented in greater range and precision than implied by the new type.
Reaching the end of a function other than main is equivalent to return;. For main, see main function. Reaching the end of any other value-returning function is undefined behavior, but only if the result of the function is used in an expression.
Executing the return
statement in a no-return function is undefined behavior.
Keywords
Example
This section is incomplete Reason: improve |
#include <stdio.h> void fa(int i) { if (i == 2) return; printf("fa(): %d\n", i); } // implied return; int fb(int i) { if (i > 4) return 4; printf("fb(): %d\n", i); return 2; } int main(void) { fa(2); fa(1); int i = fb(5); // the return value 4 used to initializes i i = fb(i); // the return value 2 used as rhs of assignment printf("main(): %d\n", i); }
Output:
fa(): 1 fb(): 4 main(): 2
References
- C11 standard (ISO/IEC 9899:2011):
- 6.8.6.4 The return statement (p: 154)
- C99 standard (ISO/IEC 9899:1999):
- 6.8.6.4 The return statement (p: 139)
- C89/C90 standard (ISO/IEC 9899:1990):
- 3.6.6.4 The return statement