Как бы то ни было, я прошел через Документы с предупреждениями компилятора Microsoft для VS2017 и проверил все предупреждения, относящиеся к" signed "," trunc "(усечение) и" conv "(преобразование), которые были выше, чем уровень предупреждения 1. Затем я явно включил эти предупреждения для всех проектов в нашем решении через propsheet. Чтобы включить определенные предупреждения, перейдите в «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 и преобразований, касающихся типов Windows API, таких как дескрипторы, WPARAM, UINT_PTR и т. Д. Я нашел только несколько предупреждений, связанных с фактической арифметикой указателей в сторонней библиотеке, но в контексте они выглядели нормально.
В любом случае, я подумал, что этот список связанных предупреждений может кому-то помочь.
Также используйте инструменты, описанные в этом ответе: https://stackoverflow.com/a/22745579/9635694
Другой вариант - запустить встроенный анализ кода в соответствии с CppCoreGuideLines. Перейдите в «Главное меню / Анализировать / Настроить анализ кода / Для решения» и выберите «C ++ Core Check Raw Pointer Rules» для всех проектов, которые вы хотите проанализировать. Затем «Главное меню / Анализировать / Выполнить анализ кода / Для решения». Осторожно: изменяет ваши проекты, требует много времени для сборки и может генерировать множество предупреждений. Возможно, вы захотите сконцентрироваться на C26481 «Не использовать арифметику указателей» и, возможно, на C26485 «Нет распада между массивами и указателями».
person
Simpleton
schedule
06.03.2019