Я реализовал виртуальный элемент управления List View. Для этого мне нужно обработать уведомление 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 :
Arithmeti c переполнение: операция «% operator%» выдает отрицательный результат без знака во время компиляции
Предупреждение очень ценится, но только когда он выходит из заголовочных файлов, я не контролирую их. Я могу отключить предупреждение, поместив уязвимый код в директиву pragma warning(disable:26454)
(правильно восстановив предыдущее состояние сразу после него). Это макрос, однако мне нужно сделать это в моем коде, везде Я использую любую из этих констант.
Это работает, конечно. Но это утомительно. Есть ли способ подавить это предупреждение для всех констант, определенных в CommCtrl.h
, не влияя на проверку другого кода?