Урок 12.5. Другие директивы

12.5. Другие директивы

Другие директивы препроцессора  Си используются значительно реже, чем директивы #define, #include, директивы условной компиляции. К ним относятся директивы #undef, #error, #pragma и пустая директива #. Общая форма записи директивы #undef:

#undef <идентификатор>

Встретив директиву #undef, препроцессор считает <идентификатор> с этого момента неопределенным, то есть не подлежащим замене. Таким образом, препроцессор считает с того момента, как встретилась директива #undef, что для указанного идентификатора не выдавалась директива #define.

Пример:

#define BIG 500
. . .
#undef BIG
#define BIG 700

Если бы не было директивы #undef BIG, препроцессор выдавал бы предупреждение о переопределении константы, но так как директива #undef BIG есть, то в момент выполнения директивы #define BIG 700, BIG считается неопределенным идентификатором и никаких конфликтов не возникает.

Общая форма записи директивы #error:

#error <сообщение об ошибке>

Встретив эту директиву, компилятор прекращает свою работу и выдает следующее сообщение: Error directive:<сообщение об ошибке>

Здесь <сообщение об ошибке> – это то самое сообщение, которое указано в директиве #error.

Например:

#include "opersys.h"
#if OS==UNIX
#include "unix.h"
#else
#if OS==MSDOS
#include "msdos.h"
#else
#error "Неизвестная ОС"
#endif
#endif
. . .

 


Пусть файл opersys.h содержит следующие строки:

#define MSDOS 1
#define UNIX 2
#define CPM 3
#define OS CPM

 


При компиляции будет выдано следующее сообщение об ошибке: Error directive: " Неизвестная ОС"

Общая форма записи директивы #pragma:

#pragma warn +xxx   или
#pragma warn -xxx    или
#pragma warn .xxx

 


Директива #pragma warn +xxx разрешает компилятору выдачу предупреждения с кодовым обозначением xxx. Директива #pragma warn -xxx запрещает компилятору выдачу предупреждения с кодовым обозначением xxx. Директива #pragma warn .xxx работает как переключатель, то есть если предупреждение xxx разрешено, директива #pragma warn .xxx запрещает его, а если запрещено - разрешает.

Например:

void main()
{
int i;
i=10;
}

 


Если мы скомпилируем эту программу, компилятор предупредит нас, что переменной i присваивается значение, но переменная i нигде не используется в функции main(). Если же мы поместим в этом файле директиву препроцессора #pragma warn -aus, этого предупреждения не будет (aus – код предупреждения о том, что переменной присваивается значение, но она не используется).

Для завершенности  Си опознает пустую директиву, состоящую из строки, содержащей просто знак #. Эта директива всегда игнорируется.

рассказать друзьям и получить подарок

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Translate Переводчик

Подписка на новости

SmartResponder.ru
Ваш e-mail: *
Ваше имя: *

Хостинг для Wordpress сайтов