Что означает #line в языке Си? - PullRequest
22 голосов
/ 07 февраля 2010

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

Ответы [ 6 ]

32 голосов
/ 07 февраля 2010

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

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

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

15 голосов
/ 07 февраля 2010

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

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

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

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

1 голос
/ 07 февраля 2010

Это ключевое слово pragma :

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

0 голосов
/ 28 августа 2010

# - символ повреждения строки для процессора c и c ++

0 голосов
/ 07 февраля 2010

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

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

0 голосов
/ 07 февраля 2010

Позволяет изменить кажущийся номер строки файла.

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

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

#line 42
...