preprocessor directives c
Podroben pogled na predprocesorske direktive v jeziku C ++.
Predprocesor je edinstvena lastnost C ++. V jeziku C ++ imamo korake, kot so sestavljanje, povezovanje in izvajanje običajnega programa. V resnici imamo v programu C ++ še veliko drugih funkcij, ki jih je treba obdelati, preden prenesemo program za prevajanje.
V ta namen se izvede poseben korak, imenovan predobdelava. Predobdelava se izvede pred postopkom sestavljanja, posebne lastnosti pa se predobdelajo. Kot rezultat se dobi razširjeni program C ++, ki se nato posreduje prevajalniku.
=> Obiščite tukaj, če se želite naučiti C ++ iz nič.
Kaj se boste naučili:
- Pregled
- Direktive o vključitvi datotek
- Direktive o makro definicijah
- Direktive o pogojni sestavi
- # & ## Operaterji
- Druge direktive
- Vnaprej določeni makri
- Zaključek
- Priporočeno branje
Pregled
Posebne značilnosti za predhodno obdelavo se določijo s pomočjo entitete, imenovane 'Predprocesorska direktiva'. Te direktive o predprocesorju sporočajo prevajalniku, da je treba pred prevajanjem predhodno obdelati nekatere informacije v programu C ++, označene z direktivami o predprocesorju.
Upoštevajte, da se v C ++ vse direktive predprocesorja začnejo s simbolom '#'. V trenutku, ko predprocesor (del prevajalnika) naleti na simbol #, se informacije, ki sledijo simbolu #, predhodno obdelajo, preden program posredujejo prevajalniku.
Za razliko od drugih stavkov C ++ se direktive predprocesorja ne končajo s podpičjem.
V tej vadnici bomo raziskali različne smernice predprocesorja, ki jih podpira C ++.
Direktive o vključitvi datotek
#include
Direktiva o vključitvi datotek #include nam omogoča vključitev drugih datotek v naš izvorni program. V naš program lahko s pomočjo teh funkcij vključimo katero koli datoteko glave, ki vsebuje definicije različnih vnaprej določenih funkcij. Datoteke z glavo lahko v naš program vključimo z naslednjo sintakso.
#include
Primer: #include
To smo že videli v naših programih C ++. Glava iostream vsebuje funkcije, potrebne za pretakanje vhodnih / izhodnih podatkov, kot so cout, cin itd.
Ko se naši programi povečujejo ali se funkcionalnost zapleta, bomo morda želeli svoj program razdeliti na različne datoteke ali uvoziti funkcije iz drugih datotek. V tem primeru uporabimo uporabniško določene datoteke. Za vključitev uporabniško določenih datotek v naš program lahko uporabimo naslednjo sintakso direktive #include.
#include “filename”
Primer: #include “vector_int.h”
To je uporabniško določena datoteka glave, ki jo nameravamo vključiti v naš program, da bi uporabili njegovo funkcionalnost.
Spodnji primer kode prikazuje uporabo direktive #include.
kako zagnati datoteke .jar
#include using namespace std; int main() { cout<<'This is an example demonstrating inclusion directive #include'; }
Izhod:
To je primer, ki prikazuje direktivo o vključitvi #include.
Kot je prikazano, smo z direktivo #include vključili funkcionalnost glave v naš program.
Direktive o makro definicijah
#define
Direktiva #define se uporablja za definiranje simbolnih konstant ali makrov v programu C ++.
Splošna oblika direktive #define je:
#define macro_name replacement code
Ko predprocesor naleti na makro v programu, predprocesor nadomesti ta makro s kodo, ki je definirana z direktivo #define, preden se koda posreduje prevajalniku.
Spodnji primer kode prikazuje simbolno konstanto RADIUS, ki je definirana z uporabo direktive #define in njeno uporabo v programu.
#include #define RADIUS 5 using namespace std; int main() { cout<<'Area of a circle : '<<3.142 * RADIUS * RADIUS; }
Izhod:
Površina kroga: 78,55
Kot je prikazano v programu, lahko v naši kodi uporabimo simbolično konstanto RADIUS, ki jo bo nadomestila vrednost, določena zanjo z direktivo #define.
najboljša programska oprema za spremljanje temperature procesorja in procesorja
Za določitev ustrezne kode funkcije lahko uporabimo direktivo #define. Te funkcije so običajno majhne funkcije.
Primer je prikazan spodaj.
#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; }
Izhod:
Površina pravokotnika je: 100
Tu smo z uporabo direktive #define definirali funkcijo REC_AREA, ki zajema dva argumenta, tj. Dolžino in širino, in izračuna površino pravokotnika. V glavni funkciji samo uporabimo ta makro in mu damo dva argumenta, da dobimo površino pravokotnika.
#undef
Makri v programu, definiranem z direktivo #define, trajajo, dokler ni nedefiniran s pomočjo direktive #undef. Ko program naleti na #undef, bo pri nadaljnji uporabi makra (nedefinirano s #undef) prišlo do napake pri prevajanju.
Če v zgornjem programu damo izjavo #undef REC_AREA po celoštevilnih deklaracijah, bo program dal napako pri sestavljanju.
Direktive o pogojni sestavi
Poleg zgoraj pojasnjenih direktiv C ++ ponuja tudi naslednje direktive, ki jih je mogoče uporabiti za pogojno sestavljanje kode. Te direktive je mogoče uporabiti v podobnih vrsticah stavka if-else C ++.
Na primer, s temi pogojnimi direktivami lahko nastavimo DEBUG za program ON ali OFF.
Nekatere direktive o pogojnem prevajanju, ki jih vsebuje C ++, vključujejo:
- #if
- #elif
- #endif
- #ifdef
- #ifndef
- #else
Spodnji program prikazuje uporabo direktiv pogojnega prevajanja v 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; }
Izhod:
Trace: Začetek glavne funkcije
Največ 100
Trace: konec glavne funkcije
V zgornjem programu z direktivo #ifdef - #endif definiramo DEBUG programa. Nato smo z direktivo #undef nedefinirali makro funkcijo MAX. Konstrukcije direktive o pogojnem prevajanju #ifdef - #endif preverjajo, ali je nastavljena DEBUG, in če je nastavljena, v programu natisne nekaj sporočil.
# & ## Operaterji
Operatorja # in ## sta dva posebna operaterja, ki se uporabljata za pretvorbo besedilnega žetona v niz za prikaz in združitev dveh žetonov.
Spodaj je naveden primer, ki prikazuje oba operaterja.
#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) = '< Izhod:
MKSTR (Hello World) = Pozdravljeni svet
concat (x, y) = 100
V zgornjem programu MKSTR definiramo z argumentom x. Ima telo #x. Ko tiskamo MKSTR z argumentom »Hello World«, vidimo, da se zaradi #x argument pretvori v niz in prikaže na izhodu.
Nato smo definirali funkcijo concat z dvema argumentoma a in b. V telesu določimo ## b. Izraz a ## b je enak ab. Tako v glavni funkciji, ko prikličemo concat (x, y), dejansko izračuna xy, kar je enako celoštevilčni spremenljivki, ki smo jo definirali.
Druge direktive
# napaka
Splošna sintaksa direktive #error je:
kako ustvariti junit test primere v javi
#error error_message
Ko prevajalnik naleti na direktivo #error, prikaže sporočilo o napaki in prevajanje se ustavi. Argument error_message lahko vsebuje eno ali več besed z narekovaji ali brez.
# line
To prevajalniku pove, da spremeni interno shranjeno številko vrstice in ime datoteke na dano številko vrstice in ime datoteke.
# line številčno zaporedje (»ime datoteke«)
Zaporedje številke_ je lahko celoštevilčna konstanta.
Primer:# line 200 test.c
V zgornjem primeru je notranje shranjena številka vrstice nastavljena na 200 in ime datoteke se spremeni v test.c.
#pragma
Dostavlja prevajalniku navodila, ki jih določa izvedba. Ta navodila so specifična za prevajalnik in platformo. Če se navodilo ne ujema, se direktiva prezre, ne da bi pri tem nastala sintaksna napaka.
Vnaprej določeni makri
C ++ opredeljuje tudi številne vnaprej določene makre, ki jih lahko uporabljajo programerji.
Nekateri od teh makrov so spodaj navedeni v tabelah.
Vnaprej določen makro Opis __MAPA__ Trenutno ime datoteke programa, ki se prevaja __DATE__ Datum prevoda izvorne kode v objektno kodo v obliki mesec / dan / leto __TIME__ Čas v obliki ura: minuta: sekunda, v kateri je program sestavljen __LINE__ Trenutna številka vrstice programa, ki se prevaja __cplusplus Celoštevilska konstanta, ki je definirana za vsako različico prevajalnika
Naslednji program prikazuje te makre v 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< Izhod:
__LINE__: 5
__FILE__: prog.cpp
__DATE__: 15. aprila 2019
__TIME__: 12: 09: 15
__cplusplus: 201402
Zgornji izhod programa je v skladu z razlago zgoraj vnaprej določenih makrov in je samoumeven.
Zaključek
V tej vadnici smo videli različne smernice predprocesorjev, ki jih ponuja C ++, skupaj z njihovimi primeri. Predprocesorske smernice nam pomagajo pisati učinkovitejše programe in do neke mere bolj berljive programe.
Direktive o pogojnem prevajanju nam omogočajo tudi razvejanje rezultatov programa na različne načine.
=> Poiščite celotno serijo usposabljanj za C ++ tukaj.
Priporočeno branje
- Testiranje programske opreme Pomoč partnerskemu programu!
- Napišite in zaslužite - program za izkušene preizkuševalce kakovosti
- Vadnica za cevi Unix: Cevi v programiranju Unix
- Knjižnične funkcije v jeziku C ++
- 70+ NAJBOLJŠIH vaj za C ++ za BREZPLAČNO učenje C ++ programiranja
- Argumenti ukazne vrstice v jeziku C ++
- Iteratorji v STL
- Seznami inicializatorjev v jeziku C ++