「C ++例外仕様を無視した」警告を取り除く方法
-
01-10-2019 - |
質問
私は最近、他の人によって実装されたDLLを手に入れました。アプリケーションで使用する必要があります。クラスのヘッダーファイルには、機能宣言があります
void func1() throw (CCustomException);
今私がコンパイルするとき、それは警告を受けています、
関数が_declspecではないことを示す場合を除き、C ++例外仕様は無視されます(nothrow)
私は読みました MSDN-ドキュメント しかし、はっきりと理解できませんでした。また、警告が現れているからといって、警告を無効にしたくありません。私はそれを無効にするのではなく、自分が間違っていることを知りたいです。
私は自分の機能を考えました、 いう myfunc()
それにアクセスします func1()
DLLからその例外仕様リストはありません。したがって、私は自分の関数にも対応する例外仕様リストを持っていることを試みました。
void myfunc1() throw (CCustomException);
しかし、私はまだ警告を受けています。その警告は何ですか、そしてそれを取り除く方法は何ですか? Windows XPでQT 4.5を使用しています。
解決
わかりました、それは非回答ですが、私はします 例外仕様を捨てて、二度と使用しないでください.
編集:私はあまりにも速く読みましたが、あなたがクラスを自分で書いていないのを見ませんでした。 MSVCで警告を取り除く最良の方法は、#Pragma警告(プッシュ)に続いて#Pragma警告(無効:XXXX)を使用することです。ここで、XXXXは警告コードです。
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable:xxxx)
#endif
...
#ifdef _MSC_VER
#pragma warning(pop)
#endif
編集:警告を無効にすることは完全に安全です。例外仕様は悪であり、コンパイラはあなたのためにそれらを無効にしていることをあなたに伝えているだけです。たとえそれが標準を破ったとしても。
他のヒント
Preprocessorで遊んでみるかもしれません:
#ifdef _SOME_MSVC_DEFINE
# define _throw(foo)
#else
# define _throw(foo) throw(foo)
#endif
void myfunc1() _throw (CCustomException);
または、Visual Studioでその警告を無効にしてみてください。
私はこれを見つけました リンク, 、私は便利だと感じました。誰かに役立つかもしれない場合は追加されました。