次の方法で共有


noreturn

Microsoft 固有の仕様

__declspec属性は、関数が返されないことをコンパイラに通知します。 コンパイラは、 __declspec(noreturn) 関数の呼び出しに続くコードに到達不能であることを認識します。

コンパイラで値を返さないコントロール パスの関数が検出されると、警告 (C4715) またはエラー メッセージ (C2202) が生成されます。 戻らない関数が原因で制御パスに到達できない場合は、 __declspec(noreturn) を使用して、この警告またはエラーを回避します。

Note

戻ることになっている関数に __declspec(noreturn) を追加すると、未定義の動作になることがあります。

次の例では、 isZeroOrPositive の引数が負の場合、 fatal が呼び出されます。 その制御パスに return ステートメントがないため、すべてのコントロール パスが値を返すわけではないという警告 C4715 が発生します。 fatal__declspec(noreturn)として宣言すると、その警告が軽減されます。これは、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
キーワード