Каково значение #line на языке C?

Из чего значение #line на языке C? Где это использовалось бы?

23
задан Brian Tompsett - 汤莱恩 21 February 2016 в 18:04
поделиться

6 ответов

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

Это может показаться странным, но препроцессор просто вставляет файлы заголовков, в которые вы указываете свои включения, и компилятор работает со всем этим (все файлы заголовков объединяются вместе с вашим исходным кодом), вы можете проверить результат препроцессора stage при использовании gcc с gcc -E myfile.c .Там вы заметите, что он добавляет директиву #line всякий раз, когда вы включаете файлы, а также всякий раз, когда он уменьшает количество текста, передаваемого компилятору (например, большое количество комментариев может быть уменьшено до одного #line , пропуск вперед)

Он также используется другими программами, такими как bison / yacc, чтобы сообщить вам, что проблема (если есть проблема компиляции) связана с вашим файлом правил в конкретная строка, которую в противном случае компилятор не смог бы сделать, поскольку bison / yacc генерирует c-файлы.

33
ответ дан 29 November 2019 в 01:51
поделиться

Это называется директивой управления строкой препроцессора .

Расширения __ FILE __ и __ LINE __ изменяются, если используется директива #line . Это заставляет компилятор просматривать номер строки следующей исходной строки как указанный номер.

Его основное назначение - заставить компилятор выдавать более содержательные сообщения об ошибках.

Дополнительные объяснения и примеры использования можно найти в документации IBM .

15
ответ дан 29 November 2019 в 01:51
поделиться

Это прагма ключевое слово:

" #line позволяет вам изменять номер строки компилятора и (необязательно) вывод имени файла для ошибок и предупреждений. В этом примере показано, как сообщить о двух предупреждениях, связанных с номерами строк. Директива #line 200 устанавливает номер строки равным 200 (хотя по умолчанию - # 7) и до следующего # line, имя файла будет указано как "Special". Директива #line по умолчанию возвращает нумерацию строк по умолчанию, которая учитывает строки, которые были перенумерованы предыдущей директивой. "

1
ответ дан 29 November 2019 в 01:51
поделиться

Компилятор получает следующую строку. Обычно только препроцессор 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 (будь то заголовок или реализация). При этом компилятор выдает диагностику, которая указывает на исходный файл, а не на созданный файл.

Препроцессоры также используют это, чтобы намекать на включенные заголовки в предварительно обработанном файле, который их расширил.

0
ответ дан 29 November 2019 в 01:51
поделиться

Это позволяет вам изменить видимый номер строки файла.

Единственное, что я могу придумать, это сделать номера строк разумными после длинной серии многострочных макросов.

использование:

#line 42
0
ответ дан 29 November 2019 в 01:51
поделиться

# — это строка, входящая в процессор c и c++

-5
ответ дан 29 November 2019 в 01:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: