Spec-Zone.ru › C++

Имя файла и информация о строках

Изменяет номер строки исходного кода и, при необходимости, имя текущего файла в препроцессоре.

Синтаксис

#line lineno new-line (1)
#line lineno "filename" new-line (2)
#line pp-tokens new-line (3)
1) Заменяет текущий номер строки препроцессора на lineno.
2) Также заменяет текущее имя файла препроцессора на filename.
3) Если не подходит ни вариант (1), ни вариант (2), к pp-tokens применяется макроподстановка. После подстановки директива снова проверяется на соответствие варианту (1) или (2).
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]

См. также

source_location
(C++20)
класс, представляющий информацию об исходном коде, такую как имена файлов, номера строк и имена функций
(класс)
Документация по C для имени файла и информации о строках

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/preprocessor/line

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API