try(C++)

提供: Appmethod Topics
移動先: 案内検索

キーワード(アルファベット順):インデックス への移動


カテゴリ

C++ 固有キーワード

構文

try compound-statement handler-list

説明

try キーワードは C++ プログラムでのみサポートされています。C プログラムでは __try を使用してください。C++ では __try も使用できます。

例外が発生する可能性があるコード ブロックの前には、try キーワードを付ける必要があります。try キーワードの後には、中かっこ()で囲まれたコード ブロックを置きます。これによりプログラムで例外発生を検出し、例外に応じた処理を実行することができます。例外が発生した場合は、プログラム フローが中断され、次の手順が実行されます。

  • プログラムが対応するハンドラを検索する
  • ハンドラが見つかった場合はスタックがその点で解放される
  • プログラムの制御がハンドラに渡される

ハンドラが検出されない場合、プログラムは terminate 関数を呼び出します。例外が送出されない場合、プログラムは通常どおり実行されます。


以下のコードは、try/__finally 構文の使い方を示しています。

#include <stdio.h>
#include <string.h>
#include <windows.h>

class Exception
{
 public:
 Exception(char* s = "Unknown"){what = strdup(s);      }
 Exception(const Exception& e ){what = strdup(e.what); }
~Exception()                   {free(what);         }
 char* msg() const             {return what;           }
private:
 char* what;
};

int main()
{
 float e, f, g;
 try
 {
   try
   {
     f = 1.0;
     g = 0.0;
     try
     {
       puts("Another exception:");

       e = f / g;
     }
     __except(EXCEPTION_EXECUTE_HANDLER)
     {
       puts("Caught a C-based exception.");
       throw(Exception("Hardware error: Divide by 0"));
     }
   }
   catch(const Exception& e)
   {
     printf("Caught C++ Exception: %s :\n", e.msg());
   }
 }
 __finally
 {
   puts("C++ allows __finally too!");
 }
return e;
}

上のプログラムを実行すると、次の結果になります。

Another exception:

Caught a C-based exception.

Caught C++ exception[Hardware error: Divide by 0]

C++ allows __finally too!

関連項目