Как запустить препроцессор GCC для получения кода после того, как макросы, такие как #define, будут расширены?

Есть ли опция, чтобы препроцессор GCC мог генерировать исходный код C и отфильтровывать нерелевантный исходный код?

Например, файл .c имеет переключатель #define для определения для многих разных платформ. Меня интересует только одна платформа, и я хочу, чтобы препроцессор C отфильтровывал несвязанный код.

Поддерживает ли это GCC?

Ответ 1

Да. Используйте параметр -E:

gcc -E foo.c

Ответ 2

Пока параметр -E выполняет всю предварительную обработку, он также производит очень "сырой" вывод, который может быть не таким, каким вы хотите (в зависимости от того, что вы хотите).

Если вам нужно отладить расширение макроса, которое не делает то, что вы ожидаете, E - хороший способ. Если вы просто хотите отфильтровать "неактивный код", но оставите оставшийся код в более или менее оригинальной форме, вы можете посмотреть ответы на следующий вопрос "Переполнение стека":

Ответ 3

Похоже, вы хотите unifdef, а не препроцессор GCC.