Visual Studio警告C4100和TRACE

时间:2014-04-16 14:25:49

标签: c++ visual-c++

在Visual Studio 2012中,当我尝试编译以下c ++函数时:

void CCustToolBar::OnCustHelp(NMHDR* pNMHDR, LRESULT* /*pResult*/)
{
  TRACE(_T("{ Help ID = %d }\n"), pNMHDR->idFrom);
}

我收到警告“警告C4100:'pNMHDR':未参考的形式参数”

因为正在使用pNMHDR,所以没有意义。如果我试着评论它:

void CCustToolBar::OnCustHelp(NMHDR* /*pNMHDR*/, LRESULT* /*pResult*/)
{
  TRACE(_T("{ Help ID = %d }\n"), pNMHDR->idFrom);
}

我收到错误“错误C2065:'pNMHDR':未声明的标识符”

哪个有意义。

我在这里缺少什么?为什么在使用变量时我会收到警告C4100?

1 个答案:

答案 0 :(得分:1)

TRACE的MSDN页面说:

  

在MFC的调试版本中,此宏将指定的字符串发送到当前应用程序的调试器。在发布版本中,此宏编译为空(根本不生成任何代码)。

因此,您必须在发布模式下进行编译才能收到警告,因为该配置中不存在整个TRACE调用。

如果您将代码更改为:

void CCustToolBar::OnCustHelp(NMHDR* pNMHDR, LRESULT* /*pResult*/)
{
  #ifdef DEBUG
    TRACE(_T("{ Help ID = %d }\n"), pNMHDR->idFrom);
  #else
    UNREFERENCED_PARAMETER(pNMHDR);
  #endif
}

在保持调试的预期功能的同时避免发布模式中的警告将是一种干净的方法。