Visual Studio警告C4100和跟踪 在VisualStudio 2012中,当我尝试编译以下C++函数: void CCustToolBar::OnCustHelp(NMHDR* pNMHDR, LRESULT* /*pResult*/) { TRACE(_T("{ Help ID = %d }\n"), pNMHDR->idFrom); }
我得到警告“warning C4100:'pNMHDR':未引用的形式参数” 这没有意义,因为pNMHDR正在使用。如果我试着把它评论出来:Visual Studio警告C4100和跟踪 在VisualStudio 2012中,当我尝试编译以下C++函数: void CCustToolBar::OnCustHelp(NMHDR* pNMHDR, LRESULT* /*pResult*/) { TRACE(_T("{ Help ID = %d }\n"), pNMHDR->idFrom); },c++,visual-c++,C++,Visual C++,我得到警告“warning C4100:'pNMHDR':未引用的形式参数” 这没有意义,因为pNMHDR正在使用。如果我试着把它评论出来: void CCustToolBar::OnCustHelp(NMHDR* /*pNMHDR*/, LRESULT* /*pResult*/) { TRACE(_T("{ Help ID = %d }\n"), pNMHDR->idFrom); } 我得到错误“error C2065:'pNMHDR':未声明的标识符” 这是有道理的 我错过了什么
void CCustToolBar::OnCustHelp(NMHDR* /*pNMHDR*/, LRESULT* /*pResult*/)
{
TRACE(_T("{ Help ID = %d }\n"), pNMHDR->idFrom);
}
我得到错误“error C2065:'pNMHDR':未声明的标识符”
这是有道理的
我错过了什么?为什么在使用变量时会收到警告C4100?的MSDN页面显示:
在MFC的调试版本中,此宏将指定的字符串发送到当前应用程序的调试器。在发布版本中,此宏编译为空(根本不生成代码)
因此,您必须在发布模式下编译以获得警告,因为整个跟踪
调用将不存在于该配置中
如果将代码更改为:
void CCustToolBar::OnCustHelp(NMHDR* pNMHDR, LRESULT* /*pResult*/)
{
#ifdef DEBUG
TRACE(_T("{ Help ID = %d }\n"), pNMHDR->idFrom);
#else
UNREFERENCED_PARAMETER(pNMHDR);
#endif
}
这将是一种干净的方法,可以避免在发布模式下出现警告,同时保留用于调试的预期功能。如果
TRACE
仅在调试模式或其他模式下发生,我可以看到它未被使用。如果是这样,我希望当我试图在版本中用注释掉的变量构建它时,它不会抱怨代码>(此行不起任何作用)。更多细节请参见。是的,我知道如何避开它。我只是好奇是什么导致了这一切。