Что означает #line на языке C?
-
19-09-2019 - |
Вопрос
В чем смысл этого #line
в C язык?Где бы это было использовано?
Решение
Он сообщает компилятору, откуда на самом деле взялась следующая строка.Обычно это добавляет только препроцессор C, например, при включении файла он сообщает компилятору (который в основном видит только один поток данных), что мы смотрим на другой файл.
Это может показаться странным, но препроцессор просто вставляет файлы заголовков, в которые вы указываете свои включения, и компилятор работает со всем этим (все файлы заголовков объединены вместе с вашим исходным кодом), вы можете проверить результат этапа препроцессора, если используете gcc с gcc -E myfile.c
.Там вы заметите, что это добавляет #line
директива всякий раз, когда вы включаете файлы, а также всякий раз, когда это уменьшает объем текста, передаваемого компилятору (например, большое количество комментариев может быть сокращено до одного #line
директива, забегая вперед)
Он также используется другими программами, такими как bison / yacc, чтобы сообщить вам, что проблема (если есть проблема с компиляцией) связана с вашим файлом правил в определенной строке, чего компилятор в противном случае не смог бы сделать, поскольку bison / yacc генерирует c-файлы.
Другие советы
Это называется директива управления линией препроцессора.
Расширения обоих __FILE__
и __LINE__
изменяются, если #line
используется директива.Это заставляет компилятор просматривать номер строки следующей исходной строки как указанный номер.
Его основное применение заключается в том, чтобы заставить компилятор предоставлять более значимые сообщения об ошибках.
Вы можете найти более подробное объяснение и пример использования в Документация IBM.
Это - прагма ключевое слово:
"#линия позволяет изменять номер строки компилятора и (необязательно) имя файла, выводимого для ошибок и предупреждений.В этом примере показано, как сообщить о двух предупреждениях, связанных с номерами строк.Директива #line 200 заставляет указывать номер строки равным 200 (хотя по умолчанию используется #7), и до следующей директивы #line имя файла будет сообщаться как "Специальное".Директива #line default возвращает нумерацию строк к нумерации по умолчанию, которая подсчитывает строки, которые были перенумерованы предыдущей директивой."
Это позволяет вам изменить видимый номер строки файла.
Единственное применение, которое я могу придумать для этого, - привести номера строк в норму после длинной серии многострочных макросов.
использование является:
#line 42
В основном он используется для указания имен файлов и номеров строк исходного файла, из которого был создан файл C (будь то заголовок или реализация).Учитывая это, компилятор будет выдавать диагностические данные, которые указывают на исходный файл, а не на сгенерированный файл.
Препроцессоры также используют это, чтобы указать на включенные заголовки в предварительно обработанный файл, в котором они расширены.
# является строкой, вводящей символ в процессор c и c ++