_Noreturn
關鍵字和 noreturn
巨集 (C11)
關鍵詞 _Noreturn
是在 C11 中引進的。 它會告訴編譯程式,其所套用的函式不會傳回給呼叫端。 編譯程式知道呼叫函式之後 _Noreturn
的程式代碼無法連線。 未傳回的函式範例為 中止。 如果控制流程有可能返回呼叫端,則函式不得具有 _Noreturn
屬性。
關鍵詞通常透過 stdnoreturn.h> 中<提供的便利巨集來使用,該巨集noreturn
會對應至 _Noreturn
關鍵詞。
使用 _Noreturn
(或對等 noreturn
專案) 的主要優點是讓函式在程式代碼中為未來的讀取器清楚,並偵測意外無法連線的程序代碼。
標示 noreturn
的函式不應該包含傳回型別,因為它不會將值傳回給呼叫端。 此屬性應該是 void
。
使用巨集和_Noreturn
關鍵詞的noreturn
範例
下列範例示範 _Noreturn
關鍵詞和對等 noreturn
巨集。
如果您使用可以忽略的巨集noreturn
,E0065
IntelliSense 可能會產生假的錯誤。 它不會阻止您執行範例。
// 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> |