Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어의 _Noreturn 함수 지정자 완벽 가이드

_Noreturn 함수 지정자란?

C11 표준에서 도입된 _Noreturn 함수 지정자는 컴파일러에게 해당 함수가 실행된 후 호출자에게 제어권을 다시 반환하지 않는다는 사실을 알려주는 키워드입니다. 대표적으로 exit()abort()처럼 프로그램을 강제로 종료하는 함수들이 이에 해당합니다.

만약 _Noreturn으로 선언된 함수 내부에 return 문이 존재하면, 컴파일러는 컴파일 시점에 경고나 오류를 발생시킵니다.

잘못된 사용 예제

#include<stdio.h>
_Noreturn char function() {
    return 'T'; // noreturn 함수에서 값 반환 시도
}
main() {
    printf("반환된 값: %d\n", function());
}

출력 결과

프로그램이 비정상 종료됩니다
[경고] 'noreturn'으로 선언된 'function' 함수에 'return' 문이 있습니다
warning: function declared 'noreturn' has a 'return' statement

위 코드처럼 _Noreturn 함수 안에서 return 문을 사용하면 컴파일러가 이를 감지하여 경고 메시지를 출력하고, 프로그램은 비정상적으로 종료될 수 있습니다.

일반 함수와의 비교

반면, 일반적인 함수라면 아무런 제약 없이 값을 반환할 수 있으며 정상적으로 동작합니다.

올바른 예제 코드

#include<stdio.h>
int function() {
    return 86; // 값을 정상적으로 반환
}
main() {
    printf("반환된 값: %d\n", function());
}

출력 결과

반환된 값: 86

_Noreturn 활용 시 주의사항

  • _Noreturn 함수는 exit(), abort() 호출이나 무한 루프 등 프로그램의 흐름을 종료하거나 멈추는 로직을 반드시 포함해야 합니다.
  • 함수가 실제로 반환되지 않음을 보장하지 못하면 정의되지 않은 동작(undefined behavior)이 발생할 수 있습니다.
  • C++11 이상에서는 동일한 기능을 하는 [[noreturn]] 속성(attribute)을 사용할 수 있습니다.