noreturn
Microsoft 固有の仕様
この属性は __declspec
、関数が返さないことをコンパイラに通知します。 コンパイラは、関数の呼び出しに続くコードに __declspec(noreturn)
到達不能であることを認識します。
コンパイラで値を返さないコントロール パスの関数が検出されると、警告 (C4715) またはエラー メッセージ (C2202) が生成されます。 戻らない関数が原因で制御パスに到達できない場合は、この警告またはエラーを防ぐために使用 __declspec(noreturn)
します。
Note
戻ることになっている関数に __declspec(noreturn)
を追加すると、未定義の動作になることがあります。
例
次の例では、引数 for isZeroOrPositive
が負の場合に fatal
呼び出されます。 その制御パスに return ステートメントがないため、すべてのコントロール パスが値を返すわけではないという警告 C4715 が発生します。 として__declspec(noreturn)
宣言するとfatal
、その警告が軽減されます。これは、プログラムを終了してからfatal()
ポイントがないために望ましいものです。
// noreturn2.cpp
#include <exception>
__declspec(noreturn) void fatal()
{
std::terminate();
}
int isZeroOrPositive(int val)
{
if (val == 0)
{
return 0;
}
else if (val > 0)
{
return 1;
}
// this function terminates if val is negative
fatal();
}
int main()
{
isZeroOrPositive(123);
}
Microsoft 固有の仕様はここまで
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示