double arrow

Директивы #error, #line, #pragma


Директива препроцессора #error имеет следующий формат:

#error errmsg

Директива печатает в процессе компиляции сообщение об ошибке вида:

Error: filename line# : Error directive errmsg

где errmsg – сообщение, заданное директивой #error. После печати этого сообщения компиляция прекращается. Директива используется в сочетании с директивами условной компиляции и срабатывает при возникновении условий, не позволяющих продолжить работу. Например:

#ifndef File1#error Не найден файл File1

Директива препроцессора #line задаёт целочисленное константное начальное значение номера строки для нумерации следующих за директивой строк исходного текста программы. Возможны две формы директивы:

#line номер_строки#line номер_строки «имя_файла»

Элемент директивы номер_строки задаёт начальное значение номера строки. Все последующие строки исходного текста программы будут нумероваться, начиная с этого номера. Если в директиву включено имя файла, то не только изменяется нумерация всех последующих строк программы, но и компилятор во всех своих сообщениях будет ссылаться на файл с указанным именем. Директива #line обычно используется для того, чтобы сделать сообщение о синтаксических ошибках и предупреждениях компилятора более удобными для понимания. Номера строк не добавляются в исходный файл. Пример:

#line 100 «file1.cpp»

Директива #pragma имеет следующий синтаксис:

#pragma имя опции

и вызывает действия, зависящие от указанной опции. Пример:

1) #pragma startup имя_функции <приоритет>

Указывает на функцию, которая должна вызываться в самом начале программы (перед вызовом функции main). На используемую функцию накладываются некоторые ограничения: она не должна иметь аргументов и не должна возвращать значение (т.е. быть void func(void)). Параметр приоритет – целое число от 64 до 255, наиболее высоким приоритетом является приоритет = 0. Функции с более высоким приоритетом вызываются первыми при запуске программы. По умолчанию приоритет = 100. Значения приоритетов от 0 до 63 являются зарезервированными.

2) #pragma hdrstop

Эта опция связана с особенностью работы препроцессора, производительность которого существенно повышается, если учитывается, что некоторое количество заголовочных файлов общие для всех модулей. Директива #pragma hdrstop указывает компилятору конец списка таких общих файлов.

3) #pragma message("сообщение")

просто выдает сообщение при компиляции.

4.6 Операции препроцессора # и ##

Операция препроцессора # применяется к параметрам макросов, представляющих собой текст. Операция преобразует текст в строку символов, взятую в кавычки. Строки, разделённые символами пробела, склеиваются во время предварительной обработки.

Операция ## выполняет конкатенацию двух лексем. Например:

#define NAME1(a,b) a##bNAME1(ab,c)Результат – abc

Сейчас читают про: