エラーと例外処理

Origin Cは、C++ の try, catch, throw ステートメントを使って、例外処理をサポートしています。

tryブロックは、try キーワードの後にブレースで囲んだ1つ以上のステートメントで構成されます。 tryブロックの直後は、catchハンドラーです。 Origin Cは、整数 の引数を受け付けるcatchハンドラーを1つだけサポートします。 catch キーワードの後には、ブレースで囲まれた1つ以上のステートメントとなります。

try
{
    LPSTR lpdest = NULL;    // NULLポインタ
    strcpy(lpdest, "Test"); // エラーを起こすためにNULLポインタにコピー
}
catch(int nErr)
{
    out_int("Error = ", nErr);
}

tryブロック内のステートメントを実行することでtry-catchが動作します。 エラーが発生すると、実行はcatchブロックにジャンプします。 エラーが発生しなければ、catchブロックは無視されます。

throwキーワードは任意で、エラーをトリガーにして、catchブロックへのジャンプを実行します。

void TryCatchThrowEx()
{
    try
    {
        DoSomeWork(4);  // 成功を表示するために有効な数字を渡す
        DoSomeWork(-1); // エラーを引き起こすために無効な数字を渡す
    }
    catch(int iErr)
    {
        printf("Error code = %d\n", iErr);
    }
} 
void DoSomeWork(double num)
{
    if( num < 0 )
        throw 100; // 強制的にエラー
    if( 0 == num )
        throw 101; // 強制的にエラー

    double result = sqrt(num) / log(num);
    printf("sqrt(%f) / log(%f) = %g\n", num, num, result); 
}