我已经实现了一个虚拟 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;
}
}
关于c++ - 如何抑制从 CommCtrl.h 中提取的 C26454 代码分析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59910612/