我可以抑制特定的C6031警告吗? CString的::加载链

时间:2016-12-19 09:32:36

标签: mfc code-analysis visual-studio-2017

我已阅读此link,因此对警告所指的内容有基本的了解。

当我在我的MFC项目上运行代码分析时,我得到了一些警告:

d:\my programs\2017\meetschedassist\meeting schedule assistant\synchexclusionsdlg.cpp(295): warning C6031: Return value ignored: 'ATL::CStringT<wchar_t,StrTraitMFC<wchar_t,ATL::ChTraitsCRT<wchar_t> > >::LoadStringW'.
d:\my programs\2017\meetschedassist\meeting schedule assistant\synchexclusionsdlg.cpp(297): warning C6031: Return value ignored: 'ATL::CStringT<wchar_t,StrTraitMFC<wchar_t,ATL::ChTraitsCRT<wchar_t> > >::LoadStringW'.

因此,例如,它抱怨此代码段:

if (iImage == IMG_CHECKED)
    strText.LoadString(IDS_STR_YES);
else
    strText.LoadString(IDS_STR_NO);

我已阅读LoadString的帮助文档,具有讽刺意味的是他们的示例是这样做的:

CAtlString s;
s.LoadString(IDS_APP_TITLE);   

他们也不测试返回值。 :)

现在,我意识到我可以尝试修复我的代码并测试返回值 - 这将花费我很长时间!我意识到我可以下意识地忽略这些警告。

但在分析过程中是否有可能压制这个特定的警告(关于 C6031 CString::LoadString)?

更新

我尝试将此添加到我的stdafx.h(根据评论):

#pragma warning( disable : 6031)

当然有效。但我希望只为CString::LoadString压制6031错误。

1 个答案:

答案 0 :(得分:2)

您的代码忽略函数的返回值,该函数返回BOOL。警告是正确的。您可以关闭该警告,但这样做(如您所发现的)会完全关闭编译单元的警告。

您可以使用#pragma warning(suppress)关闭单次调用警告的警告。

但我认为聪明的做法是编写一个加载字符串的包装函数。该包装器检查函数的返回值,并在函数返回FALSE时作出相应的反应,因为找不到该字符串。您认为合适的完全取决于您:也许您记录错误,也许您弹出一个消息框,也许您使用默认字符串。