Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Директива #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__ );}