Namespaces
Variants

return statement

From cppreference.net

현재 함수를 종료하고 지정된 값을 호출자 함수로 반환합니다.

목차

구문

attr-spec-seq (선택 사항) return expression ; (1)
attr-spec-seq (선택 사항) return ; (2)
expression - 함수의 반환값을 초기화하는 데 사용되는 표현식
attr-spec-seq - (C23) 선택적 속성 목록, return 문에 적용됨

설명

1) 표현식 을 평가하고, 현재 함수를 종료하며 표현식 의 결과를 호출자에게 반환합니다(반환된 값은 함수 호출 표현식의 값이 됩니다). 함수 반환 타입이 void 가 아닌 경우에만 유효합니다.
2) 현재 함수를 종료합니다. 함수 반환 타입이 void 인 경우에만 유효합니다.

만약 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 함수 에서 return 문을 실행하는 것은 정의되지 않은 동작입니다.

(C11부터)

키워드

return

예제

#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