在以下代码中:

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中,警告也按照原始代码安排中的预期禁用。

09-13 04:04