微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CppCheck 忽略宏定义中变量的使用,如何更改?

如何解决CppCheck 忽略宏定义中变量的使用,如何更改?

在我的代码上运行 CppCheck 的输出显示以下错误Variable 'strFullPath' is assigned a value that is never used. [unreadVariable]

下面的方法是讨论中的方法

void DebugLogging::GetDebugLogSettings(const std::string& sAppProfile)
{
    std::string strFullPath = ROOT_KEY_NAME + sAppProfile;
    
#ifdef _WIN32
    std::string strFullPathLocal = strFullPath + "Local";
#else
    std::string sAppProfileLocal = sAppProfile + "Local";
    std::ifstream settingsLocalfile(sAppProfileLocal.c_str());
#endif
}

CppCheck 声明从未使用 strFullPath 的值。但是,它是在宏内部使用的。

如何设置 CppCheck 使其能够找到变量的用法

解决方法

在宏中移动它。

void DebugLogging::GetDebugLogSettings(const std::string& sAppProfile)
{
#ifdef _WIN32
    std::string strFullPath = ROOT_KEY_NAME + sAppProfile;
    std::string strFullPathLocal = strFullPath + "Local";
#else
    std::string sAppProfileLocal = sAppProfile + "Local";
    std::ifstream settingsLocalfile(sAppProfileLocal.c_str());
#endif
}
,

我是一名 Cppcheck 开发人员。 Damian-Teodor Beles 建议的修复方法很好。

我只是想添加一些哲学。在我看来,这个特别的警告是不幸的。我认为这是误报,作为人类,我可以看到该值已被使用。

这个误报可以在 Cppcheck 中修复。我们已经修复了一些相关的误报,但显然不是这个。将来可能会在 Cppcheck 中修复它,但我不能保证什么时候会发生。

总的来说,我认为移动变量是一个不错的解决方案。但也许有时您不想移动变量。然后你现在可以内联抑制警告。当我们在 Cppcheck 中修复此问题时,您将收到一条警告,指出从未使用内联抑制...然后您可以删除注释。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。