2013-07-01 3 views
0

Как я могу изменить ССАГПЗ препроцессор (cc1.exe) выводится в следующем формате:Как изменить формат вывода препроцессора GCC?

#line 1 "path/to/file.c" 

В настоящее время я получаю этот формат:

# 1 "path/to/file.c" 

Он также заявляет here, что выход есть #line директива, но я получаю другой формат вывода. Есть ли параметр, который мне нужно использовать?

+0

'cc1' - это фронт C, а не только препроцессор (я думаю, что обработка интегрирована в интерфейс). Обычно вывод препроцессора подается непосредственно на остальную часть компилятора. Зачем вам это нужно менять? –

+0

Говоря сам за себя, я хочу сделать это, потому что хочу предварительно обработать вход для 'yacc'; но 'yacc' понимает' 'директивы' line', а не '# ' директивы. –

ответ

0

Простой ответ, просто напишите сценарий, чтобы обработать файл, сгенерированный препроцессором gcc, чтобы установить ваше требование.

  1. Написать сценарий по себе, которые принимают вывод препроцессора НКУ в качестве входных данных, и заменить # 1 с #line 1, названный как myscript.
  2. Напишите сценарий для автоматического вызова предварительных процессов GCC, а затем вызовите свой сценарий myscript.
  3. Назовите приведенный выше сценарий на шаге 2 - gcc, поместите его в свой местный PATH.
+0

На самом деле, я искал что-то более простое, как добавление параметра. –

0

Согласно GCC docs,

имя исходного файла и номер строки, информация передается по линии вида

# linenum filename flags 

Эти называются linemarkers. Они вставляются по мере необходимости в выходной файл (но никогда не находятся в строковой или символьной константе). Они означают, что следующая строка возникла в файле filename по строке linenum.

Источник вы ссылки говорят о препроцессора ввода, а не на выходе. (GCC также принимает вышеуказанный формат в качестве входных данных, но он не совместим.)

Смежные вопросы