Filename and line information
Изменяет номер строки исходного кода и, опционально, текущее имя файла в препроцессоре.
Содержание |
Синтаксис
#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++ из файла, написанного на другом языке. В этом случае, #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:2024):
-
- 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
для
Информация о имени файла и номере строки
|
|