警告C4800:'int':在MFC中强制值为bool'true'或'false'(性能警告)(VC ++)

时间:2010-12-14 12:51:12

标签: visual-c++ mfc

我收到此警告“警告C4800:'int':强制值为bool'true'或'false'(性能警告)”在下面的代码行中:

if (g_objConfigurationDetails.bAutoScan !=  m_objScanNASBtn.GetCheck())
        {
            g_objConfigurationDetails.bAutoScan = m_objScanNASBtn.GetCheck();
}

两条线都发出相同的警告。 其中bAutoScan = bool m_objScanNASBtn = CButton

3 个答案:

答案 0 :(得分:0)

原因是MFC的GetCheck没有返回bool:

  

使用BS_AUTOCHECKBOX,BS_AUTORADIOBUTTON,BS_AUTO3STATE,BS_CHECKBOX,BS_RADIOBUTTON或BS_3STATE样式创建的按钮控件的返回值是以下值之一:
   - BST_UNCHECKED - 未选中按钮状态    - BST_CHECKED - 检查按钮状态    - BST_INDETERMINATE - 按钮状态是不确定的(仅当按钮具有BS_3STATE或BS_AUTO3STATE样式时才适用。)

所以你可能想要

if (g_objConfigurationDetails.bAutoScan
      != (m_objScanNASBtn.GetCheck() == BST_CHECKED))

bool bNASBtnChecked = (m_objScanNASBtn.GetCheck() == BST_CHECKED);
if (g_objConfigurationDetails.bAutoScan != bNASBtnChecked)
{
    g_objConfigurationDetails.bAutoScan = bNASBtnChecked;
}

答案 1 :(得分:0)

以下内容:

g_objConfigurationDetails.bAutoScan = m_objScanNASBtn.GetCheck();

应该是

g_objConfigurationDetails.bAutoScan = m_objScanNASBtn.GetCheck() == BST_CHECKED;

问题是GetCheck()没有返回bool所以你必须写一个比较 - 至少以!= 0的形式。

答案 2 :(得分:0)

GetCheck返回一个整数,你将它与布尔值进行比较。尝试将GetCheckBST_UNCHECKEDBST_CHECKED进行比较,具体取决于您的布尔值,或者将其强制转换为布尔值,因为2个值在数字上匹配true和false。