Сколько бы это ни стоило, я просмотрел Предупреждения компилятора Microsoft для VS2017 и искал все предупреждения, относящиеся к "подписанным", "усеченным" (усечению) и "конв" (преобразованию), были выше, чем уровень предупреждения 1. Затем я явно включил эти предупреждения для всех проектов в нашем решении с помощью таблицы. Чтобы включить определенные предупреждения, перейдите в раздел «C / C ++ / Командная строка / Дополнительные параметры» и добавьте их в формате / wL ####, где L - это уровень предупреждения, которому вы хотите назначить, а #### - это уровень. номер предупреждения.
Итак, я пришел к следующему списку:
/ w14365 / w14018 / w14146 / w14245 / w14092 / w14287 / w14308 / w14388 / w14389 / w14757 / w14807 / w14302 / w14305 / w14306 / w14307 / w14308 / w14309 / w14310 / w14311 / w14312 / w14051 / w14055 / w14152 / w14239 / w14223 / w14242 / w14243 / w14244 / w14254 / w14267 / w14333 / w14334 / w14367 / w14686 / w14826
Обратите внимание, что я использовал / w1, потому что наш глобальный уровень предупреждений уже упал до 1 (не судите меня, это наследие). Поэтому некоторые из этих предупреждений уже включены, если для уровня предупреждения по умолчанию установлено значение 3 или выше.
Это привело к появлению более 88000 предупреждений, большинство из которых касалось использования int вместо size_t в коде с использованием STL и преобразований, касающихся типов API Windows, таких как дескрипторы, WPARAM и UINT_PTR, и тому подобное. Я нашел только несколько предупреждений, связанных с фактической арифметикой указателей в сторонней библиотеке, но в контексте они выглядели нормально.
В любом случае, я подумал, что этот список связанных предупреждений может кому-то помочь.
Также используйте инструменты, описанные в этом ответе: https://stackoverflow.com/a/22745579/9635694
Другой вариант - запустить анализ встроенного кода в соответствии с CppCoreGuideLines . Перейдите в «Главное меню / Анализ / Настройка анализа кода / Для решения» и выберите «C ++ Core Check Raw Pointer Rules» для всех проектов, которые вы хотите проанализировать. Затем «Главное меню / Анализ / Выполнить анализ кода / Для решения». Остерегайтесь: изменяет ваши проекты, занимает много времени и может генерировать много предупреждений. Возможно, вы захотите сконцентрироваться на C26481 «Не использовать арифметику указателей» и, возможно, C26485 «Нет затухания между массивами и указателями».