Namespaces
Variants

C++ attribute: noreturn (since C++11)

From cppreference.net
C++ language
General topics
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications ( until C++17* )
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
Special member functions
Templates
Miscellaneous

함수가 반환하지 않음을 나타냅니다.

목차

구문

[ [ noreturn ] ]

설명

함수가 완료된 후 제어 흐름을 호출 함수로 반환하지 않음을 나타냅니다(예: 애플리케이션을 종료하는 함수, 예외를 throw하는 함수, 무한 루프를 도는 함수 등). 이 속성은 함수 선언에서 선언되는 함수 이름에만 적용됩니다.

이전에 [ [ noreturn ] ] 로 선언된 함수가 호출되고 해당 호출이 최종적으로 반환될 경우, 그 동작은 런타임-정의되지 않음 입니다.

함수의 첫 번째 선언에서 이 속성을 지정해야 하며, 만약 어떤 선언에서 이 속성을 지정한다면 반드시 첫 번째 선언에도 지정되어야 합니다. 만약 한 번역 단위에서 함수가 [ [ noreturn ] ] 로 선언되고, 다른 번역 단위에서 동일한 함수가 [ [ noreturn ] ] 없이 선언된다면, 프로그램은 형식 오류이며 진단 메시지가 요구되지 않습니다.

예제

[[noreturn]] void f()
{
    throw "error";
    // 정상
}
void q [[noreturn]] (int i)
{
    // 인수가 0 이하일 때 호출되면 동작이 정의되지 않음
    if (i > 0)
        throw "positive";
}
// void h() [[noreturn]]; // 오류: h 자체가 아닌 h의 함수 타입에 속성이 적용됨
int main()
{
    try { f(); } catch(...) {}
    try { q(42); } catch(...) {}
}

표준 라이브러리

다음 표준 함수들은 noreturn 속성으로 선언됩니다:

종료 함수
(C++11)
정리 작업 없이 정상적인 프로그램 종료를 유발함
(함수)
정리 작업 없이 비정상적인 프로그램 종료를 유발함
(함수)
정리 작업과 함께 정상적인 프로그램 종료를 유발함
(함수)
(C++11)
완전한 정리 작업 없이 빠른 프로그램 종료를 유발함
(함수)
예외 처리에 실패할 때 호출되는 함수
(함수)
(C++11에서 사용 중단됨) (C++17에서 제거됨)
동적 예외 명세가 위반될 때 호출되는 함수
(함수)
컴파일러 힌트
실행 불가능한 지점을 표시함
(함수)
항상 예외를 던지는 함수
std::exception_ptr 에서 예외를 다시 던짐
(함수)
저장된 예외를 던짐
( std::nested_exception 의 public 멤버 함수)
인자를 std::nested_exception 과 함께 던짐
(함수 템플릿)
비지역 점프 (C++17부터)
지정된 위치로 점프함
(함수)

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
CWG 2924 C++11 [ [ noreturn ] ] 함수에서 반환하는 경우
미정의 동작이 발생함
런타임 미정의 동작이
발생함

참고문헌

  • C++23 표준 (ISO/IEC 14882:2024):
  • 9.12.10 Noreturn 속성 [dcl.attr.noreturn]
  • C++20 표준(ISO/IEC 14882:2020):
  • 9.12.9 Noreturn 속성 [dcl.attr.noreturn]
  • C++17 표준 (ISO/IEC 14882:2017):
  • 10.6.8 Noreturn 속성 [dcl.attr.noreturn]
  • C++14 표준(ISO/IEC 14882:2014):
  • 7.6.3 Noreturn 속성 [dcl.attr.noreturn]
  • C++11 표준 (ISO/IEC 14882:2011):
  • 7.6.3 Noreturn 속성 [dcl.attr.noreturn]

참고 항목

C 문서 for _Noreturn
C 문서 for [[noreturn]]