_Noreturn 関数指定子 (C11以降)(C23で非推奨)
From cppreference.com
関数が呼び出し元に戻らないことを指定します。
目次 |
[編集] 構文
| _Noreturn function_declaration | (C11以降)(C23で非推奨) | ||||||||
[編集] 説明
_Noreturn キーワードは関数宣言に現れ、関数が `return` 文の実行や関数本体の末尾に到達することによって戻らないことを指定します(ただし、longjmp の実行によって戻ることはあります)。_Noreturn と宣言された関数が戻った場合、その動作は未定義です。これが検出可能な場合、コンパイラによる診断が推奨されます。
_Noreturn 指定子は同じ関数宣言に複数回出現する可能性がありますが、その動作は一度だけ出現した場合と同じです。
この指定子は通常、ヘッダー `
|
マクロ `noreturn` も非推奨です。 |
(C23以降) |
[編集] キーワード
[編集] 標準ライブラリ
標準ライブラリでは、以下の関数は noreturn です。
[編集] 例
このコードを実行
#include <stdio.h> #include <stdlib.h> #include <stdnoreturn.h> // causes undefined behavior if i <= 0 // exits if i > 0 noreturn void exit_now(int i) // or _Noreturn void exit_now(int i) { if (i > 0) exit(i); } int main(void) { puts("Preparing to exit..."); exit_now(2); puts("This code is never executed."); }
出力
Preparing to exit...
[編集] 参照
- C23標準 (ISO/IEC 9899:2024)
- 6.7.4 関数指定子 (p: TBD)
- 7.23 _Noreturn <stdnoreturn.h> (p: TBD)
- C17標準 (ISO/IEC 9899:2018)
- 6.7.4 関数指定子 (p: 90-91)
- 7.23 _Noreturn <stdnoreturn.h> (p: 263)
- C11標準 (ISO/IEC 9899:2011)
- 6.7.4 関数指定子 (p: 125-127)
- 7.23 _Noreturn <stdnoreturn.h> (p: 361)
[編集] 関連項目
| 関数が戻らないことを示します (属性指定子) | |
| C++ ドキュメント for
[[noreturn]] | |