_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> |