Compilare conditionata
----- ----- --------- ----- ------
Preprocesorul are directive pentru compilare conditionata. Acestea pot fi folosite pentru dezvoltarea programelor si pentru scrierea
codului mai portabil de la o masina la alt 313i81d a. Fiecare directiva de forma
#if expresie_integrala_constanta
#ifdef identificator
#ifndef identificator
implica compilarea conditionata a codului care urmeaza pana la directiva de precompilare
#endif
Pentru compilarea
codului de mai sus, in cazul lui #if trebuie ca expresia
#ifdef sau #ifdefined numele identificatorului trebuie sa fie definit anterior intr-o linie #define, fara interventia directivei
#undef identificator
In cazul lui #ifndef, numele identificatorului trebuie sa nu fie curent definit.
Expresia
insa, folosi operatorul de precompilare "defined" (valabil in ANSI C, dar nu si C traditional). Expresia
defined identificator
este echivalenta cu
defined(identificator)
Acesta se evalueaza la 1 daca identificatorul este definit, si 0 in caz contrar.
------------
Exemplu:
------------
#if defined(HP9000) || defined(SUN4) && !defined(VAX)
. . . . . /* cod dependent de masina */
#endif
Uneori "printf()" este utila in scopuri de depanare. Presupunem ca la inceputul unui fisier am scris
#define DEBUG 1
si in unele zone ale programului am scris
#if DEBUG
printf("debug: a = %d\n", a);
#endif
Daca dupa ce ne-am convins ca este bine ce se intampla si vrem sa nu mai vizualizam valoarea lui "a" in acest moment, atunci schimbam DEBUG in 0 (de exemplu).
O alta varianta ar fi sa nu initializam DEBUG. Scriem deci la inceputul fisierului
#define DEBUG
Putem folosi #ifdef si #if si scriem:
#ifdef DEBUG
. . . . .
#endif
|