B.6 Нумерация строк

Предыдущая  Содержание  Следующая V*D*V

Препроцессор должен вывести штампы #line так, чтобы компилятор C мог связать свои сообщения об ошибках с оригинальными исходными файлами. К сожалению, ooc обрабатывает несколько входных файлов, чтобы создать некоторые выходные строки, то есть всё выглядит так, что нет явной связи между файлами описаний классов, исходными файлами и выходной строкой. Кроме того, если файлы отчёта отформатированы, чтобы быть понятными, они имеют тенденцию генерировать много пустых строк, которые в свою очередь могли бы привести к большому числу штампов #line.

Мы идём на компромисс и генерируем штамп #line только тогда, когда отчёт запрашивает его. Штамп может основываться на классе, методе или имени компонента структуры, или он может записать текущее имя входного файла и номер строки. Текущая позиция входного файла доступна как FILENAME и FNR из модуля io.awk. Другие позиции были записаны parse.awk. Функция genLineStamp() в report.awk собирает требуемую информацию и создаёт штамп #line.

Возможна оптимизация через подсчёт выходных строк — вся информация доступна в report.awk. Однако опыт показывает, что это значительно замедляет ooc. Несколько дополнительных штампов #line или переводов строк не сильно удлиняют компиляцию.

Полностью эта опция доступна только если установить глобальную переменную lines в ненулевое значение. Это находится под контролем опции -l, передаваемой командному скрипту ooc.

 

Предыдущая  Содержание  Следующая