#pragma警告不适用于catch语句

时间:2019-12-19 08:08:49

标签: c++ warnings pragma

在以下代码中:

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

1 个答案:

答案 0 :(得分:2)

如注释中所述,C4101警告在功能范围中起作用,因此您必须在要应用它的功能之前/之外禁用该功能:< / p>

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