`noreturn` 속성 — 돌아오지 않는 함수
noreturn 속성 — 돌아오지 않는 함수
함수라고 해서 전부 값을 돌려주고 끝나는 건 아니에요. 프로그램을 종료하는 exit(), 점프를 수행하는 longjmp()처럼 호출한 뒤 제어가 절대 호출자에게 돌아오지 않는 함수도 있어요. [[noreturn]] 속성은 바로 그 "이 함수는 끝까지 실행해도 함수 끝에 도달하지 않는다"는 사실을 컴파일러에 알려주는 장치예요.
출처: cppreference
본문
문법(Syntax)
[[noreturn]] (1)
[[__noreturn__]] (1)
[[_Noreturn]] (2, deprecated)
[[___Noreturn__]] (2, deprecated)
설명(Explanation)
이 속성은 함수가 반환하지 않음을 나타내요. 함수의 이름에 적용되며, 그 함수가 return 문을 실행하거나 함수 본문의 끝에 도달함으로써는 반환하지 않는다는 뜻이에요. 다만 longjmp를 실행해 반환하는 것은 가능해요.
이 속성이 붙은 함수가 실제로 반환하면 그 동작은 미정의(undefined behavior)예요. 컴파일러가 이를 감지할 수 있다면 진단을 내리도록 권장돼요.
이전에는 _Noreturn이라는 키워드로 표기했어요. C23부터 _Noreturn이 폐기(deprecated)되고 이 속성으로 대체됐어요.
표준 라이브러리
다음 표준 함수들은 noreturn 속성으로 선언돼 있어요(이전에는 _Noreturn 지정자로 선언됐었죠).
abort()exit()_Exit()quick_exit()thrd_exit()longjmp()
더 알아보기
[[nodiscard]]속성과 함께 C23 속성의 대표적인 두 쓰임새예요._Noreturn키워드에 대한 세부 문서도 함께 보면 이전 표기와의 관계가 분명해져요.