При помощи директивы #pragma язык C++ позволяет определить любые желаемые директивы, не обращаясь для этого к другим, поддерживающим их компиляторам. Если компилятор не поддерживает данное имя директивы, то он просто игнорирует директиву #pragma, не выдавая при этом никаких сообщений об ошибках или предупреждений.
Язык C++ поддерживает следующие директивы #pragma:
#pragma alignment
#pragma link
#pragma argsused
#pragma message
#pragma checkoption
#pragma obsolete
#pragma codeseg
#pragma option
#pragma comment
#pragma pack
#pragma exit
#pragma package
#pragma hdrfile
#pragma resource
#ragma hdrstop
#pragma saveregs
#pragma inline
#pragma startup
#pragma warn
#pragma once
Директива #pragma alignment выдает сообщение о текущем выравнивании данных и размере enum-типов.
Директива #pragma argsused допустима только между определениями функций и действует только на следующую функцию. Она отменяет сообщение уровня предупреждения «Parameter name is never used in function имя-функции» – («имя параметра нигде не используется в функции имя-функции»).
QTranslate — удобный Переводчик Любого текста на экране
Директива #pragma checkoption проверяет, установлены ли опции, указанные в директиве. Если они не установлены, выдается сообщение об ошибке. Синтаксис директивы #pragma checkoption следующий:
#pragma checkoption строка_ опций
Директива #pragma codeseg позволяет указать имя или класс сегмента либо группу, где будут размещаться функции. Если все опции директивы опущены, используется сегмент кода по умолчанию. Синтаксис директивы следующий:
#pragma codeseg [имя_сегмента] [«класс»] [группа]
Директива #pragma comment записывает строку-комментарий в объектный или исполняемый файл. Синтаксис директивы следующий:
#pragma comment (тип, «строка»)
Директивы #pragma exit и #pagma startup позволяют программе задать функцию (функции), которая должна вызываться либо при загрузке программы (перед вызовом main), либо при выходе из программы (непосредственно перед выходом из программы через _exit). Синтаксис этих директив следующий:
#pragma exit имя-функции
#pragma startup имя-функции
Параметр должен являться целым числом в диапазоне от 64 до 255. Старшим приоритетом является 0 (приоритеты от 0 до 63 используются библиотеками языка С/С++ и не должны использоваться пользователем). Функции со старшими приоритетами вызываются первыми при загрузке программы и последними при выходе из нее. Если приоритет не задан, то по умолчанию он равен 100.
void startFunc(void)
В результате работы программы на экране появится:
In start
In main
Как показывает данный пример, необходимо предоставить прототип функции до использования директивы #pragma.
С помощью директивы hdrfile можно определить имя файла, используемого для хранения пред- компилированных заголовочных файлов. Он имеет вид
Где брать программы для ПК? Чистый, бecплaтный и простой, набор программ для вашего компьютера!
#pragma hdrfile «имя_файла. csm»
где имя_файла — это имя файла (с расширением csm).
Директива hdrstop сообщает Borland С++ о необходимости остановить предкомпиляцию заголовочных файлов.
Также имеется директива inline, имеющая следующий вид:
Она сообщает компилятору, что программа содержит внутренний ассемблерный код. При создании самого быстрого кода компилятор должен знать, что в программе содержится ассемблерный код.
Используя директиву intrinsic, можно указать компилятору на необходимость подстановки кода функции вместо ее вызова. Директива имеет вид:
#pragma intrinsic имя_функции
где имя_функции — это имя функции, которую необходимо сделать внутренней.
Если выбрать опцию Inline Intrinsic Function в ИСР (интегрированной среде разработчика) или воспользоваться опцией -Oi при компиляции с помощью строчного компилятора, то Borland автоматически сделает внутренними следующие функции:
alloca memcpy stpcpy strcpy strncpy
fabs memset strcat strlen strnset
memchr rotl strchr strncat strrchr
memcmp rotr strcmp strncmp
Воспользовавшись директивой intrinsic, можно отменить функции, которые станут внутренними: #pragma intrinsic имя_функции
Директива message позволяет определить сообщение, выводимое в качестве предупреждения при компиляции программы. Например:
#include
#pragma message This will be displayed as a warning.
int main(void)
int i=10;
printf («This is i: %dn», i);
#pragma message This is also displayed as a warning.
return 0;
>
При компиляции появятся два сообщения #pragma, выводящиеся в качестве предупреждений. При использовании ИСР они появятся в стандартном окне сообщений.
Директива option позволяет определить опции командной строки вместо того, чтобы данные опции явно указывать в командной строке. Она имеет следующий вид:
#pragma option список_опций
Например, следующая директива приводит к тому, что содержащая ее программа будет компилироваться в модели large:
#pragma option -ml
Следующие опции не могут использоваться с директивой option:
-В -с -D -е -Е -F -h
-l -М -о -Р -Q -S -Т
-U -V -X -Y
Для использования некоторых опций директива option должна стоять перед любыми объявлениями, включая прототипы функций. Поэтому имеет смысл помещать данную директиву самой первой.
Директива saveregs запрещает функции, объявленной как huge, изменять какие-либо регистры. Данная директива должна стоять перед функцией, и она влияет только на функцию, перед которой стоит.
Директива warn позволяет запретить или разрешить различные предупреждения. Она имеет вид:
#pragma warn установки
где установки — это опции для определения предупреждений.
Источник: www.c-cpp.ru