Учись программированию на C++ Builder бесплатно!

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

#line digit-sequence ["filename"]

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

Значение числ-последовательность может быть любой константы целого числа. Замену макроса могут быть выполнены в токенах предварительной обработки, но результат должен иметь правильный синтаксис. FileName может иметь любую комбинацию символов и должен заключаться в двойные кавычки (" "). Если FileName опущен, то предыдущее имя файла остается неизменным.

Можно изменить количество линий и имя файла источника путем написания #line директивы. Транслятор использует номер линии и имя файла для определения значения предопределенных макросов __FILE__ и __LINE. Можно использовать эти макросы для вставки своих сообщений об ошибке в тексте программы.

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

Следующие примеры иллюстрируют #line и __LINE и __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__ );
}
Поделиться