Перечисление всех #defines в программе на C - PullRequest
2 голосов
/ 14 октября 2010

Возможно ли получить список #defines (как времени компиляции, так и определенного в исходном коде), используемого в программе на Си во время выполнения. Потому что у меня есть проект с большим количеством исходных файлов на языке C.

Есть ли вариант времени компиляции, чтобы получить это?

Ответы [ 3 ]

5 голосов
/ 14 октября 2010

GNU cpp использует различные опции -d для вывода макроса и определения данных. Смотрите их справочные страницы для более подробной информации.

3 голосов
/ 14 октября 2010

для gcc, вы можете использовать один из следующих:

-dCHARS CHARS - это последовательность из одного или нескольких из следующих символов, и перед ней не должно быть пробела.Другие символы интерпретируются самим компилятором или резервируются для будущих версий GCC, и поэтому игнорируются.Если вы указываете символы, поведение которых конфликтует, результат не определен.

M' Instead of the normal output, generate a list of # define 'директивы для всех макросов, определенных во время выполнения препроцессора, включая предопределенные макросы.Это дает вам возможность узнать, что предопределено в вашей версии препроцессора.Предполагая, что у вас нет файла foo.h, команда touch foo.h;cpp -dM foo.h

покажет все предопределенные макросы.

Если вы используете -dM без опции -E, -dM интерпретируется как синоним для -fdump-rtl-mach,Смотрите Параметры отладки.

D' Like M 'за исключением двух моментов: он не включает предопределенные макросы и выводит оба типа #define' directives and the result of preprocessing. Both kinds of output go to the standard output file. N' Как `D ', но выдает только имена макросов, а не их расширения.

I' Output # include директивы в дополнение к результату предварительной обработки.

U' Like D 'за исключением того, что выводятся только макросы, которые расширены или чья определенность проверена в директивах препроцессора;вывод задерживается до использования или проверки макроса;и директивы #undef также выводятся для протестированных макросов, но в то время не определены.

2 голосов
/ 03 февраля 2011

В gcc вы, вероятно, захотите команду:

gcc -dM -E [your_source_files]

Я знаю, что это неявно в ответах выше, но, возможно, кому-то нужен (как и я) быстрый рецепт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...