C++ attribute: noreturn (since C++11)
함수가 반환하지 않음을 나타냅니다.
목차 |
구문
[
[
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에서 제거됨)
|
동적 예외 명세가 위반될 때 호출되는 함수
(함수) |
컴파일러 힌트 |
|
|
(C++23)
|
실행 불가능한 지점을 표시함
(함수) |
항상 예외를 던지는 함수 |
|
|
(C++11)
|
std::exception_ptr
에서 예외를 다시 던짐
(함수) |
|
저장된 예외를 던짐
(
std::nested_exception
의 public 멤버 함수)
|
|
|
(C++11)
|
인자를
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]]
|