質問

私は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 ++標準ライブラリの特定の部分は、例外をスローするように指定されています。あなたがそれらを無効にした場合は、「未定義の動作」の濁った海域に航行している。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top