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

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

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

我知道有两种处理方法:
  • 注释参数HINSTANCE /*hInstance*/ ...
  • 使用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,您现在可以使用[[maybe_unused]]属性。这对于取决于预处理程序宏的代码很有用:

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

    现在,即使未定义USE_VALUE,也不会发出警告。

    关于c++ - 使用UNREFERENCED_PARAMETER宏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17192224/

    10-11 02:02