私はSTLでの例外を無効にすることはできますか?
-
23-08-2019 - |
質問
私はMSVCでコンパイル私のC ++ aplication、中に例外を無効にしたいです。私はオプションがNOにC ++の例外を有効に切り替えHVEが、私はしたくないオプション/ Ehscを、使用することを私に言って警告を取得します。
<時間>私は自分のコード内でのtry / catchブロックを持っていないが、私はSTLを使用しています。 Iを= 0マクロ定義_HAS_EXCEPTIONSを使用すると、STLでの例外を無効にする必要があることを発見したが、私はまだのような警告を取得しています:
<時間> warning C4275: non dll-interface class 'stdext::exception' used as base for dll-interface class 'std::bad_typeid'
see declaration of 'stdext::exception'
see declaration of 'std::bad_typeid'
の例外をオフにする方法をどのような方法がSTLありますか?
注:私のコードでは、私はあまりにも、RTTIオプションをオフにしたいです。 RTTIがオンまたはオフである場合、私は同じ警告に関係なく取得します。
正しい解決策はありません
他のヒント
マイクロソフトのSTLは、例外の不活性化をサポートしています。
MSVCの場合= 0マクロ_HAS_EXCEPTIONSを定義するSTLを使用すると、LIBCMT.LIB / libcmtd.lib(/ MTまたは/ MTdにコンパイラオプション)を使用してアプリケーションをリンクする場合の例外を無効にします。
_STATIC_CPPLIB - あなたはMSVCRT.LIB / MSVCRTD.LIB(/ MDまたは/ MDDコンパイラオプション)にリンクする場合は、あなたはもう一つのマクロを定義する必要があります。この場合、いずれかの任意のSTLコードを含める前に次の行を追加します。
#define _HAS_EXCEPTIONS 0
#define _STATIC_CPPLIB
やコンパイラオプションに以下を追加します:
-D_HAS_EXCEPTIONS=0 -D_STATIC_CPPLIB
あなたのプロジェクトの設定にC ++の例外を無効にする必要があることに注意してください。
あなたは例外非アクティブ化をサポートしてSTLを使用する必要があります。これは、一般的に、コンパイル時のマクロ定義です。
私が間違っていない限り、、版STLPortは_STLP_USE_EXCEPTIONS = 0と_STLP_NO_EXCEPTIONSでこれを提供しています。私はプログラムは、これらの設定でどのように動作するかわかりません。 ;)
私は、MSのSTLでいくつかの隠しフラグはそこにもあると思います。
EASTLが無効の例外を除いて、箱から出てきます:
のhttp://www.open- std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.htmlする
id型は、実行時型識別を行うことです。あなたにもRTTIをオフにしてみてくださいすることができます。
しかし、C ++標準ライブラリの特定の部分は、例外をスローするように指定されています。あなたがそれらを無効にした場合は、「未定義の動作」の濁った海域に航行している。