Andrey2008
@Andrey2008
DevRel в PVS-Studio

Си++, поиск явных приведений типов: a = (int)b;?

Вопрос по пользе диагностики.

Один человек предложил реализовать в анализаторе PVS-Studio поиск всех явных приведений типов в стиле Си. Т.е. выявлять конструкции вида:


int *x = (int *)y;
float a = float(b);
float c = (float)(d);


Цель — заменить ве эти приведения на более безопасные варианты — reinterpret_cast/static_cast/const_cast. В процессе подобного рефакторинга вполне могут быть выявлены некоторые дефекты.


Конечно, это не выявление настоящих ошибок. И если эта диагностика будет реализоана, то будет находится в разделе [Customer's Specific Requests] и по умолчанию отключена.

Однако даже в пользе такого варианта, я не уверен. Решил задать вопрос. Нужно кому-то еще искать все явные приведения типов в стиле Си? Захочет кто-то заняться подобным рефакторингом своего кода?
  • Вопрос задан
  • 2876 просмотров
Пригласить эксперта
Ответы на вопрос 8
@Next_Alex
Lint это делает и несколько раз это было полезно.
Ответ написан
Комментировать
Vass
@Vass
C++/Qt Developer
Однозначно, нужно. C-style приведения типов — это зло с которым нужно бороться.
Ответ написан
Комментировать
Tujh
@Tujh
СтОит.
Ответ написан
Комментировать
Andrey2008
@Andrey2008 Автор вопроса
DevRel в PVS-Studio
Ясно. Интерес есть. Значит будет. Спасибо.
Ответ написан
Комментировать
@Volfram
В gcc есть включаемый warning на этот счёт.
Ответ написан
Комментировать
@CaptainTrunky
Весьма полезная возможность. Неоднократно и свой код переписывал, и унаследованный, с целью перевести все на с++ вариант.
Ответ написан
Комментировать
Riateche
@Riateche
Вы писали, что не хотите дублировать проверки компилятора. У g++ есть ключ -Wold-style-cast, который включает предупреждения о таких приведениях типа. Из этого можно заключить, что поддержку этой опции реализовывать не следует. Я думаю, вам вместо этого следует заняться поиском более трудноотлавливаемых ошибок.
Ответ написан
Комментировать
Andrey2008
@Andrey2008 Автор вопроса
DevRel в PVS-Studio
Реализовано в PVS-Studio 4.38. www.viva64.com/ru/d/0201/
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы