|
Якщо вираз, що випливає за #if, істиний, то коди, укладені між #if та #endif, будуть компілюватися. У противному випадку вони будуть при компіляції пропущені. Вираз, що випливає за #if, перевіряється під час компіляції, тому він може містити тільки константи і макроси, колись визначені. Змінні не можуть використовуватися.
Директива #еlsе використовується так само, як еlsе в мові С.
Приведемо простий приклад використання #if та #еlsе.
/* Використання умовної компіляції */
#include <stdio.h>
#define МАХ 100
main(void)
{
#if МАХ>99
printf(“МАХ більше 99 \n");
#е1sе
Директива #elif використовується для організації вкладеної умовної компіляції. Основна форма використання директиви наступна:
#if вираз
послідовність операторів
#elif вираз1
послідовність операторів
#еlіf вираз2
послідовність операторів
...
#elif вираз N
послідовність операторів
# endif
Інший метод умовної компіляції складається у використанні директив #ifdef та #ifndef.
Основна форма використання директиви
#ifdef ім'я_макросу
послідовність операторів
#endif
і відповідно
#ifndef ім'я_макросу
послідовність операторів
#endif
Якщо макрос визначений, то при використанні #ifdef компілюється відповідна послідовність операторів до #endif. Якщо ж макрос не визначений або був відмінений директивою #undef, то відповідна послідовність операторів компілятором ігнорується.
Директива #ifndef діє протилежним образом стосовно директиви #ifdef.
З директивами #ifdef та #ifndef можна використовувати директиву #else, однак директиву #elif використовувати не можна.
Щоб мати можливість перевіряти, чи визначені комбінації макросів у препроцесорі, існує операція defined. Вона припустима тільки в директивах #if та #еlіf. Вираз defined(ім'я_макросу) приймає значення 1("істинно"), якщо макрос визначений, і 0("хибно"), якщо макрос не визначений. Директиви
#if defined(МАХ)
та
#ifdef МАХ
дають той самий результат. Перевага складається в можливості використання, наприклад, таких директив:
#if defined(МАХ)&&defined(МІN)
Макрос, визначений так має порожнє (NULL) значення, вважається визначеним.
Після #defined МАХ макрос МАХ вважається визначеним, але його значення невідоме.
Директива #line використовується для зміни змісту визначених макросів _LINE_ та _FILE_. Основна форма директиви наступна:
#line ціла_константа "ім'я_файлу"
Директива #line служить для завдання програмі способу нумерації рядків і використовується при налагодженні програм. Ця директива ігнорується при роботі в інтегрованому середовищі, але використовується при компіляції за допомогою компілятора командного рядка tсс.
Директива #рrаgма дозволяє використовувати специфічні для конкретних реалізацій директиви у формі
#рrаgма ім'я_дирекгивы
За допомогою #рrаgма Вогlаnd С++ дозволяє визначити будь-які бажані директиви, не звертаючись при цьому до інших, які мають підтримку їх компілятора. Якщо компілятор не підтримує дане ім'я директиви, то він просто ігнорує директиву #рrаgма.
Вог1аnd С++ підтримує наступні імена директив:
· аrgusеd,
· exit,
· startup,
· inline,
· option,
· saveregs,
· warn.
Використання директиви #рrаgма вимагає більше знань, чим ми використовуємо в цій методичці, тому приведемо лише одне застосування:
#рrаgма inline
Ця директива повідомляє компіляторові, що програма містить вбудовані ассемблерні коди. Ця директива еквівалентна опції компілятора командного рядка -В або відповідній опції інтегрованого середовища.
Більш докладну інформацію можна знайти в документації по Вог1аnd С++.
Дата добавления: 2015-07-20; просмотров: 65 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Директиви препроцесора. | | | Визначені макроси. |