preprocessor directives c
Podrobný pohľad na smernice o predprocesoroch v C ++.
Preprocesor je jedinečná vlastnosť jazyka C ++. V C ++ máme kroky ako kompilácia, prepojenie a vykonanie pre typický program. V skutočnosti máme v programe C ++ veľa ďalších funkcií, ktoré je potrebné spracovať pred absolvovaním programu na kompiláciu.
Na tento účel sa vykonáva špeciálny krok, ktorý sa nazýva predspracovanie. Predbežné spracovanie sa vykonáva pred procesom kompilácie a predspracovaním špeciálnych funkcií. Vďaka tomu sa získa rozšírený program C ++, ktorý sa potom odovzdá kompilátoru.
=> Navštívte tu a naučte sa C ++ od nuly.
Čo sa dozviete:
- Prehľad
- Smernice o zahrnutí súborov
- Smernice o makro definíciách
- Smernice o podmienenej kompilácii
- Operátori # & ##
- Ostatné smernice
- Preddefinované makrá
- Záver
- Odporúčané čítanie
Prehľad
Špeciálne funkcie pre predspracovanie sa identifikujú pomocou entity zvanej „Smernica o predbežnom spracovaní“. Tieto smernice o preprocesore informujú kompilátor o tom, že určité informácie v programe C ++ označené smernicami o preprocesore je potrebné pred kompiláciou vopred pripraviť.
Všimnite si, že v C ++ všetky direktívy preprocesora začínajú symbolom „#“. V okamihu, keď preprocesor (časť kompilátora) narazí na symbol #, informácie nasledujúce za symbolom # sa predspracujú pred odovzdaním programu kompilátoru.
Na rozdiel od ostatných príkazov C ++, smernice pred prepracovaním nekončia bodkočiarkou.
V tomto tutoriále preskúmame rôzne direktívy preprocesora podporované v C ++.
Smernice o zahrnutí súborov
#include
Direktíva na zahrnutie súborov #include nám umožňuje zahrnúť ďalšie súbory do nášho zdrojového programu. Do nášho programu môžeme pomocou týchto funkcií zahrnúť akýkoľvek hlavičkový súbor, ktorý obsahuje definície rôznych preddefinovaných funkcií. Súbory hlavičiek môžeme do nášho programu zahrnúť pomocou nasledujúcej syntaxe.
#include
Príklad: #include
Toto sme už videli v našich programoch C ++. Hlavička iostream obsahuje funkcie potrebné na streamovanie vstupných / výstupných údajov, ako napríklad cout, cin atď.
Keď sa naše programy zväčšia alebo sa zložitosť stane zložitejšou, možno budeme chcieť rozdeliť náš program do rôznych súborov alebo importovať funkcie z ostatných súborov. V takom prípade používame súbory definované používateľom. Na zahrnutie súborov definovaných používateľom do nášho programu môžeme použiť nasledujúcu syntax smernice #include.
#include “filename”
Príklad: #include “vector_int.h”
Toto je používateľom definovaný hlavičkový súbor, ktorý chceme zahrnúť do nášho programu, aby sme mohli využívať jeho funkčnosť.
Nasledujúci príklad kódu ukazuje použitie smernice #include.
bezplatná časová karta pre iPhone a Android
#include using namespace std; int main() { cout<<'This is an example demonstrating inclusion directive #include'; }
Výkon:
Toto je príklad demonštračnej smernice na zahrnutie # zahrnúť.
Ako je znázornené, na zahrnutie funkčnosti hlavičky do nášho programu sme použili smernicu #include.
Smernice o makro definíciách
# definovať
Direktíva #define sa používa na definovanie symbolických konštánt alebo makier v programe C ++.
Všeobecná forma smernice #define je:
#define macro_name replacement code
Keď sa preprocesor stretne s makrom v programe, preprocesor nahradí toto makro kódom, ktorý je definovaný pomocou direktívy #define, skôr ako sa kód odovzdá kompilátoru.
Nasledujúci príklad kódu ukazuje symbolickú konštantu RADIUS, ktorá je definovaná pomocou direktívy #define a jej použitia v programe.
#include #define RADIUS 5 using namespace std; int main() { cout<<'Area of a circle : '<<3.142 * RADIUS * RADIUS; }
Výkon:
Plocha kruhu: 78,55
Ako je uvedené v programe, v našom kóde môžeme použiť symbolickú konštantu RADIUS, ktorá bude nahradená hodnotou pre ňu definovanou pomocou direktívy #define.
otvorenie datového súboru na macu
Na definovanie správneho funkčného kódu môžeme použiť direktívu #define. Tieto funkcie sú zvyčajne malé funkcie.
Nižšie je uvedený príklad.
#include #define REC_AREA(length, breadth) (length * breadth) using namespace std; int main() { int length = 20, breadth = 5, area; area = REC_AREA(length, breadth); cout << 'Area of a rectangle is: ' << area; return 0; }
Výkon:
Plocha obdĺžnika je: 100
Tu sme pomocou direktívy #define definovali funkciu REC_AREA, ktorá berie dva argumenty, teda dĺžku a šírku a vypočítava plochu obdĺžnika. V hlavnej funkcii iba využijeme toto makro a poskytneme mu dva argumenty na získanie plochy obdĺžnika.
#undef
Makrá v programe definovanom v smernici #define trvajú dovtedy, kým nie je nedefinovaná pomocou smernice #undef. Akonáhle program narazí na #undef, následné použitie makra (nedefinované #undef) spôsobí chybu kompilácie.
Ak vo vyššie uvedenom programe dáme po celočíselných deklaráciách iba príkaz #undef REC_AREA, program dá chybu kompilácie.
Smernice o podmienenej kompilácii
Okrem vyššie vysvetlených smerníc poskytuje C ++ aj nasledujúce smernice, ktoré je možné použiť na podmienenú kompiláciu kódu. Tieto smernice sa dajú použiť na podobných riadkoch príkazu if-else v C ++.
Napríklad, môžeme nastaviť DEBUG pre program ZAPNUTÝ alebo VYPNUTÝ pomocou týchto podmienených smerníc.
Niektoré zo smerníc podmienenej kompilácie poskytované v C ++ zahŕňajú:
- #if
- #elif
- #koniec Ak
- #ifdef
- #ifndef
- #else
Nasledujúci program demonštruje použitie smerníc podmienenej kompilácie v programe C ++.
#include using namespace std; #define DEBUG #define MAX(a,b) (((a)>(b)) ? a : b) int main () { int i, j; i = 100; j = 50; #ifdef DEBUG cout <<'Trace: Start of main function' << endl; #endif cout <<'The maximum is ' << MAX(i, j) << endl; #undef MAX //cout <<'The maximum is ' << MAX(10,20) << endl; #ifdef DEBUG cout <<'Trace: End of main function' << endl; #endif return 0; }
Výkon:
Trace: Spustenie hlavnej funkcie
Maximum je 100
Stopa: Koniec hlavnej funkcie
Vo vyššie uvedenom programe používame na definovanie DEBUG pre program smernicu #ifdef - #endif. Potom sme nedefinovali makro funkciu MAX pomocou direktívy #undef. Direktíva podmienenej kompilácie vytvorí #ifdef - #endif skontroluje, či je nastavený DEBUG a či je nastavený, vypíše v programe niekoľko správ.
Operátori # & ##
Operátory # a ## sú dva špeciálne operátory, ktoré sa používajú na prevod textového tokenu na reťazec, ktorý sa má zobraziť, a na zreťazenie dvoch tokenov.
Ďalej je uvedený príklad demonštrujúci obidvoch týchto operátorov.
#include using namespace std; #define MKSTR( x ) #x #define concat(a, b) a ## b int main () { cout <<'MKSTR(Hello World) = '<< MKSTR(Hello World) << endl; int xy = 100; cout <<'concat(x,y) = '< Výkon:
MKSTR (Hello World) = Hello World
concat (x, y) = 100
Vo vyššie uvedenom programe definujeme MKSTR argumentom x. Má telo #x. Keď tlačíme tento MKSTR pomocou argumentu „Hello World“, vidíme, že kvôli #x sa argument prevedie na reťazec a zobrazí sa na výstup.
Ďalej sme definovali funkciu concat s dvoma argumentmi a a b. V tele zadáme ## b. Výraz a ## b sa rovná ab. Takže v hlavnej funkcii, keď voláme concat (x, y), sa v skutočnosti vyhodnotí na xy, čo sa rovná celočíselnej premennej, ktorú sme definovali.
Ostatné smernice
#chyba
Všeobecná syntax smernice #error je:
#error error_message
Keď kompilátor narazí na direktívu #error, zobrazí chybovú správu a kompilácia sa zastaví. Argument error_message môže obsahovať jedno alebo viac slov s úvodzovkami alebo bez nich.
# riadok
Toto informuje kompilátor, aby zmenil interne uložené číslo a názov súboru kompilátora na dané číslo riadku a názov súboru.
# riadok postupnosť číslic („názov súboru“)
Digit_sequence môže byť celočíselná konštanta.
android interview otázky a odpovede pdf
Príklad:#line 200 test.c
Vo vyššie uvedenom príklade je interne uložené číslo riadku nastavené na 200 a názov súboru sa zmení na test.c.
#pragma
Dodáva kompilátoru inštrukcie definované implementáciou. Tieto pokyny sú špecifické pre prekladač a platformu. Ak sa inštrukcia nezhoduje, smernica sa ignoruje bez vygenerovania syntaktickej chyby.
Preddefinované makrá
C ++ tiež definuje množstvo preddefinovaných makier, ktoré môžu byť použité programátormi.
Niektoré z týchto makier sú uvedené nižšie.
Preddefinované makro Popis __FILE__ Aktuálny názov súboru programu, ktorý sa kompiluje __DÁTUM__ Dátum prekladu zdrojového kódu do objektového kódu vo formáte mesiac / deň / rok __TIME__ Čas vo forme hodín: minút: sekúnd, kedy je program zostavený __LINE__ Číslo aktuálneho riadku programu, ktorý sa kompiluje __cplusplus Celočíselná konštanta, ktorá je definovaná pre každú verziu kompilátora
Nasledujúci program demonštruje tieto makrá v programe.
#include using namespace std; int main () { cout<<'__LINE__ :' << __LINE__ << endl; cout<<'__FILE__ :' << __FILE__ << endl; cout<<'__DATE__ :' << __DATE__ << endl; cout<<'__TIME__ :' << __TIME__ << endl; cout<<'__cplusplus:'<<__cplusplus< Výkon:
__LINE__: 5
__FILE__: prog.cpp
__DATE__: 15. apríla 2019
__TIME__: 12: 09: 15
__cplusplus: 201402
Vyššie uvedený výstup programu je v súlade s vysvetlením preddefinovaných makier vyššie a je samozrejmý.
Záver
V tomto tutoriáli sme videli rôzne preprocesorové smernice poskytované C ++ spolu s ich príkladmi. Direktívy predprocesora nám pomáhajú do istej miery písať efektívnejšie programy a čitateľnejšie programy.
Direktívy o podmienenej kompilácii nám tiež umožňujú vetviť náš programový výstup rôznymi spôsobmi.
=> Celú sériu školení pre C ++ nájdete tu.
Odporúčané čítanie
- Testovanie softvéru Pomoc Partnerský program!
- Píšte a zarábajte - program pre skúsených testerov kvality
- Výukový program pre Unix Pipes: Rúry v programovaní v Unixe
- Funkcie knižnice v C ++
- 70+ NAJLEPŠÍCH návodov pre C ++ Naučte sa programovanie v C ++ ZDARMA
- Argumenty príkazového riadku v C ++
- Iterátory v STL
- Zoznamy inicializátorov v C ++