Spec-Zone.ru › C++

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

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

Синтаксис

#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]

См. также

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

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

Spec-Zone.ru

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