Справочные данные по языку C++ 613

11.2.4 Директивы fterror, ftl'ine, ttpragma

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

(terror errmsg

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

•

Error: filename line# : Error directive: errmsg

где errmsg — сообщение, заданное директивой #error. После печати этого сообще-
ния компиляция прекращается.

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

ttifndef UnitlH

#error He найден файл Unitl.h

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

#line номер_строки

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

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

ftline 100 "Unitl.cpp"

Применение директивы #line делает работу с отладчиком C++Builder не очень
удобной. При возникновении ошибки курсор в окне Редактора Кода останавлива-
ется не на строке с ошибкой, а на начале текущего файла или, если в директиве
указано имя другого существующего файла, то на начале этого файла. Так что
можно рекомендовать не использовать без особой надобности директиву #line.

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

ftpragma имя опции

и вызывает действия, зависящие от указанной опции. Список возможных опций
вы можете найти во встроенной справке C++Builder. Он довольно обширен и свя-
зан с различными режимами работы препроцессора.

Пример директивы #pragma вы можете видеть в любом модуле своего проек-
та. Первые две строки файла любого модуля имеют вид:

#include <vcl.h>
ttpragma hdrstop

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

В файлах модулей вы можете увидеть еще две директивы #pragma: