Visual Studio 警告 C4100 和 TRACE

Posted

技术标签:

【中文标题】Visual Studio 警告 C4100 和 TRACE【英文标题】:Visual Studio warning C4100 and 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。 是的,我知道如何绕过它。我只是好奇是什么原因造成的。 【参考方案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

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

【讨论】:

以上是关于Visual Studio 警告 C4100 和 TRACE的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio警告IDE0006的解决办法

Visual Studio 2019 中的 GDAL 库头文件错误和警告

使用语句 FileStream 和/或 StreamReader - Visual Studio 2012 警告

使用语句 FileStream 和/或 StreamReader - Visual Studio 2012 警告

Visual Studio Code - 有啥方法可以分别突出显示不同类型的错误和警告?

Visual Studio 中的“将所有警告视为错误,除了...”