Я ищу способ поиска заданного термина в коде проекта C/C++, игнорируя любые вхождения в комментариях и строках.Как найти поисковый запрос в исходном коде
Как кодовая база довольно большая, я ищу способ автоматически определить строки кода, соответствующие моему поисковому запросу, так как они нуждаются в ручном осмотре.
Если возможно, я хотел бы выполнить поиск в моей системе linux.
фон
кодовая база в вопросе двигатель обработки сигналов в реальном масштабе времени с большим количеством плагинов 3rd партии. плагины реализованы на разных языках (в основном C, но также C++ и другие, в настоящее время я забочусь только об этих двух), стандарты не были соблюдены.
В нашей базе кода в настоящее время используется встроенный тип float
для чисел с плавающей запятой, и мы хотели бы заменить его на typedef
, что позволило бы использовать двойные. мы хотели бы найти все вхождения float
в фактическом коде (игнорируя использование в комментариях и распечатках).
Что усложняет дело, кроме того, что есть некоторые (хотя и несколько) законное использование float
в полезной нагрузке коды (так что мы действительно ищем способ, чтобы определить все места, которые требуют ручной проверки, а не запускать некоторые автоматический поиск и замена.)
код также содержит статические приведения в стиле C до (float)
, поэтому полагаться на предупреждения компилятора для выявления несоответствий типов часто не является вариантом.
База кода состоит из более чем 3000 файлов (C и C++), аккумулирующих около 750000 строк кода.
код кросс-платформенный (linux, osx, w32 является основным объектом, но также freebsd и т. Д.) И скомпилирован с различными нативными компиляторами (gcc/g ++, clang/clang ++, VisualStudio, ...).
до сих пор ...
до сих пор я использую что-то уродливое, как:
grep "\bfloat\b" | sed -e 's|//.*||' -e 's|"[^"]*"||g' | grep "\bfloat\b"
, но я думаю, что должны быть какой-то лучший способ для поиска только код полезной нагрузки.
Что делает ваш код? Каков его размер? Какой компилятор и платформа? Пожалуйста, ** отредактируйте свой вопрос **, чтобы улучшить его. –
В зависимости от того, насколько велика ваша кодовая база, я могу просто сделать это вручную с помощью emacs. В противном случае я мог бы просто заменить их все и исправить ложные комментарии позже. Хотя я ленив. :) – erip
BTW C/C++ не существует. Данная единица перевода кодируется для C++ (затем выбирает по крайней мере стандарт C++ 11) или для C (выберите C11, если возможно, или, по крайней мере, C99) –