使用UNREFERENCED_PARAMETER宏

Lpp*_*Edd 8 c++ parameters macros compiler-warnings visual-studio

我在Visual Studio上使用\ W4警告级别,而我正在编写Windows程序.

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
Run Code Online (Sandbox Code Playgroud)

我的应用程序中没有使用所有这些参数,因此我在编译时收到警告.

我知道有两种方法可以解决这个问题:

  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);
    
    Run Code Online (Sandbox Code Playgroud)

哪一个是正确的?哪一个更安全?使用宏有什么问题吗?

Joa*_*him 7

我更愿意评论这些参数.

宏UNREFERENCED_PARAMETER在winnt.h中定义,因此不可移植.

如果以后你引用它,你可能会忽略删除宏.

编辑:使用C++ 17,您现在可以使用[[maybe_unused]]属性.这对于取决于预处理器宏的代码很有用:

void foo( [[maybe_unused]] int value )
{
#ifdef USE_VALUE
   useValue(value);
#endif
}
Run Code Online (Sandbox Code Playgroud)

即使未定义USE_VALUE,也不会出现警告.

  • 即使它没有为其他平台定义,也可以很容易地为它们定义宏:`#define UNREFERENCED_PARAMETER(P)(P)` (3认同)