Каждый в конечном итоге просит такой инструмент, по крайней мере, один раз в своей карьере; что-то, что будет сканировать исходный код C и распечатывать список имен функций / переменных или перекрестную ссылку на вызовы функций между различными модулями.
Чтобы адекватно делать то, что вы просите, вам нужно написать то, что в основном является интерфейсом компилятора C; никакое количество магии регулярных выражений не даст вам того, что вы хотите. Захватите yacc
способную версию грамматики языка C и уничтожьте анализатор, используя lex
и yacc
(или flex
и bison
, или ваши инструменты по вашему выбору). Однако, когда вы соответствуете объявлению функции, вместо генерации машинных инструкций вы просто распечатаете их (или сохраните в базе данных, или что-то в этом роде).
Запустите интересующий заголовок через существующий препроцессор C (например, gcc -E
), чтобы удалить комментарии и выполнить любое расширение макроса, а затем передать полученный файл в свой анализатор.
EDIT
И теперь, когда я действительно прочитал справочную страницу gcc
, есть опция -aux-info
, которая будет записывать объявления прототипов всех функций, объявленных / определенных в модуле перевода, включая те, которые объявлены во включенных заголовочных файлах. Более того, выходные данные хорошо отформатированы и регулярны, и их должно быть достаточно легко разобрать.
Итак, урок выучен: проверьте документацию вашего компилятора и не обращайте внимания на старые пукающие слова, как я, которые все еще думают с точки зрения инструментов 80-х годов.