Один из вариантов - написать свой собственный токенайзер C (просто: будьте осторожны, чтобы пропустить строки, символьные константы и комментарии), и написать простой парсер, который считает количество открытых {
и находитэкземпляры идентификатора + (
внутри.Однако это не будет на 100% правильно.Недостатком этой опции является громоздкость реализации директив препроцессора (например, #include
и #define
): может быть функция, вызываемая из макроса (например, getchar
), определенного в файле #include
.
Опция, которая работает на 100%, - это компиляция файла .c
в файл сборки, например, gcc -S file.c
, и поиск инструкций call
в file.S
.Аналогичным вариантом является компиляция файла .c
в объектный файл, например, gcc -c file.c
, создание дампа дизассемблирования с помощью objdump -d file.o
и поиск инструкций call
.
Другой вариант - поиск анализатораиспользуя Clang / LLVM.