プログラミング、リファクタリング、そしてすべてにおける究極の疑問: No. 22

同カテゴリーの次の記事

プログラミング、リファクタリング、そしてすべてにおける究極の疑問: No. 23

この記事は、インテル® デベロッパー・ゾーンに公開されている「The Ultimate Question of Programming, Refactoring, and Everything」の日本語参考訳です。


22. #pragma warning(default:X) を使用しない

TortoiseGIT プロジェクトから抜粋した以下のコードについて考えてみます。このエラーは、次の PVS-Studio 診断によって検出されます。

V665 Possibly, the usage of ‘#pragma warning(default: X)’ is incorrect in this context. The ‘#pragma warning(push/pop)’ should be used instead. (V665 このコンテキストの ‘#pragma warning(default: X)’ の使用法が正しくない可能性があります。代わりに、’#pragma warning(push/pop)’ を使用すべきです。)

#pragma warning(disable:4996)
LONG result = regKey.QueryValue(buf, _T(""), &buf_size);
#pragma warning(default:4996)

説明

多くのプログラマーは、”pragma warning(disable: X)” ディレクティブで無効にした警告は、”pragma warning(default : X)” ディレクティブを使用した後に有効になると仮定しますが、それは間違いです。’pragma warning(default : X)’ ディレクティブは、’X’ 警告をデフォルトの状態に設定します。これは、有効にするのとは異なります。

/Wall オプションを使用してファイルをコンパイルする場合、C4061 警告は生成されなければなりません。”#pragma warning(default : 4061)” ディレクティブを追加しても、この警告はデフォルトで無効になるため表示されません。

正しいコード

#pragma warning(push)
#pragma warning(disable:4996)
LONG result = regKey.QueryValue(buf, _T(""), &buf_size);
#pragma warning(pop)

推奨事項

警告の以前の状態を返す適切な方法は、”#pragma warning(push[ ,n ])” ディレクティブと “#pragma warning(pop)” ディレクティブを使用します。これらのディレクティブの説明は、Visual C++* ドキュメントの「Pragma Directives. Warnings」 (英語) を参照してください。

ライブラリー開発者は、特に V665 警告に注意すべきです。不注意な警告のカスタマイズは、ライブラリー・ユーザー側で非常に多くの問題を引き起こす可能性があります。

このトピックについては、「Visual C++* でこの警告を抑止する」 (英語) を参照してください。

コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

関連記事

  • Parallel Universe マガジンParallel Universe マガジン Parallel Universe へようこそ。 米国インテル社が四半期に一度オンラインで公開しているオンラインマガジンです。インテルの技術者によるテクノロジーの解説や、最新ツールの紹介など、並列化に関する記事を毎号掲載しています。第1号からのバックナンバーを PDF 形式で用意しました、ぜひご覧ください。 12 […]
  • 比較関数の罠比較関数の罠 この記事は、インテル® デベロッパー・ゾーンに公開されている「The Evil within the Comparison Functions」の日本語参考訳です。 この記事の PDF […]
  • 並列プログラミングにおけるロックの効率的な使用並列プログラミングにおけるロックの効率的な使用 この記事は、インテル® ソフトウェア・ネットワークに掲載されている「Using Locks Effectively in Parallel Programming […]
  • インテル® Inspector XE 2013 を使用してアプリケーションのメモリー使用量の増加を検出する方法インテル® Inspector XE 2013 を使用してアプリケーションのメモリー使用量の増加を検出する方法 この記事は、インテル® ソフトウェア・サイトに掲載されている「How to detect application memory growth using Intel® Inspector XE 2013」の日本語参考訳です。 背景 インテル® Inspector XE 2013 […]
  • インテル Parallel Universe 26 号日本語版の公開インテル Parallel Universe 26 号日本語版の公開 インテル Parallel Universe マガジンの最新号が公開されました。この号では、インテル® Xeon Phi™ プロセッサー向けのコードの現代化について説明します。また、インテル® Parallel Studio XE 2017 […]