Из чего значение #line
на языке C? Где это использовалось бы?
Он сообщает компилятору, откуда на самом деле взялась следующая строка. Обычно их добавляет только препроцессор C, например, при включении файла он сообщает компилятору (который в основном видит только один поток данных), что мы смотрим на другой файл.
Это может показаться странным, но препроцессор просто вставляет файлы заголовков, в которые вы указываете свои включения, и компилятор работает со всем этим (все файлы заголовков объединяются вместе с вашим исходным кодом), вы можете проверить результат препроцессора stage при использовании gcc с gcc -E myfile.c
.Там вы заметите, что он добавляет директиву #line
всякий раз, когда вы включаете файлы, а также всякий раз, когда он уменьшает количество текста, передаваемого компилятору (например, большое количество комментариев может быть уменьшено до одного #line
, пропуск вперед)
Он также используется другими программами, такими как bison / yacc, чтобы сообщить вам, что проблема (если есть проблема компиляции) связана с вашим файлом правил в конкретная строка, которую в противном случае компилятор не смог бы сделать, поскольку bison / yacc генерирует c-файлы.
Это называется директивой управления строкой препроцессора .
Расширения __ FILE __
и __ LINE __
изменяются, если используется директива #line
.
Это заставляет компилятор просматривать номер строки следующей исходной строки как указанный номер.
Его основное назначение - заставить компилятор выдавать более содержательные сообщения об ошибках.
Дополнительные объяснения и примеры использования можно найти в документации IBM .
" #line позволяет вам изменять номер строки компилятора и (необязательно) вывод имени файла для ошибок и предупреждений. В этом примере показано, как сообщить о двух предупреждениях, связанных с номерами строк. Директива #line 200 устанавливает номер строки равным 200 (хотя по умолчанию - # 7) и до следующего # line, имя файла будет указано как "Special". Директива #line по умолчанию возвращает нумерацию строк по умолчанию, которая учитывает строки, которые были перенумерованы предыдущей директивой. "
Компилятор получает следующую строку. Обычно только препроцессор C добавляет их, например, при включении файла, он сообщает компилятору (который в основном видит только один поток данных), что мы рассматриваем другой файл.
Это может показаться странным, но препроцессор просто вставляет заголовочные файлы туда, куда вы указываете ваши включения, и компилятор работает над всем (все заголовочные файлы, связанные вместе с вашим исходным кодом), вы можете проверить результат этапа препроцессора, если использовать gcc с gcc -E myfile.c
. Там вы заметите, что он добавляет директиву # line
всякий раз, когда вы включаете файлы, а также когда он уменьшает количество текста, подаваемого в компилятор (например, большое количество комментариев можно сократить до одной директивы # line
, пропустив вперед)
Он также используется другими программами, такими как bison/yacc, чтобы сказать вам, что проблема (если есть проблема компиляции) связан с вашим файлом правил в определенной строке, что компилятор в противном случае был бы не в состоянии сделать, так как bison/yacc генерирует c-файлы.
-121--1566701-Это ключевое слово pragma :
" # line позволяет изменить номер строки компилятора и (необязательно) вывод имени файла для ошибок и предупреждений. В этом примере показано, как сообщать о двух предупреждениях, связанных с номерами строк. Директива # line 200 заставляет номер строки быть 200 (хотя по умолчанию - # 7), и до следующей директивы # line имя файла будет отображаться как "Special". Директива # line default возвращает нумерацию строк к нумерации по умолчанию, которая подсчитывает строки, перенумерованные предыдущей директивой ".
-121--1566703-В основном используется для указания имен файлов и номеров строк исходного файла, из которого был создан файл C (будь то заголовок или реализация). При этом компилятор выдает диагностику, которая указывает на исходный файл, а не на созданный файл.
Препроцессоры также используют это, чтобы намекать на включенные заголовки в предварительно обработанном файле, который их расширил.
Это позволяет вам изменить видимый номер строки файла.
Единственное, что я могу придумать, это сделать номера строк разумными после длинной серии многострочных макросов.
использование:
#line 42