Как использовать gcc для раскрытия макросов только в не C / C ++ контексте? - PullRequest
0 голосов
/ 23 декабря 2010

Как я могу использовать gcc для расширения макросов в файлах, содержащих (например) код python / php / perl?

Наличие файла, содержащего:

#define foo very important stuff
#define feast Christmas

I should take care of some foo for feast.

Я пытался использовать:

$ gcc -x c++ -E - < text.txt > output.txt

но он отображает это:

$ cat output.txt
# 1 "<stdin>"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "<stdin>"



I should take care of some very important stuff for Christmas.

Как избежать, чтобы gcc добавил эти комментарии и (если возможно) дополнительные символы новой строки?

Ответы [ 2 ]

1 голос
/ 23 декабря 2010

Вы должны знать об этом предупреждении из онлайн-документации для препроцессора GNU C

Препроцессор C предназначен для использования только с C, C ++ и Objective-С исходный код.В прошлом он использовался как обычный текстовый процессор.Он захлебнется вводом, который не подчиняется лексическим правилам Си.Например, апострофы будут интерпретироваться как начало символьных констант и приводят к ошибкам.Кроме того, вы не можете полагаться на него, сохраняя характеристики ввода, которые не имеют значения для языков семейства C.Если Makefile предварительно обработан, все жесткие вкладки будут удалены и Makefile не будет работать.

Строки '#' в выводе могут быть наименьшей из ваших проблем.

Вы могли бы лучше использовать другой инструмент, например, m4.

0 голосов
/ 23 декабря 2010

Я не знаю, есть ли конкретная опция для gcc.

Вы можете выполнить постобработку с помощью grep

$ gcc -x c++ -E - < text.txt | grep -v '^#' > output.txt
...