Информация о файле и строке
Изменяет номер строки исходного кода и, необязательно, текущее имя файла в препроцессоре.
Синтаксис
#line lineno | (1) | |
#line lineno "filename" | (2) |
Объяснение
1) Изменяет текущий номер строки препроцессора на lineno. Расширения макроса __LINE__ после этого момента будут расширяться до lineno плюс количество фактических строк исходного кода, встреченных с этого момента.
2) Также изменяет текущее имя файла препроцессора на filename. Расширения макроса __FILE__ с этого момента будут генерировать filename.
Любые токены препроцессинга (макросы или выражения) разрешены в качестве аргументов к #line, если они расширяются до допустимого десятичного целого числа, необязательно после допустимой строковой константы.
lineno должно быть последовательностью из как минимум одной десятичной цифры (в противном случае программа некорректна) и всегда интерпретируется как десятичное (даже если оно начинается с 0).
Если lineno равно 0 или больше, чем 32767(до C++11)2147483647(с C++11), поведение не определено.
Примечания
Эта директива используется некоторыми автоматическими средствами генерации кода, которые создают файлы исходного кода C++ из файла, написанного на другом языке. В этом случае в сгенерированный файл C++ могут быть вставлены директивы #line, ссылающиеся на номера строк и имя файла исходного (редактируемого человеком) файла.
Пример
#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 для Информация о файле и строке | |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/preprocessor/line