2

こんにちは、また失礼します

Intelの「IA-32アーキテクチャでのマルチプロセッサトポロジの検出」を読んでいます。私は例を書き直していました。しかし、私はこの文を__tryと__exceptのコードで読みました。

MSDN Microsoft Webページにいくつかの情報が見つかりましたが、gccコンパイラ/リンカーを使用しています

__tryと__exceptはgccの有効な文ですか?__tryと__exceptは*nux環境でのポータブルセンテンスですか?Cでの例外処理のために__tryおよび__except文よりも優れたモードが存在しますか?

前もって感謝します。

4

4 に答える 4

3

一般的な考慮事項

MSDNによると、__try__exceptは C 言語の拡張機能です。そのため、そのままでは持ち運びできません。

setjmp一部のアプリケーションでは、マクロと/構造を使用して動作を模倣できる場合がありますlongjmp。一般に、これは当てはまりません。特に、MSDN は次のように述べています。

式は本体の__exceptスコープで実行されます。__try

これは、マクロだけでは実現できません。

あなたの質問

__trygccで__except有効な文は何ですか?

いいえ、そうではありません。gcc はこの Microsoft の方言である C をサポートしていないからです。

__try と __except は *nux 環境で移植可能な文ですか?

いいえ、そうではありませんが、*nix でも同様の例外処理を行う方法があります。

C で例外を処理するための __try および __except 文よりも優れたモードは存在しますか?

例外処理を行う際に C++ を使用する強い理由があります。デストラクタを持つ C++ スコープ オブジェクトは、標準の C リソース管理よりも、例外が存在する場合にはるかに堅牢です。tryそのため、何らかの方法でCを提供する実装がありますがcatch、私はそれらに反対し、代わりに C++ を支持することをお勧めします。C++ での例外処理は標準の一部であるため、標準に準拠したすべてのコンパイラでサポートされており、移植性の問題はありません。

于 2012-09-20T13:24:08.503 に答える
1

C標準には例外処理のサポートはありません。C++はそうします。setjmpを使用したtry/catchの実装は多数あります。

于 2012-09-20T13:08:39.033 に答える
1

__try と __except は (Microsoft が述べているように) C/C++ 言語の拡張機能です。そのため、gcc では移植できません。純粋な C (C++ コンパイラを使用しない) が例外処理に似たものを持つことができるように、Microsoft がこれらを入れたと思います。* S * 構造 * E * 例外 * H * アンドリング (SEH) はかなり低レベルであり、私が覚えている限りでは、Microsoft 独自の C++ 例外処理でさえ内部で SEH を使用しています。

私の全体的な見解は、__try と __except が表示されている場合は、それを try と catch に置き換えて、C++ コンパイラでコンパイルするだけです。もちろん、__except に渡されるフィルターを置き換える必要がありますが、それは大したことではありません。

于 2012-09-20T13:26:26.273 に答える
0

次のリンクを参照してください。

gcc.gnu.org/onlinedocs/libstdc++/manual/using_exceptions.html

www.autohotkey.com/community/viewtopic.php?t=31475

于 2012-09-20T13:13:14.473 に答える