c++ - 如何抑制从 CommCtrl.h 中提取的 C26454 代码分析?

标签 c++ winapi visual-studio-2019

我已经实现了一个虚拟 ListView 控件。为此,我需要处理 LVN_GETDISPINFO通知。我已经做到了,就像我过去一直做的那样:

    case WM_NOTIFY: {
        auto const& nmhdr { *reinterpret_cast<NMHDR const*>(lParam) };
        if (nmhdr.idFrom == IDC_MY_LIST_VIEW && nmhdr.code == LVN_GETDISPINFOW)
        {
            // ...

唯一改变的是我现在使用的是 Visual Studio 2019。并且文档运行状况指示器不喜欢 LVN_GETDISPINFOW 的定义方式。这是一个预处理器宏 (LVN_FIRST-77)LVN_FIRST(0U-100U)。这会触发 C26454 :

Arithmetic overflow: '%operator%' operation produces a negative unsigned result at compile time

非常感谢警告,只是当它来 self 无法控制的头文件时。我可以通过将受影响的代码包装在 pragma warning(disable:26454) 指令中来禁用警告(正确地恢复之前的状态)。这是一个宏,但是,我需要在我的代码中执行此操作,任何地方我都使用这些常量中的任何一个。

当然可以。但这很乏味。有没有一种方法可以针对 CommCtrl.h 中定义的所有常量抑制此警告,而不影响对其他代码的检查?

最佳答案

以下代码使用 VS2019 为我解决了这个问题。你可以试试看:

case WM_NOTIFY: {
    auto const& nmhdr{ *reinterpret_cast<NMHDR const*>(lParam) };
    switch (nmhdr.code)
    {
    case LVN_GETDISPINFOW:
        if (nmhdr.idFrom == IDC_MY_LIST_VIEW)
        {
        }
        break;
    default:
        break;
    }
}

引用“LVN_GETDISPINFO notification code”。

关于c++ - 如何抑制从 CommCtrl.h 中提取的 C26454 代码分析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59910612/

相关文章:

c++ - 如何阻止选定的应用程序访问互联网(C++、Win32)

visual-studio - 为什么我的 Visual Studio 2019 Community 版本的开始菜单下没有“远程计算机”选项

c# - 无法正确单步执行静态构造函数中的代码(VS2019、C#、.NET 4.7.2)

git - Visual Studio 2019 中的 SSH Bitbucket 克隆不起作用

c++ - 为什么这会调用默认构造函数?

c++ - 动态选择要在 std::map 中使用的比较仿函数

在 C 程序中调用默认的 Windows 可执行文件

c++ - 如何在 Windows 中以编程方式从调用堆栈帧中读取函数参数?

c++ - Qt、枚举和元对象编译器

c - mac 的 win32 等价物是什么?