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); }