我可以抑制特定的 C6031 警告吗?CString::LoadString

And*_*kle 5 mfc code-analysis visual-studio-2017

我已阅读此链接,因此对警告的含义有基本的了解。

当我对 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'.
Run Code Online (Sandbox Code Playgroud)

例如,它抱怨这个代码片段:

if (iImage == IMG_CHECKED)
    strText.LoadString(IDS_STR_YES);
else
    strText.LoadString(IDS_STR_NO);
Run Code Online (Sandbox Code Playgroud)

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

CAtlString s;
s.LoadString(IDS_APP_TITLE);   
Run Code Online (Sandbox Code Playgroud)

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

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

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


更新

我尝试将其添加到我的stdafx.h(基于评论):

#pragma warning( disable : 6031)
Run Code Online (Sandbox Code Playgroud)

这当然有效。但我希望只是抑制 6031 错误CString::LoadString

Mik*_*keB 4

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

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

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