[解決済み] C言語でのTry catchステートメント
2022-03-03 22:13:44
質問
今日、他の言語で存在するtry/catchブロックについて考えていました。しばらくググってみましたが、結果は出ませんでした。私の知る限り、C言語にはtry/catchのようなものはありませんが、それらをシミュレートする方法はありますか?
もちろん、assertやその他のトリックはありますが、try/catchのように、発生した例外もキャッチするものはありません。ありがとうございました。
どのように解決するのですか?
C言語自体は例外をサポートしていませんが、例外をある程度シミュレートするには
setjmp
と
longjmp
を呼び出します。
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);
}
このウェブサイトには、例外をシミュレートする方法についての素晴らしいチュートリアルがあります。
setjmp
と
longjmp
関連
-
[解決済み】valgrind - サイズ8のブロックが割り当てられた後、アドレス ---- が0バイトになる。
-
[解決済み] Connect: ソケット以外でのソケット操作
-
[解決済み] (.text+0x20): `main'への未定義の参照と関数への未定義の参照
-
[解決済み】エラー:イニシャライザー要素がロード時に計算可能でない
-
[解決済み】cudamalloc()の使用。) なぜダブルポインタなのか?
-
[解決済み】ヒープ割り当てで初期化されていない値が作成された
-
[解決済み】MPI通信でMPI_Bcastを使用する場合
-
[解決済み】宣言指定子で2つ以上のデータ型がある場合のエラー【非公開
-
[解決済み】Errno: 11, Resource Temporarily Unavailable(リソースが一時的に利用できない
-
[解決済み] マクロで無意味なdo-while文やif-else文を使っているのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Valgrind が "Invalid write of size 8" で文句を言う。
-
[解決済み】式は、単純なポインタ演算を使用して完全なオブジェクト型へのポインタでなければなりません【重複】。
-
[解決済み】エラー:'for'ループの初期宣言はC99モードでしかできない【重複
-
[解決済み】cudamalloc()の使用。) なぜダブルポインタなのか?
-
[解決済み】C言語で入力が整数型かどうかチェックする
-
[解決済み】0LLや0x0ULの意味は何ですか?
-
[解決済み】なぜか。"エラー: 配列型を持つ式への代入"
-
[解決済み】Makefile:1: ***セパレータがありません。停止します。
-
[解決済み】.axfファイルとは何ですか?
-
[解決済み] Arduinoのtry/catchブロック