Добавление условий
| Справка по C++ |
|---|
| Язык C++ |
| Препроцессор |
Препроцессор поддерживет компиляцию частей исходного кода в зависимости от условйи. Такую возможность предоставляют дирекстивы #if, #else, #elif, #ifdef, #ifndef и #endif.
Содержание |
[править] Синтаксис
| #if выражение | |||||||||
| #elif выражение | |||||||||
| #ifdef выражение | |||||||||
| #ifndef выражение | |||||||||
| #else выражение | |||||||||
| #endif выражение | |||||||||
[править] Объяснения
Блоки условий препроцессора начинаются с директив #if, #ifdef или #ifndef, далее может идти любое количество дирекстив #elif, далее не болеео одной директивы #else и закрываться блок должен директивой #endif. Любые влоеженные блоки условий препроцессора будут обрабатываться отдельно.
Каждая директива из #if, #elif, #else, #ifdef и #ifndef управляет частью кода до одной из директив #elif, #else, #endif, не принадлежащей какому-либо вложенному блоку условий препроцессора.
Директивы #if, #ifdef и #ifndef проверяют выражения условия (см. ниже) и если вычисляется как верное, компилятору передаётся контролируемая часть кода. В данном случае последующие директивы #else и #elif игнорируются. В противном случае, если выражение вычисляется как ложное, контролируемый блок кода пропускается и следующая директива (если присутствует) #else или #elif выполняется. В таком случае, код контролируемой директивой #else передаётся компилятору. Если присутствует директива с условием #elif, то дальнейшее выполнение соответствует директиве #if: проверка условия, компиляция или игнорирование кода в зависимости от результата, и, в случае игнорирования, выполнение последующей директивы (если есть) #elif или #else. Блок проверки условия препроцессора закрывается директивой #endif.
[править] Вычисление выражения условия
[править] #if, #elif
Выражение должно быть константой, использующее только буквальные констатны и идентификаторы, определённые с помощью директивы #define. Любой идентификатор, который не является буквальной константой или не объявлен с помощью директивы #define вычисляется как 0.
The expression may contain unary operators in form defined identifier or defined (identifier) which return 1 if the identifier was defined using #define directive and 0 otherwise. If the expression evaluates to nonzero value, the controlled code block is included and skipped otherwise. If any used identifier is not a constant, it is replaced with 0.
[править] #ifdef, #ifndef
Checks if the identifier was defined using #define directive.
#ifdef identifier is essentially equivalent to #if defined( identifier).
#ifndef identifier is essentially equivalent to #if !defined( identifier).
[править] Пример
| Этот раздел не завершён |