_Noreturn 키워드 및 noreturn 매크로(C11)

_Noreturn 키워드는 C11에 도입되었습니다. 컴파일러가 적용되는 함수가 호출자에게 반환되지 않는다는 것을 컴파일러에 알립니다. 그러면 컴파일러는 _Noreturn 함수 호출 후의 코드에 접근할 수 없다는 사실을 인식합니다. 반환하지 않는 함수의 예는 abort입니다. 제어 흐름이 호출자에 반환될 가능성이 있는 경우 함수에 _Noreturn 특성이 있어서는 안 됩니다.

키워드는 일반적으로 _Noreturn 키워드에 매핑되는 <stdnoreturn.h>에 제공되는 편의 매크로인 noreturn을 통해 사용됩니다.

_Noreturn(또는 동등한 noreturn)을 사용할 경우의 주요 이점은 이후 판독기의 코드에서 함수의 의도를 명확히 하고 의도치 않게 접근 불가능한 코드를 검색하는 것입니다.

noreturn이 표시된 함수는 호출자에 값을 반환하지 않으므로 반환 형식을 포함해서는 안 됩니다. 값이 void이어야 합니다.

noreturn 매크로 및 _Noreturn 키워드 사용 예제

다음 예제에서는 _Noreturn 키워드와 해당 noreturn 매크로를 보여 줍니다.

무시할 수 있는 매크로 noreturn을 사용하는 경우 IntelliSense는 의사 오류 E0065를 생성할 수도 있습니다. 샘플이 실행되는 것을 막지 않습니다.

// Compile with Warning Level4 (/W4) and /std:c11
#include <stdio.h>
#include <stdlib.h>
#include <stdnoreturn.h>

noreturn void fatal_error(void)
{
    exit(3);
}

_Noreturn void not_coming_back(void)
{
    puts("There's no coming back");
    fatal_error();
    return; // warning C4645 - function declared with noreturn has a return statement
}

void done(void)
{
    puts("We'll never get here");
}

int main(void)
{
    not_coming_back();
    done(); // warning c4702 - unreachable code

    return 0;
}

요구 사항

매크로 필수 헤더
noreturn <stdnoreturn.h>

추가 정보

/std(언어 표준 버전 지정)
/W4(경고 수준 지정)
C4702 경고
__declspec(noreturn)