Строки кода как функция определений препроцессора

Проект, над которым я работаю (на C), имеет множество разделов кода, которые можно включить или исключить в зависимости от конфигурации во время компиляции с использованием директив препроцессора.

Мне интересно оценить, сколько строк кода добавляются к моему основному проекту или вычитаются из него в разных конфигурациях. Другими словами, я хотел бы где-нибудь написать несколько строк #define и #undef и понять, как это влияет на количество LOC.

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

Есть ли существующий инструмент, который будет делать то, что я ищу, или какой-нибудь простой способ сделать это самостоятельно? Исключение комментариев и пустых строк тоже было бы неплохо.


person Ziv    schedule 28.04.2011    source источник


Ответы (2)


Пропустите его через препроцессор. Например, в gcc используйте опцию -E, я полагаю, чтобы получить именно тот результат, который вам нужен.

  -E  Stop after the preprocessing stage; do not run the compiler proper.
      The output is in the form of preprocessed source code, which is sent
      to the standard output.
person Amadan    schedule 28.04.2011
comment
Прохладный! Я не знал, что могу это сделать. Как говорит Джейсон, могут быть какие-то странные добавления препроцессора, но для меня это было бы хорошим простым началом. - person Ziv; 28.04.2011

Вы можете получить выходные данные препроцессора от своего компилятора, но это может иметь другие нежелательные побочные эффекты, такие как расширение сложных многострочных макросов и добавление к счетчику LOC неожиданным для вас образом.

Почему бы не написать свой собственный простой препроцессор и не использовать собственные директивы include/exclude? Вы можете сделать их тривиально простыми для анализа, а затем передать свой код через этот препроцессор, прежде чем отправлять его на полнофункциональный счетчик LOC, такой как CLOC.

person Jason LeBrun    schedule 28.04.2011