1. ホーム
  2. c

[解決済み] C言語でのTry catchステートメント

2022-03-03 22:13:44

質問

今日、他の言語で存在するtry/catchブロックについて考えていました。しばらくググってみましたが、結果は出ませんでした。私の知る限り、C言語にはtry/catchのようなものはありませんが、それらをシミュレートする方法はありますか?
もちろん、assertやその他のトリックはありますが、try/catchのように、発生した例外もキャッチするものはありません。ありがとうございました。

どのように解決するのですか?

C言語自体は例外をサポートしていませんが、例外をある程度シミュレートするには setjmplongjmp を呼び出します。

static jmp_buf s_jumpBuffer;

void Example() { 
  if (setjmp(s_jumpBuffer)) {
    // The longjmp was executed and returned control here
    printf("Exception happened here\n");
  } else {
    // Normal code execution starts here
    Test();
  }
}

void Test() {
  // Rough equivalent of `throw`
  longjmp(s_jumpBuffer, 42);
}

このウェブサイトには、例外をシミュレートする方法についての素晴らしいチュートリアルがあります。 setjmplongjmp