Я вырезал кусок кода из большего (C) проекта. Код содержит много макросов, определенных во многих местах - некоторые из них используются только исходной, большей базой кода и не используются частью кода, который я вырезал.Как быстро определить, какие макросы использует мой код?
Я хочу быстро определить, какие из этих макросов действительно используются, а какие нет (чтобы я мог удалить те, которые не являются). Меня не волнует, принимаются ли коды кода, которые их используют (например, if (1+1 == 3) { MY_MACRO(a,b,c); }
.
Каков наилучший способ сделать это? Лучшее, что я мог придумать, это препроцесс . все с -Е и искать комментарии положения источника, которые упоминают макрос как-то
Примечания:
- Если у вас есть решение, которое также перечисляет функции в использовании, что тоже отлично
- . Я только вызываю определенные функции в код, который я вырезал из проекта. Если ваше решение может ограничить макросы, перечисленные в тех функциях, которые многие из них действительно вызывают из точек входа, это еще лучше.
- Мой код компилируется и запускается (и если вы можете использовать его, вы можете принять вывод gprof)
- Просто комментируя все макросы, хотя, очевидно, возможны, это хлопот; поэтому я хочу решение, которое не требует, чтобы я это делал.
- Код, исключенный препроцессором, не используется; но если у вас есть решение, которое не соблюдает это ограничение, это все равно лучше, чем ничего.
- Я не хочу "dump the list of preprocessor defines" - а скорее определяет , которые используются.
Комментировать все директивы '# define' и перестроить. Проверьте, какие символы жалуются. –
Sidenote: поскольку ваш код компилируется, не забудьте сравнить двоичные файлы до и после удаления макросов. Вы можете случайно удалить макрос, который используется в условной компиляции, и не получать никаких предупреждений или ошибок. – user694733
@Someprogrammerdude: См. Редактирование. Я хочу быть более ленивым. – einpoklum