11

Visual Studio で \W4 警告レベルを使用しており、Windows プログラムを作成しています。

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

これらのパラメーターはすべてアプリケーションで使用されていないため、コンパイル時に警告が表示されます。

これに対処するには2つの方法があることを知っています。

  1. パラメータをコメントしていますHINSTANCE /*hInstance*/...
  2. UNREFERENCED_PARAMETERマクロの使用

    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
      UNREFERENCED_PARAMETER(hInstance);
      UNREFERENCED_PARAMETER(hPrevInstance);
      UNREFERENCED_PARAMETER(lpCmdLine);
      UNREFERENCED_PARAMETER(nCmdShow);
    

どれが正しいですか?どちらを使用する方が安全ですか?マクロの使用に問題はありますか?

4

3 に答える 3

12

パラメータにコメントすることをお勧めします。

マクロ UNREFERENCED_PARAMETER は winnt.h で定義されているため、移植できません。

後でそれを参照すると、マクロの削除を見落とす可能性があります。

編集: C++17 では [[maybe_unused]] 属性を使用できるようになりました。これは、プリプロセッサ マクロに依存するコードに役立ちます。

void foo( [[maybe_unused]] int value )
{
#ifdef USE_VALUE
   useValue(value);
#endif
}

USE_VALUE が未定義の場合でも、警告は表示されなくなりました。

于 2016-06-16T10:34:22.263 に答える