try(C++)

提供: RAD Studio
移動先: 案内検索

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


カテゴリ

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!

関連項目