ALTE DIRECTIVE: #undef, #if, #ifdef, #ifndef, #else Și #endif
Aceste directive sunt de obicei utilizate atunci când programați module mari. Acestea vă permit să suspendați acțiunea definițiilor anterioare și să creați fișiere, fiecare dintre acestea putând fi compilate în moduri diferite.
Directiva #undef înlocuiește cea mai recentă definiție a unei macrocomenzi numite.
#undef BIG / * BIG este acum nedefinit * /
#define HUGE 10 / * HUGE este redefinit ca 10 * /
#undef HUGE / * HUGE este din nou 5 * /
#undef HUGE / * HUGE este acum nedefinit * /
Evident (sperăm), nu veți compila fișierul, ca în acest exemplu. Să presupunem că aveți un fișier standard mare definit de directiva #include. pe care doriți să o utilizați, dar că unele dintre definițiile sale vor trebui să se schimbe temporar la una dintre funcțiile programului, în loc de a avea de a face cu acest fișier, îl puteți transforma pur și simplu, iar apoi înconjoară un stand-out dispun de directivele relevante #define și # undef.
Sau presupuneți că lucrați cu un sistem vast de programe. Doriți să definiți macrocomenzi, dar nu sunteți sigur dacă definiția dvs. utilizează alte definiții din altă parte a sistemului. În acest caz, pur și simplu anulați macrocomenzile în locul în care nu mai aveți nevoie de ele, iar originalul acestor macrocomenzi, dacă există, va rămâne în continuare valabil pentru restul sistemului.
Alte directive menționate de noi ne permit să realizăm o compilație condiționată. Iată un exemplu:
#include "horse.h" / * va fi executat dacă MAVIS este definit * /
#define STABLES 5
#include "cow.h" / * va fi executat dacă MAVIS nu este definit * /
#define STABLES 15
Directiva #ifdef raportează că dacă identificatorul ulterior (MAVIS) este definit de un preprocesor, atunci toate directivele ulterioare sunt executate până la prima apariție a #else sau #endif. Când programul are # altceva. atunci programul din #else la #endif nu va fi executat dacă identificatorul nu este definit.
Această structură este foarte asemănătoare cu construcția limbajului C dacă este altceva. Principala diferență constă în faptul că preprocesorul nu recunoaște brațele <>. care marchează blocul deoarece utilizează #else directive (dacă există) și #endif (care ar trebui să fie) pentru a marca blocurile de directivă.
Aceste construcții condiționate pot fi imbricate.
Directivele #ifdef și #if pot fi utilizate cu #else și #endif în același mod. Directiva #ifndef interogă dacă identificatorul ulterior este nedefinit; această directivă este opusul #ifdef. Direcția #if este mai mult ca o instrucțiune normală C dacă. Este urmată de o expresie constantă, care este considerată adevărată dacă nu este egală cu zero:
Unul dintre scopurile utilizării "compilației condiționate" este de a face programul mai mobil. Prin modificarea mai multor definiții cheie la începutul fișierului, puteți seta diferite valori și puteți include diferite fișiere pentru diferite sisteme.
Aceste exemple scurte ilustrează capacitatea uimitoare a limbii C de a rafina și de a gestiona programele strict.