preprocessor directives c
Detaljan pogled na direktive o pretprocesoru na C ++.
Pretprocesor je jedinstvena značajka C ++. U C ++-u imamo korake poput kompilacije, povezivanja i izvršavanja za tipični program. U stvarnosti imamo puno drugih značajki u programu C ++ koje treba obraditi prije nego što se proslijedi program za kompilaciju.
U tu svrhu provodi se poseban korak koji se naziva predobrada. Predobrada se provodi prije postupka kompilacije, a posebne značajke se unaprijed obrađuju. Kao rezultat, dobiva se prošireni program C ++, a zatim se predaje prevoditelju.
=> Posjetite ovdje da biste C ++ naučili od nule.
Što ćete naučiti:
- Pregled
- Smjernice za uključivanje datoteka
- Direktive o makro definiciji
- Upute o uvjetnoj kompilaciji
- # & ## Operatori
- Ostale direktive
- Unaprijed definirani makronaredbe
- Zaključak
- Preporučena literatura
Pregled
Posebne značajke za predobradu identificiraju se pomoću entiteta koji se naziva 'Direktiva o pretprocesoru'. Ove direktive o pretprocesoru kažu kompajleru da određene informacije u programu C ++ označene direktivama o pretprocesoru moraju biti unaprijed obrađene prije kompilacije.
Imajte na umu da u C ++-u sve direktive pretprocesora počinju sa simbolom '#'. U trenutku kada pretprocesor (dio kompajlera) naiđe na simbol #, informacije koje slijede nakon simbola # pretprocesiraju se prije prosljeđivanja programa kompajleru.
Za razliku od ostalih izraza C ++, direktive pretprocesora ne završavaju točkom i zarezom.
U ovom uputstvu istražit ćemo razne direktive pretprocesora koje podržava C ++.
Smjernice za uključivanje datoteka
#include
Direktiva o uključivanju datoteka #include omogućuje nam uključivanje drugih datoteka u naš izvorni program. Pomoću tih funkcija u naš program možemo uključiti bilo koju zaglavnu datoteku koja sadrži definicije različitih unaprijed definiranih funkcija. Datoteke zaglavlja možemo uključiti u naš program koristeći sljedeću sintaksu.
#include
Primjer: #include
To smo već vidjeli u našim programima za C ++. Zaglavlje iostream sadrži funkcije potrebne za strujanje ulazno / izlaznih podataka poput cout, cin itd.
Kako naši programi rastu ili funkcija postaje složena, možda bismo željeli podijeliti naš program u razne datoteke ili uvesti funkcionalnost iz ostalih datoteka. U ovom se slučaju koristimo korisnički definiranim datotekama. Da bismo u naš program uključili korisnički definirane datoteke, možemo se poslužiti sljedećom sintaksom direktive #include.
#include “filename”
Primjer: #include “vector_int.h”
Ovo je korisnički definirana datoteka zaglavlja koju namjeravamo uključiti u naš program kako bismo koristili njegovu funkcionalnost.
Sljedeći primjer koda prikazuje upotrebu direktive #include.
aplikacije za pretvaranje YouTube videa u mp3
#include using namespace std; int main() { cout<<'This is an example demonstrating inclusion directive #include'; }
Izlaz:
Ovo je primjer koji pokazuje direktivu o uključivanju #include.
Kao što je prikazano, koristili smo direktivu #include kako bismo u naš program uključili funkcionalnost zaglavlja.
Direktive o makro definiciji
#definirati
Direktiva #define koristi se za definiranje simboličkih konstanti ili makronaredbi u programu C ++.
Opći oblik #define direktive je:
#define macro_name replacement code
Kada pretprocesor naiđe na makronaredbu u programu, pretprocesor zamjenjuje tu makronaredbu kodom koji je definiran pomoću direktive #define prije nego što se kod proslijedi prevoditelju.
Dolje navedeni primjer koda prikazuje simboličku konstantu RADIUS koja je definirana pomoću #define direktive i njezinu upotrebu u programu.
#include #define RADIUS 5 using namespace std; int main() { cout<<'Area of a circle : '<<3.142 * RADIUS * RADIUS; }
Izlaz:
Površina kruga: 78,55
Kao što je prikazano u programu, možemo koristiti simboličku konstantu RADIUS u našem kodu i on će biti zamijenjen vrijednošću definiranom za njega pomoću #define direktive.
kako implementirati hashtable u javi
Pomoću direktive #define možemo definirati odgovarajući funkcijski kod. Te su funkcije obično male funkcije.
Primjer je prikazan u nastavku.
#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; }
Izlaz:
Površina pravokutnika je: 100
Ovdje smo pomoću direktive #define definirali funkciju REC_AREA koja uzima dva argumenta, tj. Duljinu i širinu i izračunava površinu pravokutnika. U glavnoj funkciji samo koristimo ovu makronaredbu i dostavljamo joj dva argumenta da bismo dobili površinu pravokutnika.
#undef
Makronaredbe u programu definiranom direktivom #define traju sve dok nije nedefinirana pomoću direktive #undef. Jednom kada program naiđe na #undef, naknadna upotreba makronaredbe (nedefinirano #undef) dat će pogrešku u kompilaciji.
U gornjem programu, ako samo damo izjavu #undef REC_AREA nakon cjelobrojnih deklaracija, tada će program dati pogrešku pri kompilaciji.
Upute o uvjetnoj kompilaciji
Osim prethodno objašnjenih smjernica, C ++ također nudi sljedeće smjernice koje se mogu koristiti za uvjetnu kompilaciju koda. Te se direktive mogu koristiti na sličnim linijama if-else naredbe C ++-a.
Na primjer, možemo postaviti DEBUG za program ON ili OFF koristeći ove uvjetne direktive.
Neke smjernice uvjetne kompilacije dane u C ++ uključuju:
- #ako
- #elif
- #završi ako
- #ifdef
- #ifndef
- #drugo
Program u nastavku prikazuje upotrebu smjernica uvjetne kompilacije u programu 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; }
Izlaz:
Trag: početak glavne funkcije
Maksimalno je 100
Trag: Kraj glavne funkcije
U gore navedenom programu koristimo direktivu #ifdef - #endif da definiramo DEBUG programa. Tada smo nedefinirali makro funkciju MAX pomoću direktive #undef. Konstrukcije uvjetne kompilacije #ifdef - #endif provjeravaju je li postavljen DEBUG i ako je postavljen, ispisuje nekoliko poruka u programu.
# & ## Operatori
Operatori # i ## dva su posebna operatora koja se koriste za pretvaranje tekstualnog tokena u niz koji će se prikazati i spajanje dva tokena.
koji program otvoriti eps datoteku
Dolje je dat primjer koji prikazuje oba ova operatora.
#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) = '< Izlaz:
MKSTR (Hello World) = Pozdrav svijetu
konkat (x, y) = 100
U gornjem programu definiramo MKSTR argumentom x. Ima tijelo #x. Kada ispisujemo ovaj MKSTR koristeći argument 'Hello World', vidimo da se zbog #x argument pretvara u niz i prikazuje na izlazu.
Dalje, definirali smo funkciju concat s dva argumenta a i b. U tijelu odredimo ## b. Izraz a ## b jednako je ab. Dakle, u glavnoj funkciji kada zovemo concat (x, y), ona zapravo izračunava xy što je jednako cjelobrojnoj varijabli koju smo definirali.
Ostale direktive
#pogreška
Opća sintaksa direktive #error je:
#error error_message
Kada se kompajler susretne s #error direktivom, prikazuje poruku error_message i kompilacija se zaustavlja. Argument error_message može sadržavati jednu ili više riječi s navodnicima ili bez njih.
#crta
To govori prevoditelju da promijeni interno pohranjeni broj redaka i naziv datoteke u prerađivač u zadani broj retka i naziv datoteke.
#crta slijed znamenki (“naziv datoteke”)
Slijed_znaka može biti cjelobrojna konstanta.
Primjer:# linija 200 test.c
U gornjem primjeru, interno pohranjeni broj retka postavljen je na 200, a naziv datoteke promijenjen u test.c.
#pragma
Isporučiteljima isporučuje upute definirane implementacijom. Ove su upute specifične za prevoditelj i platformu. Ako se uputa ne podudara, direktiva se zanemaruje bez generiranja sintaksne pogreške.
Unaprijed definirani makronaredbe
C ++ također definira brojne unaprijed definirane makronaredbe koje programeri mogu koristiti.
Neke od tih makronaredbi dolje su tabelarizirane.
Unaprijed definirana makronaredba Opis __DATOTEKA__ Trenutačno ime datoteke programa koji se kompajlira __DATUM__ Datum prevođenja izvornog koda u objektni kôd u formatu mjesec / dan / godina __VRIJEME__ Vrijeme u obliku sat: minuta: sekunda u kojoj se sastavlja program __CRTA__ Trenutni broj retka programa koji se kompajlira __cplusplus Integer konstanta koja je definirana za svaku verziju kompajlera
Sljedeći program prikazuje ove makronaredbe u programu.
#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< Izlaz:
__LINE__: 5
__FILE__: prog.cpp
__DATUM__: 15. travnja 2019
__ VRIJEME__: 12: 09: 15
__cplusplus: 201402
Izlaz programa u skladu je s objašnjenjem prethodno definiranih makronaredbi i samo je po sebi razumljiv.
Zaključak
U ovom uputstvu vidjeli smo razne smjernice pretprocesora koje pruža C ++ zajedno s njihovim primjerima. Preprocesorske smjernice pomažu nam da donekle napišemo učinkovitije programe i čitljivije programe.
Upute za uvjetnu kompilaciju također nam omogućuju razgranavanje rezultata programa na razne načine.
=> Ovdje potražite cijelu C ++ seriju treninga.
Preporučena literatura
- Testiranje softvera Pomoć Affiliate Program!
- Napišite i zaradite - program za iskusne QA testere
- Vodič za Unix cijevi: Cijevi u Unix programiranju
- Knjižnične funkcije na C ++
- 70+ NAJBOLJIH Vodiča za C ++ za BESPLATNO učenje C ++ programiranja
- Argumenti naredbenog retka na C ++
- Iteratori u STL-u
- Popisi inicijativa u C ++