1. ホーム
  2. c++

[解決済み] UNREFERENCED_PARAMETER マクロの使用

2022-02-10 11:19:22

質問

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);
    
    

どちらが正しいのでしょうか?どれを使うのが安全なのか?マクロを使用した場合の問題点はありますか?

解決方法は?

パラメータをコメントするのが良いですね。

マクロ UNREFERENCED_PARAMETER は winnt.h で定義されているため、ポータブルではありません。

また、後で参照する場合、マクロを削除することを見落とす可能性があります。

編集:C++17では、[[may_unused]]属性が使えるようになりました。これはプリプロセッサ・マクロに依存するコードに便利です。

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

USE_VALUE が未定義であっても警告が出ないようにしました。