Директива #line

Директива препроцессора, которая задает заданные значения для внутреннего номера строки и имени файла компилятора.

#line lineNumber "filename"

Параметры

Элемент Описание
lineNumber
Номер строки для задания. Это может быть любая целочисленная константа. Замена макросов может выполняться для маркеров предварительной обработки, если результат оценивается в правильном синтаксисе.
имя_файла [необязательно]
Задается имя файла. Имя файла может быть любым сочетанием символов и должно быть заключено в двойные кавычки (" "). Если этот параметр опущен, предыдущее имя файла остается без изменений.

Комментарии

Компилятор использует номер строки и имя файла для ссылки на ошибки, которые он находит во время компиляции. Номер линии обычно указывает на текущую строку входных данных, а имя файла — на текущий входной файл. Номер строки увеличивается на единицу после обработки каждой строки. Если изменить номер линии и имя файла, компилятор игнорирует предыдущих значений и продолжит обработку с новыми значениями. Директива #line обычно используется генераторами программ, чтобы сообщения об ошибках ссылались на исходный исходный файл, а не на созданную программу.

По номеру строки и имени файла преобразователь определяет значения предустановленных макросов __LINE__ и __FILE__. С помощью этих макросов можно вставлять в текст программы описательные сообщения об ошибках. Макрос __FILE__ разворачивается в строку, содержимым которой является имя файла, заключенное в двойные кавычки (" ").

Примеры

В следующем примере задается номер строки 151, а имя файла — copy.c.

#line 151 "copy.c"

В следующем примере макрос ASSERT использует предопределенные макросы __LINE__ и __FILE__ для вывода сообщения об ошибке исходного файла, если указанное утверждение не соответствует true.

#define ASSERT(cond)

if( !(cond) )\
{printf( "assertion error line %d, file(%s)\n", \
__LINE__, __FILE__ );}

См. также раздел

Директивы препроцессора (DirectX HLSL)