2010-02-07 4 views

ответ

26

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

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

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

+3

+1 для бизонов/yacc мелочей. – maxywb

14

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

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

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

Дополнительное объяснение и пример использования можно найти в IBM's documentation.

0

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

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

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

#line 42 
1

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

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

+2

Каким образом '# line' является прагмой? – bk1e

+0

@ bk1e: хотя он синтаксически отличается, он ведет себя так же, как и «# прагма», поскольку он [также] является компилятором, а не только директивой препроцессора. Препроцессор не удаляет его, а компилятор интерпретирует его для изменения какого-либо поведения (в данном случае, сообщения об ошибках, '__LINE__' и' __FILE__'). –

0

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

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

-3

# - строка, обозначающая символ процессору c и C++

+4

Что такое ранение? –

 Смежные вопросы

  • Нет связанных вопросов^_^