return statement
현재 함수를 종료하고 지정된 값을 호출자 함수로 반환합니다.
목차 |
구문
attr-spec-seq
(선택 사항)
return
expression
;
|
(1) | ||||||||
attr-spec-seq
(선택 사항)
return
;
|
(2) | ||||||||
| expression | - | 함수의 반환값을 초기화하는 데 사용되는 표현식 |
| attr-spec-seq | - |
(C23)
선택적
속성
목록,
return
문에 적용됨
|
설명
만약 expression 의 타입이 함수의 반환 타입과 다른 경우, 그 값은 함수의 반환 타입을 가진 객체에 할당되는 것처럼 변환 됩니다. 단, 객체 표현의 중첩이 허용된다는 점은 예외입니다:
struct s { double i; } f(void); // 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; // 정의되지 않은 동작 (할당 시 중첩) g.u2.f3 = f(); // 올바르게 정의됨 }
반환 타입이 실수 부동소수점 타입인 경우, 결과가 새로운 타입에서 암시하는 것보다 더 넓은 범위와 정밀도 로 표현될 수 있습니다.
void
를 반환하는 함수의 끝에 도달하는 것은
void
return
;
와 동일합니다. 다른 값을 반환하는 함수의 끝에 도달하는 것은 함수의 결과가 표현식에서 사용될 경우 정의되지 않은 동작입니다(이러한 반환 값을 무시하는 것은 허용됩니다).
main
함수에 대해서는
main
function
를 참조하십시오.
|
no-return 함수
에서
|
(C11부터) |
키워드
예제
|
이 섹션은 불완전합니다
이유: 개선 필요 |
#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); // 반환값 4가 i를 초기화하는 데 사용됨 i = fb(i); // 반환값 2가 대입의 우변으로 사용됨 printf("main(): %d\n", i); }
출력:
fa(): 1 fb(): 4 main(): 2
참고문헌
- C17 표준 (ISO/IEC 9899:2018):
-
- 6.8.6.4 return 문 (p: 111-112)
- C11 표준 (ISO/IEC 9899:2011):
-
- 6.8.6.4 반환문 (p: 154)
- C99 표준 (ISO/IEC 9899:1999):
-
- 6.8.6.4 반환문 (p: 139)
- C89/C90 표준 (ISO/IEC 9899:1990):
-
- 3.6.6.4 return 문
참고 항목
|
C++ 문서
for
return
문
|