Комментарии 4
Если отладка это устранение ошибок, то программирование это их создание...
0
А как анализатор узнаёт что возвращаемое значение является "важным"? В нем прописаны такие функции для стандартной библиотеки?
В таком случае в случае использования нестандартной пользовательской функции clamp предупреждения бы не было?
+1
Да, в анализаторе вручную прописаны тысячи аннотаций для функций из стандартной библиотеки, WinAPI и таких распространённых библиотек как Qt, Unreal Engine (про это даже статья отдельная была), Zlib и так далее. Разметка достаточно разносторонняя и касается не только возвращаемых значений, но и аргументов и их взаимосвязи. Это позволяет находить разнообразные аномальное использование функций.
Более того, если функция не проаннотирована, то анализатор сам пытается вывести на основе её тела некоторые критерии и затем использовать их в точках вызова функции. Другими словами, он пытается самостоятельно проаннотировать функции. К сожалению, получается это обычно только для относительно простых функций. Плюс тело функции должно быть доступно анализатору. Хорошо, если она в той-же единице компиляции. А если в другой, тот ту всё ещё сложнее и в игру вступает межмодульный анализ.
Дополнительно см. статью "Технологии статического анализа кода PVS-Studio".
Более того, если функция не проаннотирована, то анализатор сам пытается вывести на основе её тела некоторые критерии и затем использовать их в точках вызова функции. Другими словами, он пытается самостоятельно проаннотировать функции. К сожалению, получается это обычно только для относительно простых функций. Плюс тело функции должно быть доступно анализатору. Хорошо, если она в той-же единице компиляции. А если в другой, тот ту всё ещё сложнее и в игру вступает межмодульный анализ.
Дополнительно см. статью "Технологии статического анализа кода PVS-Studio".
+6
А ведь будь на clamp повешен nodiscard и проблемы бы скорее всего не было
+9
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Как PVS-Studio защищает от поспешных правок кода, пример N4