問題タブ [setjmp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - Gcc pure/const 関数と longjmp
GCC の__attribute__((pure))or__attribute__((const))で注釈を付ける基準を満たす C 関数があるとします。ただし、特定の入力パラメーターについては、関数が返す代わりに、またはそのようなものをlongjmp実行する場合があります。abortしたがって、通常「純粋な」関数と呼ぶものではありません。それでも、関数の戻り結果をいつキャッシュして再利用できるかを決定するために GCC がこれらの注釈のみを使用している場合は、これらの注釈をそのような関数に適用する可能性があります。返される場合、その関数は副作用のない、その引数の純粋な結果であると見なすことができます (さらに、pureまたはで注釈を付けているかどうかに応じて、おそらくグローバル状態const)。
そのような場合にこれらの注釈を適用できるかどうかについて、経験や知識を持っている人はいますか? (私は、いくつかのセットアップやコンパイルフラグで何がうまくいくかだけでなく、何がうまくいくかに興味があります。)
r - Rcpp で R 警告を安全に生成する方法
Rf_error()スタック上の C++ デストラクタ上に longjmp が含まれるため、Rcpp での呼び出しは避けるべきであることがわかっています。これが、Rcpp コードで (関数のようにthrow Rcpp::exception("...")、または関数を介してstop("...")) C++ 例外をスローする理由です。
ただし、R の警告によって が呼び出される場合もありますRf_error()(この動作はwarnオプションによって異なります)。したがって、への呼び出しRf_warning()も危険です。
デストラクタが呼び出されていないことがわかります (「終了」メッセージはありません)。
C++ デストラクタに適した方法で R 警告を生成する方法は?
c - プログラム内の複数の関数の状態 (コンテキスト) を保存する方法
setjmpandを使用して状態を保存した後、C プログラムで複数の関数を切り替えようとしてlongjmpいますが、コンテキストを保存できる関数は 1 つだけで、他の 2 つの関数では保存できません。それに対する可能な解決策は何でしょうか。コードに必要な変更が必要かどうかを提案してください。のo/p状態でfun1()は に正常に保存されenv1、元に戻すことができますが、 の場合fun2()、fun3()状態は に保存されませenv2んenv3。
サンプル o/p:
コードは次のとおりです。
c - 環境はどのように setjmp によって保存され、longjmp によって復元されますか?
これが私の実験コードです:
私の理解setjmpとlongjmpコードは次のようになります。
私のカウントでは、出力値は 3 ですが、実際には 5 です。なぜでしょうか?
の宣言volatileからも削除しようとしました。bこれはあまり違いはありません。
c++ - longjmp がほどける C/C++ 実装?
longjmp関数が「アンワインド」する主要な C/C++ 実装はあり__attribute__((__cleanup__(...)))ますsetjmpか。私は特に、このプロパティを持つ POSIX 実装の存在 (または非存在) に関心がありますが、一般的な C/C++ も興味深いものです。
報奨金については、既に言及されている Windows とは対照的に、POSIX 準拠または少なくとも POSIX に似たシステムを探しています。
c++ - try ブロックを介して longjmp を実行しても安全ですか?
C++ で書かれた次の lua_CFunction があります。
私の質問は次のとおりです。
- tryブロックで?
- キャッチブロックで?
デストラクタに依存するもの (文字列など) を割り当てないことで、スタックに割り当てられた変数を処理します。それを行う必要がある場合、そのスコープ内のすべての lua 関数が pcall にラップされ、その pcall が失敗すると、私が投稿したこの関数に例外がスローされます。ただ、私は try-catch ブロックに関心があります。
どうもありがとう