共用方式為


_Noreturn 關鍵字和 noreturn 巨集 (C11)

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

關鍵詞通常透過 stdnoreturn.h> 中<提供的便利巨集來使用,該巨集noreturn會對應至 _Noreturn 關鍵詞。

使用 _Noreturn (或對等 noreturn專案) 的主要優點是讓函式在程式代碼中為未來的讀取器清楚,並偵測意外無法連線的程序代碼。

標示 noreturn 的函式不應該包含傳回型別,因為它不會將值傳回給呼叫端。 此屬性應該是 void

使用巨集和_Noreturn關鍵詞的noreturn範例

下列範例示範 _Noreturn 關鍵詞和對等 noreturn 巨集。

如果您使用可以忽略的巨集noreturnE0065IntelliSense 可能會產生假的錯誤。 它不會阻止您執行範例。

// 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;
}

需求

Macro 必要的標頭
noreturn <stdnoreturn.h>

另請參閱

/std (指定語言標準版本)
/W4 (指定警告層級)
C4702 警告
__declspec(未回覆)