【问题标题】:Visual Studio warning C4100 and TRACEVisual Studio 警告 C4100 和 TRACE
【发布时间】:2014-04-16 14:25:48
【问题描述】:

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

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

我收到警告“警告 C4100: 'pNMHDR' : unreferenced form parameter”

这没有意义,因为正在使用 pNMHDR。如果我尝试将其注释掉:

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

我收到错误“错误 C2065: 'pNMHDR' : undeclared identifier”

这是有道理的。

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

【问题讨论】:

  • 如果TRACE 仅在调试模式或其他情况下发生,我可以看到它未被使用。
  • 如果是这样的话,我希望当我尝试在版本中构建它并注释掉该变量时它不会抱怨。
  • 尝试添加pNMHDR;(这一行什么都不做)。有关详细信息,请参阅MSDN's article
  • 是的,我知道如何绕过它。我只是好奇是什么原因造成的。

标签: c++ visual-c++


【解决方案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
}

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

【讨论】:

    猜你喜欢
    • 2011-01-31
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多