7

最近、他の人が実装した dll を入手しました。アプリケーションで使用する必要があります。クラスのヘッダーファイルには、関数宣言があります

void func1() throw (CCustomException);

コンパイルすると、警告が表示されます。

関数が _declspec(nothrow) ではないことを示す場合を除き、C++ 例外仕様は無視されます

MSDN - ドキュメントを読みましたが、明確に理解できませんでした。また、表示されているという理由だけで警告を無効にしたくありません。無効にするのではなく、何が間違っているのかを知りたいです。

私は自分の関数を考えまし myfunc()た.dllからアクセスするとfunc1()、その例外仕様リストがありません。したがって、関数にも対応する例外仕様リストを用意してみました。

void myfunc1() throw (CCustomException);

しかし、私はまだ警告を受けています。その警告とは何ですか?また、それを取り除く方法は? Windows XP で Qt 4.5 を使用しています。

4

2 に答える 2

11

わかりました、それは非回答ですが、例外仕様を破棄し、二度と使用しません.

EDIT:私はあまりにも速く読んだので、クラスを自分で書いていないことに気づきませんでした. msvc で警告を取り除く最善の方法は、#pragma warning(push) の後に #pragma warning(disable:xxxx) を使用することです。ここで、xxxx は警告コードです。

#ifdef _MSC_VER 
#pragma warning(push)
#pragma warning(disable:xxxx)
#endif 

...

#ifdef _MSC_VER 
#pragma warning(pop)
#endif

編集:警告を無効にしても完全に安全です。例外仕様は悪であり、コンパイラはそれらを無効にしていると言っているだけです。たとえそれが基準を破ったとしても。

于 2010-06-29T13:09:57.713 に答える
0

プリプロセッサで遊んでみてください:

#ifdef _SOME_MSVC_DEFINE
#  define _throw(foo)
#else
#  define _throw(foo) throw(foo)
#endif

void myfunc1() _throw (CCustomException);

または、Visual Studio でその警告を無効にしてみてください。

于 2010-06-29T13:13:34.603 に答える