Используйте компилятор / компоновщик для очистки кода на C ++

StackOverflow https://stackoverflow.com/questions/203899

Вопрос

Я использую VS2008 для проекта на C ++.Код довольно старый и прошел через множество рук.Существует несколько иерархий классов, функций, перечислений и так далее, которые больше не используются.

Есть ли способ заставить компилятор / компоновщик перечислять идентификаторы, которые были объявлены или определены, но на которые нигде не ссылаются?

Это было полезно?

Решение

Анализ "всего проекта" PC-Lint (который анализирует несколько файлов вместе) может сделать это.Пожалуйста, не стесняйтесь обращаться ко мне, если вам нужна помощь в его настройке.

Другие советы

VS будет предупреждать об идентификаторах, объявленных в функции и не используемых, возможно, вам потребуется перейти на уровень предупреждений 4, но для глобальных переменных и поиска многих других потенциальных проблем вам не мешало бы попробовать ворсинка или визуальный ворс

Не уверен насчет Visual C ++, но g ++ предупреждает о неиспользуемых переменных.Вы можете попытаться передать свой код через g ++.

PC-Ворсинка сделаю это.Однако не запускайте его со всем одним.Я сделал и получил 1,2 миллиона ошибок, что равнялось ~ 5 на строку.Это было значительно увеличено, потому что почти каждый класс пользовательского интерфейса ссылался на ресурс.h и resource.h перечисляет множество #defines, на которые lint говорит "заменить defines на const int".Для получения хорошей отправной точки прочитайте этот пост в блоге Power of 2.

Для наиболее очевидных неиспользуемых объявлений об этом позаботится высокий уровень предупреждения.

Что касается идентификации неиспользуемых фрагментов кода, deadstripper (не являющийся центром ночной криминальной драмы, но механизм, который отбраковывает неиспользуемый код во время компоновки) поможет вам лишь частично - то, что вам действительно нужно, это инструмент анализа покрытия кода.Их существует множество, к сожалению, все они довольно дорогие.

Также поможет надежный редактор с хорошей разметкой контекста и механизмом построения графиков вызовов.

Со ссылкой на сообщение Грэма:FWIW На самом деле я никогда не видел сообщение "заменить defines на const int" с файлами resource.h - хотя некоторые другие (ранее определенные в том же месте) могут быть проблемой.

В любом случае, если определенное сообщение PC-Lint мешает найти то, что вы ищете, его просто отключить, используя -e в настройках.файл lnt.Также стоит знать о опции -w, которая позволяет вам глобально устанавливать уровень предупреждения (например-w0 + e766 отключает все, кроме сообщения 766).

Для неиспользуемых символов и объявлений вам следует обратить внимание на такие сообщения, как 755 (Информация - глобальный макрос без ссылки), 758 (Информация - глобальное перечисление без ссылки), 769 (Информация - глобальная константа перечисления без ссылки) и 1714 (Информация - функция-член без ссылки).Помните, что они подавляются при анализе одного файла, поэтому вам нужно будет запустить анализ всего проекта, чтобы увидеть их.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top