Список C Константы/Макросы

Существует ли способ сделать GNU C Препроцессором, cpp (или некоторый другой инструмент) перечисляют все доступные макросы и их значения в данной точке в файле C?

Я ищу определенные для системы макросы при портировании программы, это уже - здравый смысл Unix и загрузка редкого набора системных файлов Unix.

Просто удивление, если существует более легкий путь, чем отправление на охоту для определений.

9
задан Brian Tompsett - 汤莱恩 22 February 2016 в 22:54
поделиться

4 ответа

Я не знаю об определенном месте в файле, но использую:

$ touch emptyfile
$ cpp -dM emptyfile

Сбрасывает все дефолтные. То же самое для файла C с некоторыми строками #include и #define , включая их все. Я думаю, вы могли бы усечь свой файл до нужного вам места, а затем сделать то же самое?

Из справочной страницы :

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

M
Вместо обычного вывода сгенерируйте список директив #define для всех макросов, определенных во время выполнения препроцессора, включая предопределенные макросы. Это дает вам возможность узнать, что предопределено в вашей версии препроцессора. Предполагая, что у вас нет файла foo.h, команда

  touch foo.h; cpp -dM foo.h 
 

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

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

D
Подобно M , за исключением двух аспектов: он не включает предопределенные макросы и выводит как директивы #define , так и результат предварительной обработки. Оба вида вывода попадают в стандартный выходной файл.

N
Подобно D, но выдает только имена макросов, а не их расширения.

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

15
ответ дан 4 December 2019 в 13:01
поделиться

Почему бы не обратиться к разделу Предопределенные макросы ? Вам это нужно для создания проекта или чего-то подобного?

0
ответ дан 4 December 2019 в 13:01
поделиться

В gcc вы можете использовать опцию «-dD», чтобы выгрузить все определения макросов в стандартный вывод.

1
ответ дан 4 December 2019 в 13:01
поделиться

Чтобы перечислить «их значения в заданной точке в файле C» с использованием макросов, есть два, которые могут продемонстрировать заданную точку в файле C, особенно при компиляции, и могут быть сочтены полезными для отслеживания точки отказа. ..просмотрите этот пример кода в файле с именем foo.c :

if (!(ptr = malloc(20))){
    fprintf(stderr, "Whoops! Malloc Failed in %s at line %d\n", __FILE__, __LINE__);
}

Если эта логика кода использовалась несколько раз в этом файле, и вызов malloc дал сбой, вы получит следующий вывод:

Whoops! Malloc Failed in foo.c at line 25

Номер строки будет отличаться в зависимости от того, где в источнике используется эта логика. Этот пример служит для того, чтобы показать, где можно использовать этот макрос ...

0
ответ дан 4 December 2019 в 13:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: