В чем смысл #line
в C Язык? Где он будет использоваться?В чем смысл строки #line на языке C?
ответ
Он сообщает компилятору, где следующая строка на самом деле пришли из. Обычно это только препроцессор C, который добавляет их, например, при включении файла, он сообщает компилятору (который в основном видит только один поток данных), который мы просматриваем в другом файле.
Это может показаться странным, но препроцессор просто вставляет файлы заголовков, в которых вы указываете свои включенные, а компилятор работает над всем (все файлы заголовков, объединенные вместе с вашим исходным кодом), вы можете проверить результат препроцессорный этап при использовании gcc с gcc -E myfile.c
. Там вы заметите, что добавляет директиву #line
всякий раз, когда вы включаете файлы, а также всякий раз, когда это уменьшает количество текста, передаваемого компилятору (например, большое количество комментариев может быть уменьшено до одной директивы #line
, пропуская вперед)
Он также используется другими программами, такими как bison/yacc, чтобы сообщить вам, что проблема (если есть проблема с компиляцией) связана с вашим файлом правил в определенной строке, которую компилятор иначе не смог бы сделать, поскольку bison/yacc генерирует c-файлы.
Он называется директивой управления препроцессором .
Расширения как __FILE__
, так и __LINE__
изменены, если используется директива #line
. Это заставляет компилятор просматривать номер строки следующей строки источника в указанном номере.
Главное его использование заключается в том, чтобы сделать компилятор более значимыми сообщениями об ошибках.
Дополнительное объяснение и пример использования можно найти в IBM's documentation.
Позволяет изменять видимый номер строки файла.
Единственное, что я могу придумать для этого, это сделать номера строк разумными после длинной серии многострочных макросов.
использование является:
#line 42
Это pragma ключевое слово:.
"#line позволяет изменять номер строки компилятора и (необязательно) имя выходного файла на наличие ошибок и предупреждений В этом примере показано, как сообщить о двух предупреждений, связанных с линией номера. Директива #line 200 заставляет номер строки быть 200 (хотя по умолчанию это №7), и до следующей директивы #line имя файла будет указано как «Специальное». Директива по умолчанию #line возвращает нумерацию строк его нумерация по умолчанию, которая подсчитывает строки, перенумерованные предыдущей директивой ».
Каким образом '# line' является прагмой? – bk1e
@ bk1e: хотя он синтаксически отличается, он ведет себя так же, как и «# прагма», поскольку он [также] является компилятором, а не только директивой препроцессора. Препроцессор не удаляет его, а компилятор интерпретирует его для изменения какого-либо поведения (в данном случае, сообщения об ошибках, '__LINE__' и' __FILE__'). –
В основном он используется для предоставления имен файлов и номеров строк исходного файла, из которого был создан файл C (будь то заголовок или реализация). Учитывая это, компилятор будет испускать диагностику, которая намекает на исходный файл, а не на сгенерированный файл.
Препроцессоры также используют это, чтобы намекнуть на включенные заголовки в предварительно обработанном файле, который имеет эти расширения.
# - строка, обозначающая символ процессору c и C++
Что такое ранение? –
+1 для бизонов/yacc мелочей. – maxywb