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