#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)наистина е необходимо