Директива
A #line
устанавливает настройки компилятора для текущего имени файла и номера строки. Это влияет на символы __FILE__
и __LINE__
, выходные данные, генерируемые ошибкой assert()
, и диагностические сообщения (ошибки и предупреждения). Обычно он используется препроцессором, поэтому сообщения об ошибках и предупреждения могут ссылаться на исходный исходный код, а не на вывод препроцессора (который обычно отбрасывается к тому времени, когда вы видите какие-либо сообщения).
Он также используется другими инструментами, генерирующими исходный код на C, такими как lex / flex и yacc / bison, так что сообщения об ошибках могут ссылаться на входной файл, а не на (временный) сгенерированный код C.
Окончательная ссылка: стандарт C (pdf), раздел 6.10.4.
Линия вида
#line number
устанавливает текущий номер строки. Линия вида
#line number "file-name"
устанавливает номер строки и имя файла. Вы также можете сгенерировать одну из этих двух форм посредством расширения макроса; например:
#define LINE 42
#define FILE "foo.c"
#line LINE FILE