해당 attribute는 C++11 이후 부터 지원되는 기능입니다.
함수 이름 정의시에 선언할 수 있습니다.
noreturn의 기능은
해당 함수가 어떠한 기능도 리턴하지 않는다는 것을 컴파일러에게 알려주는건데요!
단순히, return; 과 같이 아무것도 리턴하지 않는다는 의미가 아니구요
1. 무한 루프를 돌면서 어떠한 값도 리턴하지 않는 경우
2. std::terminate, exit()과 같은 함수를 통해 리턴값을 줄 수 없는 경우
사용합니다.
또한 noreturn을 통해 선언한 함수들은 컴파일러가 보고
아 noreturn 밑의 문장들은 필요가 없는 문장이구나~라고 인식하게 되고
이후 문장들은 컴파일러 단에서 없는 것으로 간주할 수 있습니다.
다음 예제를 통해 어떻게 noreturn을 사용하는지 한번 살펴볼까요!?
[[ noreturn ]] void func1() {
throw "err";
// 이 경우 올바르게 noreturn 기능을 사용한거라고 볼 수 있습니다.
}
void func2 [[ noreturn ]] (int i) {
if (i > 0) {
throw "err";
}
// 만약 i<=0 인 경우 return 을 해버리기 때문에 warning 혹은 error가 발생 할 수 있습니다:)
}
간단하죠!?
모던 C++ 코드를 보시다가 해당 문구가 있으시면 그렇게 이해하고 넘어가시면 될 거 같아요!
저 같은 경우는
'noreturn' function does return
와 같은 오류가 발생했고, 해당 오류를 찾다 보니 noreturn의 사용법에대해서 공부하게 되었네요!
오늘 하루도 수고 하셨습니다 :)
반응형
'프로그래머의 프로그래밍 이야기 > C++ Programming' 카테고리의 다른 글
C++ 오버로딩 다양한 사용법 정리 (1) | 2022.06.20 |
---|---|
C/C++ const 키워드 위치 (0) | 2022.06.15 |
C/C++ const/constexpr 키워드 사용법, 차이 (0) | 2022.06.14 |
댓글