Как насчет встраивания какого-либо уникального слова (например, MARKER
в следующем) в указанный макрос и подсчета количества раз, которое слово появляется?
Например, предполагая код a.c
, подобный следующему:
#define A f() MARKER
#define B A; A;
B
Счетчик появления маркера будет получен с помощью следующих команд:
gcc -E a.c | sed -r 's/[^A-Za-z0-9_]+/\xa/g' | grep MARKER | wc -l
После измерения необходимо удалить MARKER
в макросе или#define
d, чтобы очистить как:
#define MARKER
РЕДАКТИРОВАТЬ: Если ваша система сборки make
, вам может потребоваться добавить новое правило, подобное следующему, в ваши текущие make-файлыкак сделать предварительно обработанный файл:
SRCS = a.c
preprocessed: $(SRCS:.c=.i)
%.i: %.c
$(CC) -E $(CPPFLAGS) -o $@ $<
Если все настройки были выполнены правильно, с помощью команд make preprocessed
и find -type f -name '*.i'
или аналогичных, будут получены все предварительно обработанные файлы.Возможно, это нелегкая работа.Если вы столкнулись с трудностями, я бы предложил опубликовать это как новый вопрос.