Russian Belarusian English German Japanese Ukrainian

#line

CuBook05

Директива #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__ );}
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий


Защитный код Обновить