C ++ pentru incepatori
1.3. Directivele preprocesorului
Fișierele antet sunt incluse în textul programului folosind #include directivei preprocesor. Directivele preprocesorului începe cu un semn „ascuțit“ (#), care ar trebui să fie primul caracter. Un program care procesează aceste directive, numit preprocesorul (în compilatoare moderne, preprocesorul este de obicei parte din compilator).
Directiva #include include conținutul fișierului programului. Numele fișierului poate fi specificat în două moduri:
Dacă numele de fișier este inclus în paranteze unghiulare (<>) Se estimează că avem nevoie de un fișier antet standard compilatorul caută fișierul în locații predefinite. (Metoda de determinare a acestor locuri sunt foarte diferite pentru diferite platforme și implementări.) Ghilimele duble indică faptul că fișierul header - utilizatorul, și căutarea începe cu directorul în care codul sursă.
Fișierul antet poate conține, de asemenea, directivele #include. Prin urmare, este uneori dificil de înțeles ce anume fișierele header incluse în codul sursă, fișierele antet, iar unele pot fi incluse mai mult de o dată. Evitați acest lucru permite directivele preprocesor condiționate. Luați în considerare acest exemplu:
verificări Directiva #ifndef condiționale dacă valoarea BOOKSTORE_H definită anterior. (BOOKSTORE_H - Preprocessor este constantă și astfel constantă a decis să scrie cu majuscule.) Preprocesorul procesează următoarele rânduri până # endif directivă. În caz contrar, se sare peste o linie de la #ifndef la # endif.
directivă
preprocessor definește BOOKSTORE_H constantă. Prin introducerea acestei directive imediat după directiva #ifndef, ne putem asigura că partea de fond a fișierului bookstore.h antet va fi inclusă în codul sursă doar o singură dată, indiferent de cât de multe ori în textul propriu-zis acel fișier.
O altă aplicație comună este condiționale directivele preprocesor incluse în programul de informații de depanare de text. De exemplu:
Dacă constantă REMEDIERE nu este definit, codul rezultat al programului va arata astfel:
În caz contrar, vom obține:
preprocessor constantă poate fi determinată în linia de comandă atunci când apelarea prin intermediul opțiunilor de compilare -D (în diferite exemple de realizare, această opțiune poate fi numită în mod diferit). Pentru sistemele bazate pe UNIX apel compilator cu definiția constantelor preprocesorul DEBUG după cum urmează:
Există constante care sunt determinate automat de compilator. De exemplu, putem vedea dacă vom compila sau un program C ++ C. Pentru C ++ programe sunt determinate automat __cplusplus constant (două subliniere). Pentru standard C este determinat __STDC__. Firește, cele două constante nu poate fi determinată în mod simultan. exemplu:
Alte constante predefinite utile (în acest caz, este mai bine să spunem variabilele) și preprocesorul sunt __LINE__ __FILE__. __LINE__ variabilă conține numărul liniei curente fiind compilate și __FILE__ - numele fișierului compilat. Aici este un exemplu de utilizare a acestora:
Două constante __DATE__ __TIME__ și includ data și ora de compilare.
Standardul Biblioteca C oferă un macro util assert () care verifică o condiție și dacă nu este îndeplinită, un mesaj de diagnosticare și anulează programul. Noi folosim de multe ori aceste programe macro utile în exemplele care urmează. Pentru a-l utiliza, ar trebui incluse în directiva programului
assert.h - acest fișier antet C standard de bibliotecă cod C ++ se poate referi la fișierul antet și prin numele său, adoptat în C, precum și numele adoptat în C ++. În standard C ++ biblioteca, acest fișier este numit cassert. Numele fișierului antet în biblioteca C ++ este diferit de numele fișierului în C pentru lipsa de .h prelungire și frontală Înlocuit prin litera c (menționat mai sus că, în fișierele header pentru extensiile C ++ nu sunt utilizate, deoarece ele pot depinde de punerea în aplicare).
Efectul #include directivei preprocesorului depinde de tipul de fișier antet. instrucție
Acesta include textul fișierului cassert conținutul programului. Dar, din moment ce toate numele utilizate în standardul C ++ biblioteca sunt definite în spațiul std, numele assert () va fi invizibil, atâta timp cât nu vom face în mod explicit vizibil cu următoarele folosind directive:
Dacă includem în fișierul antet program pentru biblioteca C
necesitatea unei folosind directivă nu mai este: numele assert () vor fi vizibile și așa. (Biblioteci utilizate de către dezvoltatorii de spații de nume pentru a preveni înfundarea spațiul de nume la nivel mondial. Secțiunea 8.5 sunt discutate mai în detaliu.)