﻿# PVS\-Studio 7\.30: улучшение работы с Unreal Engine, новые возможности C\+\+ анализатора и многое другое

Вышел новый релиз PVS\-Studio — 7\.30\. Были добавлены пользовательские аннотации, появились новые возможности, различные улучшения работы PVS\-Studio с Unreal Engine, и ещё много других изменений\! Больше подробностей в этой заметке\.

![1116_7_30_ru/image1.png](https://import.viva64.com/docx/blog/1116_7_30_ru/image1.png)




> Загрузить актуальную версию PVS\\\-Studio можно \[здесь\]\(https://pvs\-studio\.ru/ru/pvs\-studio/try\-free/\)\\\.



**Поддержка пользовательских аннотаций в C\+\+ анализаторе**

В C\+\+ анализаторе PVS\-Studio был реализован механизм пользовательских аннотаций — способ разметки типов и функций в формате JSON с целью дать анализатору дополнительную информацию\. 

Этот режим позволяет пометить функцию как опасную для использования, определить собственный тип как _nullable_ и многое другое\. Благодаря этой информации анализатор может находить больше ошибок в коде\.

Больше об этом режиме можно узнать в [документации](https://pvs-studio.ru/ru/docs/manual/6743/)\.

**Улучшение работы с Unreal Engine**

В этом релизе мы постарались улучшить опыт работы при использовании PVS\-Studio с Unreal Engine\. Было внесено множество улучшений, доступных начиная с версии UE 5\.4:

* Реализована многофайловая навигация по предупреждениям, содержащимся в отчёте анализатора PVS\-Studio;
* Исправлена ошибка, приводящая к падению анализа в Unreal Engine 5\.3 при запуске анализа через флаг компиляции [\-StaticAnalyzer\=PVSStudio](https://pvs-studio.ru/ru/docs/manual/0043/#flag)\.
* Поддержка [отключения стандартного вывода](https://pvs-studio.ru/ru/docs/manual/0043/#print_level) Unreal Build Tool в консоль при проведении анализа\. Это может значительно сократить время постобработки отчёта анализатора в проектах с большим количеством предупреждений;
* Анализ автоматически сгенерированных файлов _\.gen\.cpp_ теперь по умолчанию отключён\. Включение анализа таких файлов возможно через [специальную настройку](https://pvs-studio.ru/ru/docs/manual/0043/#include_generated);
* [Добавлена настройка](https://pvs-studio.ru/ru/docs/manual/0043/#analyze_project_only), позволяющая запускать анализатор только на файлах проекта, пропуская модуль ядра Unreal Engine\. Использование этой настройки позволяет значительно ускорить процесс анализа\.

**Новые возможности C\+\+ анализатора**

* Для C и C\+\+ анализатора PVS\-Studio был реализован анализ стандартного типа _bool_, появившегося в стандарте C23 языка С\. Это улучшило поддержку MISRA Essential Type Model, а также диагностик, основанных на MISRA Essential Type Model\.
* Для C\+\+ анализатора PVS\-Studio была улучшена работа со стандартной библиотекой С\+\+, а также добавлена поддержка большего количества интринзиков компилятора, например, _\_\_add\_lvalue\_reference_,  _\_\_add\_pointer_, _\_\_add\_rvalue\_reference_ и других\.
* Была добавлена поддержка [GNU RISC\-V GCC Toolchain](https://github.com/riscv-collab/riscv-gnu-toolchain) для платформы RISC\-V для C\+\+ анализатора PVS\-Studio\. 

**Доработка системы анализа отдельных файлов** 

Была расширена система анализа отдельных файлов с помощью флага [_\-\-sourceFiles_](https://pvs-studio.ru/ru/docs/manual/0035/#source_files) и повторной генерации кэша зависимостей проекта\. 

Теперь данный режим устойчив к ситуациям, когда кэш зависимостей находится в состоянии, не соответствующем структуре проекта\. Такое может случиться, например, в случае использования множественных веток в системе контроля версий\.

Помимо этого, была добавлена возможность запуска с полным обновлением кэша: это позволяет проводить анализ с полностью корректным кэшем зависимостей в случае, если поддержание его в актуальном состоянии было невозможно\. 

Больше об этом режиме можно узнать в [документации](https://pvs-studio.ru/ru/docs/manual/0035/#source_files)\.

**Новые диагностики**

C, С\+\+

* [V1105](https://pvs-studio.ru/ru/docs/warnings/v1105/)\. Suspicious string modification using the 'operator\+\='\. The right operand is implicitly converted to a character type\.
* [V1106](https://pvs-studio.ru/ru/docs/warnings/v1106/)\. Qt\. Class inherited from 'QObject' does not contain a constructor that accepts a pointer to 'QObject'\.
* [V1107](https://pvs-studio.ru/ru/docs/warnings/v1107/)\. Function was declared as accepting unspecified number of parameters\. Consider explicitly specifying the function parameters list\.

C\#

* [V3196](https://pvs-studio.ru/ru/docs/warnings/v3196/)\. Parameter is not utilized inside the method body, but an identifier with a similar name is used inside the same method\.
* [V3197](https://pvs-studio.ru/ru/docs/warnings/v3197/)\. The compared value inside the 'Object\.Equals' override is converted to a different type that does not contain the override\.
* [V3198](https://pvs-studio.ru/ru/docs/warnings/v3198/)\. The variable is assigned the same value that it already holds\.

Java

* [V6110](https://pvs-studio.ru/ru/docs/warnings/v6110/)\. Using an environment variable could be unsafe or unreliable\. Consider using trusted system property instead\.
* [V6111](https://pvs-studio.ru/ru/docs/warnings/v6111/)\. Potentially negative value is used as the size of an array\.
* [V6112](https://pvs-studio.ru/ru/docs/warnings/v6112/) \. Calling the 'getClass' method repeatedly or on the value of the '\.class' literal will always return the instance of the 'Class' type\.

**Анонс нового вебинара**



![1116_7_30_ru/image2.png](https://import.viva64.com/docx/blog/1116_7_30_ru/image2.png)

Недавно мы провели наш новый вебинар на тему "Трудности при интеграции SAST, как с ними справляться", где разобрали основные проблемы, возникающие при интеграции SAST\-инструментов на legacy\-проект\.


> Запись вебинара доступна \[здесь\]\(https://pvs\-studio\.ru/ru/blog/video/10993/\)



Но это была лишь первая часть, на которой мы разобрались с теорией, а значит пора переходить к практике\! 

Мы анонсируем продолжение темы интеграция SAST\-решений в новом вебинаре "Базовые сценарии интеграции SAST\-решения в legacy\-проект на примере PVS\-Studio"\. На нём мы рассмотрим базовый сценарий интеграции PVS\-Studio, постараемся не утонуть в сообщениях анализатора и покажем, как можно интегрировать PVS\-Studio в CI систему\.

Вебинар пройдёт 18 апреля в 14:00 \(МСК\)\. Зарегистрироваться можно [здесь](https://pvs-studio.ru/ru/webinar/)\.

**Статьи**

Для тех, кто пишет на C\+\+:

* [Как не надо проверять размер массива в С\+\+](https://pvs-studio.ru/ru/blog/posts/cpp/1112/)
* [Почему проверять результат вызова malloc c помощью assert плохая идея](https://pvs-studio.ru/ru/blog/posts/cpp/1104/)
* [Проверяем Blender](https://pvs-studio.ru/ru/blog/posts/cpp/1106/)
* [Притча о нулевом указателе для ленивых C программистов](https://pvs-studio.ru/ru/blog/posts/cpp/1107/)

Для тех, кто пишет на C\#:

* [Непобедимый null: копаемся в исходном коде nopCommerce](https://pvs-studio.ru/ru/blog/posts/csharp/1109/)
* [Быстро и легко ищем баги в играх на Unity \(для C\# разработчиков\)](https://pvs-studio.ru/ru/blog/posts/csharp/1111/)

Для тех, кто пишет на Java:

* [Что скрывается в коде игрового движка, написанного на Java?](https://pvs-studio.ru/ru/blog/posts/java/1113/)
* [Применение ООП на практике](https://pvs-studio.ru/ru/blog/posts/java/1103/)

Статьи общей тематики:

* [Статический анализатор подталкивает писать чистый код](https://pvs-studio.ru/ru/blog/posts/cpp/1115/)
* [Настраиваем статический анализ Unreal Engine проекта](https://pvs-studio.ru/ru/blog/posts/1110/)
* [Баги, которые наделали немало шума](https://pvs-studio.ru/ru/blog/posts/1114/)
* [Не исправил, а проработал принятие: как некоторые баги в играх стали фичами](https://pvs-studio.ru/ru/blog/posts/1108/)
* [Как сломать крышку унитаза и стать спортивнее за счёт компании: поездки PVS\-Studio 2023 года](https://pvs-studio.ru/ru/blog/posts/1105/)

**Доклады**

В этом релизе наша команда очень активно участвовала в различных мероприятиях\. Мы проводили доклады, подкасты и даже интервью\! Давайте пройдёмся по самым интересным:

**Как статический анализ дополняет TDD**

Разные методологии предотвращения и поиска ошибок не конкурируют, а дополняют друг друга\. TDD — отличная методология, но и у неё есть недостатки, которые может компенсировать статический анализ кода\. 

Об этом и многом другом вам расскажет сооснователь PVS\-Studio Андрей Карпов в своём докладе:

<https://www.youtube.com/watch?v=HIp7V7rdpXw&t=316s>

**Подкаст linkmeup**

А ещё Андрей Карпов заглянул на подкаст linkmeup, где побеседовал на тему стартапов, форс\-мажоров и IT\-сферы в России\.

Послушать можно тут:

<https://www.youtube.com/watch?v=X3BJTBC3WBE>

**Интервью с Евгением Рыжковым** 

В этом релизе сооснователь PVS\-Studio Евгений Рыжков поучаствовал в интервью с Егором Бугаенко — автором серии книг "Элегантные объекты"\. Обсудили тему статического анализа, ситуацию на рынке и перспективы технологии\. 



Предлагаем послушать:

<https://www.youtube.com/watch?v=hp_hFI1rl9A>




> Хотите проверить свой проект с помощью PVS\\\-Studio? Начните с \[этой страницы\]\(https://pvs\-studio\.ru/ru/pvs\-studio/try\-free/\)\\\.



Если вы хотите получать новости о новых релизах, можете подписаться на рассылку от команды PVS\-Studio по [ссылке](https://pvs-studio.ru/ru/subscribe/)\.