본문 바로가기
  • 여행하고 먹는 즐거운 콘지의하루
프로그래머의 프로그래밍 이야기/C++ Programming

C++ noreturn 이란

by 콘지 2022. 2. 7.

해당 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의 사용법에대해서 공부하게 되었네요!

오늘 하루도 수고 하셨습니다 :) 

반응형

댓글