在以下代码中:
const int ME_ABORT_EXCEPTION = 1;
class CMyException
{
public:
CMyException(int nErrorCode)
: m_nErrorCode(nErrorCode)
{
}
~CMyException()
{
}
int m_nErrorCode;
};
void CTestExceptionDlg::OnBnClickedButton1()
{
// TODO: Add your control notification handler code here
try
{
throw CMyException(ME_ABORT_EXCEPTION);
}
#pragma warning(disable:4101)
catch(CMyException& e)
{
ASSERT(e.m_nErrorCode == ME_ABORT_EXCEPTION);
}
#pragma warning(default:4101)
}
我尝试使用#pragma禁用编译器警告C4101,但它不起作用。编译发行版时,仍然会出现编译器警告。为什么?
警告消息是:
warning C4101: 'e' : unreferenced local variable
最佳答案
如注释中所述,C4101
警告在功能范围内起作用,因此您必须在要应用它的功能之前/之外禁用它:
#pragma warning(disable:4101)
void CTestExceptionDlg::OnBnClickedButton1()
{
// TODO: Add your control notification handler code here
try
{
throw CMyException(ME_ABORT_EXCEPTION);
}
catch (CMyException & e)
{
ASSERT(e.m_nErrorCode == ME_ABORT_EXCEPTION);
}
}
#pragma warning(default:4101)
我已经在VS2010中对此进行了测试,并且可以正常工作。在VS2017和VS2019中,警告也按照原始代码安排中的预期禁用。