Namespaces
Variants

_Noreturn function specifier (since C11) (deprecated in C23)

From cppreference.net

함수가 호출 지점으로 반환되지 않음을 지정합니다.

목차

구문

_Noreturn function_declaration (C11부터) (C23에서 사용 중단됨)

설명

_Noreturn 키워드는 함수 선언에 나타나며, 해당 함수가 return 문을 실행하거나 함수 본문의 끝에 도달하여 반환되지 않음을 지정합니다( longjmp 를 실행하여 반환될 수 있음). _Noreturn 으로 선언된 함수가 반환할 경우, 그 동작은 정의되지 않습니다. 이를 감지할 수 있다면 컴파일러 진단이 권장됩니다.

_Noreturn 지정자는 동일한 함수 선언에서 여러 번 나타날 수 있으며, 한 번 나타난 것과 동일하게 동작합니다.

이 지정자는 일반적으로 헤더 파일 <stdnoreturn.h> 에 제공되는 편의 매크로 noreturn 를 통해 사용됩니다.

_Noreturn 함수 지정자는 더 이상 사용되지 않습니다. 대신 [[ noreturn ]] 속성을 사용해야 합니다.

매크로 noreturn 또한 더 이상 사용되지 않습니다.

(C23 이후)

키워드

_Noreturn

표준 라이브러리

표준 라이브러리에서 다음 함수들은 noreturn 입니다:

**참고:** 주어진 지침에 따라 HTML 태그, 속성, 태그 내의 C++ 함수명은 번역하지 않고 원본을 유지했습니다. 웹페이지의 실제 텍스트 내용이 함수명 외에 별도의 설명 텍스트가 없으므로, 번역할 내용이 없습니다.

예제

#include <stdio.h>
#include <stdlib.h>
#include <stdnoreturn.h>
// i <= 0일 경우 정의되지 않은 동작을 발생시킴
// i > 0일 경우 종료됨
noreturn void exit_now(int i) // or _Noreturn void exit_now(int i)
{
    if (i > 0)
        exit(i);
}
int main(void)
{
    puts("Preparing to exit...");
    exit_now(2);
    puts("This code is never executed.");
}

출력:

Preparing to exit...

참고문헌

  • C23 표준 (ISO/IEC 9899:2024):
  • 6.7.4 함수 지정자 (p: TBD)
  • 7.23 _Noreturn <stdnoreturn.h> (p: TBD)
  • C17 표준 (ISO/IEC 9899:2018):
  • 6.7.4 함수 지정자 (p: 90-91)
  • 7.23 _Noreturn <stdnoreturn.h> (p: 263)
  • C11 표준 (ISO/IEC 9899:2011):
  • 6.7.4 함수 지정자 (p: 125-127)
  • 7.23 _Noreturn <stdnoreturn.h> (p: 361)

참고 항목

[[ noreturn ]] (C23) [[ _Noreturn ]] (C23) (deprecated)
함수가 반환하지 않음을 나타냅니다
(속성 지정자)
C++ 문서 for [[noreturn]]