Filename and line information
Изменяет текущий номер строки и имя файла в препроцессоре.
Содержание |
Синтаксис
#line
lineno
|
(1) | ||||||||
#line
lineno
"
filename
"
|
(2) | ||||||||
` и `
` не переводится (C++ директива `#line`)
- Параметры `lineno` и `filename` являются техническими терминами
- Номера вариантов (1) и (2) остаются без изменений
Сохранена оригинальная структура и форматирование таблицы.
Объяснение
Любые препроцессорные токены (макроконстанты или выражения) допустимы в качестве аргументов для #line при условии, что они раскрываются в корректное десятичное целое число, за которым может следовать допустимая символьная строка.
lineno
должен быть последовательностью как минимум одной десятичной цифры (в противном случае программа некорректна) и всегда интерпретируется как десятичное число (даже если оно начинается с
0
).
Если
lineno
равен
0
или больше чем
32767
(до C99)
2147483647
(начиная с C99)
, поведение не определено.
Примечания
Эта директива используется некоторыми автоматическими инструментами генерации кода, которые создают C-файлы из файлов, написанных на другом языке. В этом случае, #line директивы могут быть вставлены в сгенерированный C-файл со ссылками на номера строк и имя исходного (редактируемого человеком) файла.
Номер строки, следующий за директивой #line __LINE__ не определён (существует два возможных значения, в которые __LINE__ может раскрыться в данном случае: количество переносов строк, встреченных до этого момента, или количество переносов строк, встреченных до этого момента, плюс перенос строки, завершающий директиву #line ). Это является результатом DR 464 , который применяется ретроактивно.
Пример
#include <assert.h> #define FNAME "test.c" int main(void) { #line 777 FNAME assert(2+2 == 5); }
Возможный вывод:
test: test.c:777: int main(): Assertion `2+2 == 5' failed.
Ссылки
- Стандарт C17 (ISO/IEC 9899:2018):
-
- 6.10.4 Управление строками (стр. 126)
-
- J.1 Неопределенное поведение
- Стандарт C11 (ISO/IEC 9899:2011):
-
- 6.10.4 Управление строками (стр. 173)
- Стандарт C99 (ISO/IEC 9899:1999):
-
- 6.10.4 Управление строками (стр: 158)
- Стандарт C89/C90 (ISO/IEC 9899:1990):
-
- 3.8.4 Управление строками
Смотрите также
|
Документация C++
для
Информация о имени файла и строке
|