Директива #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__ );}