#if директива

Първата (съкратена) форма на директивата #ifобикновено се записва така:

последователност от изрази (блок 1)

Изразът, записан в директивата #if,, се оценява на етапа на компилиране, а не по време на изпълнение, както в обичайния операторif.Следователно той трябва да бъде съставен от константи и имена на макроси, дефинирани с помощта на директиватаdefine, и не трябва да съдържа променливи. Ако изразът е верен (различен от нула), тогава редовете, написани между#ifи#endifостават в текста на програмата и след това ще бъдат компилирани, а#ifи#endifсе изключват от текста. В противен случай, ако стойността на изразаfalse(равна на нула), тогава последователността от оператори се изключва заедно с#ifи#endifот текста на програмата и няма да бъде компилирана. Например,

... /* някои оператори отиват тук */

cout 100 е невярно. Ако стойността на макросаMAXсе промени, например,

тогава изходният оператор ще бъде включен за компилация от 150>100.

Втората (пълна) форма на директивата #ifобикновено се записва по следния начин:

последователност от изрази (блок1)

последователност от изрази (блок2)

По аналогия с пълната форма на обичайния операторif, в зависимост от стойността на константния израз, компилираната програма ще включваblock1илиblock2.

За да изградите структура с вложена директива #if(стълбиif-else-if), използвайтедирективата #elif:

последователност от изрази (блок1)

последователност от изрази (блок2)

последователност от изрази (блок3)

последователност от изрази (блок N)

последователност от изрази (блок(N+1))

Акоi--ият константен израз е верен, тогаваi-иятблок,е включен за компилация и други изрази не се проверяват. В противен случай следващият израз се оценява и тества. Ако всички изрази са неверни, тогава се използва(N+1)-тият блок, ако има директива#else.Ако#elseлипсва, тогава ако всички изрази са неверни, нито един от блоковете не участва в компилацията.

Що се отнася до оператораif, други вложени конструкции на директивата #ifса възможни, например пълната или съкратена форма на директивата #ifможе да се използва като всеки от блоковете.

Упражнение. Дайте пример за пълната форма на директивата #ifи вложената директива#if.

3.2. Директиви#ifdef и #ifndef.

Друг метод за условно компилиране е използването на директивите#ifdef и #ifndef. Стандартната им форма е следната:

В първия вариант, ако името на макроса е предварително дефинирано от директивата#define, тогава последователността от изрази между#ifdefи#endif,ще бъде компилирана. Във втората опция последователността от изрази ще бъде компилирана, ако посоченият макрос не е дефиниран. Можете също да използвате#elseза тези директиви, но не и#elif.Те могат да бъдат вложени.

Пример.

Фрагментът под#ifще се компилира само ако макросътMне е дефиниран.

Упражнения, тестове

int k=39; printf("%d", MACR(k+1)); //2

Какво ще се получи?

15; 2) 45; 3) 44; 4) 9; 5) Грешка в //1; 6) Грешка в //2.

#define writeln(v) //1

#define IncFile "AddFile1.h" //3

#include IncFile//4

Кои от тях имат грешки? Каква е разликата между свързването на посочените тук файлове?

Не намерихте това, което търсихте? Използвайте търсачката:

Деактивирайте adBlock! и опреснете страницата (F5)наистина е необходимо