| Labels | ||||
| Expression statements | ||||
| Compound statements | ||||
| Selection statements | ||||
| Iteration statements | ||||
| Jump statements | ||||
return | ||||
Terminates current function and returns specified value to the caller function.
Contents |
attr-spec-seq(optional)returnexpression; | (1) | ||||||||
attr-spec-seq(optional)return; | (2) | ||||||||
| expression | - | expression used for initializing the return value of the function |
| attr-spec-seq | - | (C23)optional list ofattributes, applied to thereturn statement |
If the type of theexpression is different from the return type of the function, its value isconverted 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 sunion{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 ingreater range and precision than implied by the new type.
Reaching the end of a function returningvoid is equivalent toreturn;. Reaching the end of any other value-returning function is undefined behavior if the result of the function is used in an expression (it is allowed to discard such return value). Formain, seemain function.
Executing the | (since C11) |
| 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)return4;printf("fb(): %d\n", i);return2;} 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 assignmentprintf("main(): %d\n", i);}
Output:
fa(): 1fb(): 4main(): 2
C++ documentation for return statement |