Как запустить препроцессор GCC, чтобы получить код после расширения таких макросов, как #define? - PullRequest
23 голосов
/ 12 октября 2010

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

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

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

Ответы [ 3 ]

25 голосов
/ 12 октября 2010

Да. Используйте опцию -E:

gcc -E foo.c
14 голосов
/ 12 октября 2010

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

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

4 голосов
/ 13 октября 2010

Звучит так, как вы хотите unifdef , а не препроцессор GCC.

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