我已阅读此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错误。
答案 0 :(得分:2)
您的代码忽略函数的返回值,该函数返回BOOL
。警告是正确的。您可以关闭该警告,但这样做(如您所发现的)会完全关闭编译单元的警告。
您可以使用#pragma warning(suppress)关闭单次调用警告的警告。
但我认为聪明的做法是编写一个加载字符串的包装函数。该包装器检查函数的返回值,并在函数返回FALSE时作出相应的反应,因为找不到该字符串。您认为合适的完全取决于您:也许您记录错误,也许您弹出一个消息框,也许您使用默认字符串。