Directivele #if, #elif, #else și #endif (c

Fiecare directivă #if din fișierul sursă trebuie să aibă o directivă corespunzătoare de închidere #endif. Între direcțiile #if și #endif, pot fi plasate orice număr de directive #elif. Cu toate acestea, este permisă nu mai mult de o singură directivă. Directiva nr. dacă este prezent, trebuie să fie ultima înaintea directivei #endif.







Directivele #if. #elif. #else și #endif pot fi imbricate în alte părți ale textului din #if direcții. Fiecare directivă imbricată # nu. #elif sau #endif se referă la cea mai apropiată directivă anterioară #if.

Toate directivele de compilare a condițiilor, cum ar fi #if și #ifdef. la sfârșitul dosarului trebuie să existe directive corespunzătoare de închidere #endif; în caz contrar, apare un mesaj de eroare. Dacă directivele de compilare condiționată sunt conținute în fișierele de includere, acestea trebuie să îndeplinească aceleași condiții: la sfârșitul fișierului inclus nu ar trebui să existe directive de compilare condiționate necorespunzătoare.

În partea din linia de comandă care urmează comenzii #elif. se efectuează o substituție macro, astfel încât apelurile macro pot fi utilizate într-o expresie expresie constantă.

Preprocesorul selectează una dintre intrările parametrilor de text specificați pentru prelucrare ulterioară. Blocul specificat în parametrul de text. poate fi orice secvență de text. Poate dura mai multe linii. De obicei, textul este textul programului, de înțeles pentru compilator sau preprocesor.

Preprocesorul procesează blocul de text selectat și îl transmite compilatorului. Dacă un bloc de text conține directive preprocesor, preprocesorul execută aceste directive. Sunt compilate numai blocurile de text selectate de preprocesor.

Preprocesorul selectează un element de text. evaluând expresiile constante în urma fiecărei directive #if sau # elif. până când se găsește o expresie cu valoarea adevărată (nonzero). Se selectează întregul text (inclusiv alte directive preprocesor începând cu caracterul #) la directiva #elif corespunzătoare. #else sau #endif.

Dacă toate aparițiile expresiei constante sunt false sau nu există #elif directive. preprocesorul selectează un bloc de text după propoziția #else. Dacă propoziția #else este omisă și toate instanțele expresiei constante din blocul #if sunt false, nu este selectat niciun bloc text.







O expresie constantă este o expresie constantă întregă cu următoarele restricții suplimentare:

Expresiile trebuie să fie de un tip întreg și pot conține numai constante întregi, constante de caractere și un operator definit.

Expresia nu permite utilizarea dimensiunii operatorului sau a operatorului distribuit.

Este posibil ca mediul țintă să nu poată reprezenta toate gamele de numere întregi.

Transformarea este de tip int. care este la fel ca lunga. și tastați int unsigned int. care este la fel ca nesemnatul lung.

Traducătorul poate converti constantele de caractere la un set de valori de cod care este diferit de setul pentru mediul țintă. Pentru a determina proprietățile mediului țintă, verificați valorile macro din fișierul LIMITS.H din aplicația care a fost compilată pentru mediul vizat.

Expresia nu trebuie să execute nici o solicitare de mediu și nu ar trebui să depindă de implementarea specifică pe computerul țintă.

Operatorul definit de preprocesor poate fi folosit în expresii constante speciale, după cum se arată în următoarea sintaxă:

Această expresie constantă este considerată a fi adevărată (nu egală cu zero) dacă identificatorul este definit în prezent; în caz contrar, condiția este falsă (0). Un identificator, definit ca text gol, este considerat specific. Direcția definită poate fi utilizată numai în directivele #if și #elif.

În următorul exemplu, directivele #if și #endif compilează un apel la una dintre cele 3 funcții:

Apelul la funcția de credit este compilat în cazul în care se definește CREDITUL. Dacă ID-ul DEBIT este definit. apelul pentru funcția de debit este compilat. Dacă nu este specificat niciunul dintre acești identificatori, se compilează apelul pentru funcția imprimantei. Rețineți că în C și C ++, CREDITUL și identificatorii creditelor sunt identificatori diferiți datorită unui caz diferit de caractere.

În următorul exemplu, operatorii de compilare condiționată utilizează o constantă de caractere definită anterior numită DLEVEL.

Primul bloc #if conține 2 seturi de direcții iminate #if. #else și #endif. Primul set de directive este procesat numai dacă este îndeplinită condiția DLEVEL> 5. În caz contrar, operatorii care sunt localizați după directiva #else sunt procesați.

Directivele #elif și #else din cel de-al doilea exemplu sunt utilizate pentru a selecta una dintre cele patru opțiuni, în funcție de valoarea constantei DLEVEL. Constanta STACK este setată la 0, 100 sau 200, în funcție de definiția constantei DLEVEL. Dacă DLEVEL este mai mare de 5, operatorul este compilat

iar STACK-ul constant rămâne nedefinit.

Compilarea condiționată este de obicei folosită pentru a preveni incluziunile multiple ale aceluiași fișier antet. În C ++, în care clasele sunt adesea definite în fișiere antet, constructe precum cea de mai jos pot fi folosite pentru a exclude mai multe definiții.

Codul precedent verifică dacă este definită caracterul constant EXAMPLE_H. Dacă este specificat, fișierul este deja inclus și nu este necesară reprocesarea acestuia. Dacă nu, constanta EXAMPLE_H este definită pentru a marca fișierul EXAMPLE.H ca deja procesat.







Trimiteți-le prietenilor: