Protsessieelsete direktiivide sissejuhatus C - s

Enamasti tehakse eksiarvamusena, et eeltöötlejad või makrod on osa programmi koostamisest, kuid see on täiesti vale. Protsessorieelsed direktiivid on makrode tüüp ja etapp enne kompileerimist. Võib öelda, et need on mõned juhised, mis antakse kompilaatorile tegeliku kompileerimise teostamiseks. Neid tuntakse ka kui makrode pikemat konstruktiivset lühendit, mis tähendab, et makrodes olev väärtus asendatakse koodide segmendiga. Makro on määratletud spetsiaalse sümboliga ja sellel on sümbol, mis algab tähega #. Seetõttu on need # define eriline eeltöötleja, millele järgneb tegelik kompilaator. Selles teemas tutvume C-e eeltöötlejate direktiividega.

Eeltöötlejal on selle tuvastamiseks spetsiaalne esitusviis, nagu iga eeltöötluse direktiiv algatab ise spetsiaalse sümboli „#”, millele järgneb identifikaator ja seejärel direktiivi nimi. Tühimärk on lubatud ka enne ja pärast #. Näiteks # sisaldab.

C eeltöötleja võib pakkuda teatud funktsioone või võimalusi:

  • Päisefailid: Päisefailide kaasamine on viis, kuidas deklaratsioonid saab asendada programmi süntaksi ja programmi põhiosaga.
  • Makro laiendamine: makrode määratlemine on nagu kooditüki lühendamine, mille C eeltöötleja asendab makrosid nende vastava määratlusega.
  • Kompileerimine tingimuste järgi: Erinevate stsenaariumide või tingimuste kohaselt on programmi teatud osade kaasamine võimalik tingimusliku kompileerimise abil.
  • Liini juhtimine: kui kasutate programmi kellegi või enama lähtefaili ühendamiseks või ümberkorraldamiseks vahefailiks, siis saate rea juhtimise abil teavitada kompilaatorit iga lähteliini lähtepunktist.

Eeltöötlejate direktiivide tüübid

Kõik eeltöötlejate direktiivide tüübid on järgmised:

  1. # define
  2. # sisaldama
  3. # ifdef
  4. # Undef
  5. #ifndef
  6. # kui
  7. #else
  8. #elif
  9. #endif
  10. #error
  11. #pragma

1. #defineeri (makro)

Makro on koodilõik, mis asendatakse makro koodi mõne väärtusega. Igasugust makro kirjeldab ja määratleb enamasti selle direktiiv #define.

Süntaks:

#define token value

Makroid on kahte tüüpi:

  • Funktsioon - nagu makro
  • Objekti moodi makro
Funktsioon - nagu makro

Funktsioon nagu makro töötab peaaegu nagu funktsioonikõne.

Näiteks:

#define MAX(a, b) ((a)>(b) ? (a): (b))

MAX on siin makro nimi.

Näide:

Väljund:

Objekti moodi makro

Objektilaadsed makrod on identifikaatori tüüp, mis asendatakse väärtusega. Enamasti kasutatakse seda arvkonstandite esitamiseks.

#define PI 3.1415

Siin asendatakse PI väärtus makroga.


Väljund:

2. # kaasata

Protsessorieelse direktiivi jaoks on veel mõned funktsioonid. Sellel on oma kolm varianti, mis asendavad koodi praeguse lähtefailide koodiga.

Kolm varianti on järgmised:

  • # kaasata
  • #include ”fail”
  • Kaasa midagi muud

# kaasata

Otsib määratletud süsteemi või kataloogide loendis olevat faili ja otsib siis süsteemiteekide standardloendit.

#include ”fail”

Seda tüüpi kasutatakse programmi enda kohandatud päisefailide jaoks. Kõigepealt otsitakse fail nimega fail praeguses kataloogis, millele järgnevad süsteemi päisefailid ja aktiivse kataloogi praegused kataloogid.

#lisake midagi

Seda tüüpi eelprotsessori hulka kuuluvaid direktiive kasutatakse juhul, kui ükski ülejäänud kahest ülejäänud direktiivitüübist ja selle argumendid ei sobi ega vasta arvutusstruktuurile.

3. #Ifdef

Kontrollib, kas makrot defineerib # define või mitte. Kui jah, siis see käivitab koodi, vastasel juhul ei tee.

Süntaks:

#ifdef MACRO
(
Code body
)
#endif
#undef:

Makro definitsiooni tühistamine tähendab, et see on määratlemata ja sellele eelneb #undef direktiiv.

Süntaks:

#undef token

Väljund:

4. Ifndef

See protsessor kontrollib, kas #define on määratletud või mitte #define. Kui jah, käivitab see koodi.

Süntaks:

#Ifndef MACRO
//code
#endif
#If

See protsessor töötab nagu ainult silmus, see hindab avaldist või tingimust. Kui tingimus id tõene, siis see koodi käivitatakse, vastasel juhul mitte.

Süntaks:

#if expression
//code
#endif
#else

#Else eeltöötleja käsku kasutatakse avalduse või tingimuse hindamiseks, kui #if-i tingimus on vale. Seda saab kasutada direktiivide #if, #elif, #ifdef ja #ifndef korral.

Süntaks:

#if expression
//if body
#else
//else body
#endif

Näide:

Väljund:

5. #Viga

Nagu nimigi ütleb, kasutatakse tõrke tähistamiseks eeltöötlusdirektiivi viga ja siis annab kompilaator fataalse tõrke, kui tõrkedirektiiv leitakse, ja jätab järgmised kompileerimisetapid vahele.

Väljund:

6. #pragma

See sõltub kompilaatorist, kuna erinevad operatsioonisüsteemid ja erinevad masinad pakuvad igat tüüpi opsüsteemi funktsioone, mida kompilaator kasutab kompilaatorile lisateabe pakkumiseks.

Süntaks:

#pragma token

Näide:

Väljund:

Igal eeltöötlejal on oma tähendus, näiteks tingimuslikku käsku kasutatakse selleks, et kontrollida, kas programmi mõnda osa võetakse stsenaariumide alusel arvesse või mitte.

Oletame, et programm soovib kompileerida konkreetses keskkonnas konkreetse operatsioonisüsteemi konfiguratsiooniga, kuid niipea kui see kompileerimise faas läheb, annab see tõrke või võib anda kehtetu koodi, andes lihtsalt oma programmile võimaluse suureks ei programmi linkimiseks ja käivitamiseks selle käivitamise ajal. Võib olla ka teine ​​võimalus, kus sama lähtefail koos kahe erineva programmiga võib teha aeganõudvat järjepidevuse kontrolli või selle viivitamatuid andmeid või prindib silumistes andmete väärtused.

Neid arvutamisega loodavaid stsenaariume saab kasutada ka ühe masina käivitamiseks eeltöötlusdirektiivide abil.

Järeldus

C eeltöötleja väljund sarnaneb sisendiga, välja arvatud see, et kõik eeltöötlusdirektiivid on asendatud tühjade ridade või tühikutega. Erinevatel failidel ja vormingutel on erinevad süntaksid, mis ütlevad, et uus fail on alustatud või mis viitavad faili naasmisele või töötlemisele tuleks enne kompileerimist teha.

Kõiki stsenaariume kasutatakse selleks, et teised saaksid teada C-eeltöötleja võimsusest ja kuidas see areneb GCC ja ANSI standarditega alustatud kompilaatori erinevate versioonidega.

Soovitatavad artiklid

See on juhend C-eeltöötleja direktiivide kohta. Siin käsitleme eeltöötluse direktiivide tüüpe süntaksi ja näidetega. Võite lisateabe saamiseks vaadata ka järgmisi artikleid -

  1. Pöördarv C-ga
  2. Sorteerimine C-s
  3. Räsimisfunktsioon C-s
  4. Jätka avaldust C-s
  5. Sorteerimine C #
  6. Kuidas räsimisfunktsioon töötab php-s?

Kategooria: