分享方式:


_Noreturn 關鍵字和 noreturn 宏 (C11)

關鍵字 _Noreturn 是在 C11 中引進。 它會告知編譯器它套用的函式不會傳回給呼叫端。 編譯器知道在呼叫 _Noreturn 函式之後的程式碼無法連線。 不會傳回的函式範例是 中止。 如果控制流程可能返回呼叫端,則函式不能有 _Noreturn 屬性。

關鍵字通常透過 stdnoreturn.h > 中 < 提供的便利宏 noreturn 來使用,其對應至 _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)