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 固有の仕様はここまで

関連項目

__declspec
キーワード