Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Директива #line сообщает препроцессору, чтобы задать сообщаемые значения компилятора для номера строки и имени файла заданному номеру строки и имени файла.
Синтаксис
#linedigit-sequence ["filename"]
Замечания
Номер строки и (необязательно) имя файла используется компилятором для указания на ошибки, которые он обнаруживает во время компиляции. Номер линии обычно указывает на текущую строку входных данных, а имя файла — на текущий входной файл. Номер строки увеличивается на единицу после обработки каждой строки.
Значение последовательности цифр может быть любой целочисленной константой в диапазоне от 0 до 2147483647 включительно. Для маркеров предварительной обработки можно использовать замену макросов, но результат должен оцениваться в правильном синтаксисе. Имя файла может быть любым сочетанием символов и должно быть заключено в двойные кавычки (" "). Если имя файла не указано, предыдущее имя файла остается неизменным.
Можно изменить номер исходной строки и имя файла, написав директиву #line . Директива #line задает значение строки, которая сразу же следует директиве в исходном файле. Переводчик использует номер строки и имя файла для определения значений предопределенных макросов __FILE__ и __LINE__. С помощью этих макросов можно вставлять в текст программы описательные сообщения об ошибках. Дополнительные сведения об этих предопределенных макросах см. в разделе предопределенные макросы.
Макрос __FILE__ расширяется на строку, содержимое которой — имя файла, окруженное двойными кавычками (" ").
Если изменить номер линии и имя файла, компилятор игнорирует предыдущих значений и продолжит обработку с новыми значениями. Директива #line обычно используется генераторами программ. Он используется для того, чтобы сообщения об ошибках ссылались на исходный файл, а не на созданную программу.
Пример
В следующих примерах показаны #line __LINE__ и __FILE__ макросы.
В первом примере номер строки имеет значение 10, а затем значение 20, а имя файла изменяется на hello.cpp.
// line_directive.cpp
// Compile by using: cl /W4 /EHsc line_directive.cpp
#include <stdio.h>
int main()
{
printf( "This code is on line %d, in file %s\n", __LINE__, __FILE__ );
#line 10
printf( "This code is on line %d, in file %s\n", __LINE__, __FILE__ );
#line 20 "hello.cpp"
printf( "This code is on line %d, in file %s\n", __LINE__, __FILE__ );
printf( "This code is on line %d, in file %s\n", __LINE__, __FILE__ );
}
This code is on line 7, in file line_directive.cpp
This code is on line 10, in file line_directive.cpp
This code is on line 20, in file hello.cpp
This code is on line 21, in file hello.cpp
В этом примере макрос ASSERT использует предопределенные макросы __LINE__ и __FILE__ выводит сообщение об ошибке исходного файла, если данное утверждение не соответствует действительности.
#define ASSERT(cond) if( !(cond) )\
{printf( "assertion error line %d, file(%s)\n", \
__LINE__, __FILE__ );}