Информация о имени файла и строке
Изменяет номер строки исходного кода и, необязательно, текущее имя файла в препроцессоре.
Содержание |
[править] Синтаксис
#line номер-строки
|
(1) | ||||||||
#line номер-строки " имя-файла"
|
(2) | ||||||||
[править] Объяснение
1) Изменяет текущий номер строки препроцессора на номер-строки. Расширения макроса __LINE__ за пределами этой точки будут расширяться до номер-строки плюс количество фактических строк исходного кода, встреченных до него.
2) Также изменяет имя текущего файла препроцессора на имя-файла. Расширение макроса __FILE__ с этого момента приведёт к выдаче имени-файла.
Любые маркеры предварительной обработки (макроконстанты или выражения) разрешены в качестве аргументов для #line до тех пор, пока они расширяются до допустимого десятичного целого числа, и необязательно следующей за ним допустимой строки символов.
номер-строки должен быть последовательностью, состоящей как минимум из одной десятичной цифры (в противном случае программа некорректна) и всегда интерпретируется как десятичное число (даже если оно начинается с 0
).
Если номер-строки равен 0
или больше, чем 32767
(до C++11)2147483647
(начиная с C++11), поведение не определено.
[править] Примечание
Эта директива используется некоторыми инструментами автоматической генерации кода, которые создают исходные файлы C++ из файла, написанного на другом языке. В этом случае директивы #line могут быть вставлены в сгенерированный файл C++, ссылаясь на номера строк и имя файла первоначального (редактируемого человеком) исходного файла.
[править] Пример
#include <cassert> #define FNAME "test.cc" int main() { #line 777 FNAME assert(2+2 == 5); }
Возможный вывод:
test: test.cc:777: int main(): Assertion '2+2 == 5' failed.
[править] Ссылки
- C++23 стандарт (ISO/IEC 14882:2023):
- 15.7 Управление строкой [cpp.line]
- C++20 стандарт (ISO/IEC 14882:2020):
- 15.7 Управление строкой [cpp.line]
- C++17 стандарт (ISO/IEC 14882:2017):
- 19.4 Управление строкой [cpp.line]
- C++14 стандарт (ISO/IEC 14882:2014):
- 16.4 Управление строкой [cpp.line]
- C++11 стандарт (ISO/IEC 14882:2011):
- 16.4 Управление строкой [cpp.line]
- C++98 стандарт (ISO/IEC 14882:1998):
- 16.4 Управление строкой [cpp.line]
[править] Смотрите также
(C++20) |
класс, предоставляющий информацию об исходном коде, такую как имена файлов, номера строк и имена функций (класс) |
Документация C по Информация о имени файла и строке
|