Урок 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 – код предупреждения о том, что переменной присваивается значение, но она не используется).
Для завершенности Си опознает пустую директиву, состоящую из строки, содержащей просто знак #. Эта директива всегда игнорируется.
Оставить комментарий