Johdanto esikäsittelydirektiiviin C: ssä

Useimmiten se tehdään väärinkäsityksenä, että esikäsittely- tai makrot ovat osa ohjelman kokoamista, mutta se on täysin väärin. Esikäsittelydirektiivit ovat makrojen tyyppi ja vaihe ennen kokoamista. Voidaan sanoa, että nämä ovat joitain ohjeita, jotka annetaan kääntäjälle todellisen kokoamisen suorittamiseksi. Ne tunnetaan myös pidempinä makrojen rakenteellisina lyhenteinä, mikä tarkoittaa, että makrojen arvo korvataan koodisegmentillä. Makro määritetään erityisellä symbolilla, ja siinä on symboli, joka alkaa numerolla “#”. Siksi nämä # define on eräänlainen erityinen esiprosessori, jota seuraa todellinen kääntäjä. Tässä aiheessa aiomme oppia esikäsittelydirektiivit C: ssä.

Esiprosessorilla on erityistyyppinen esitys tunnistusta varten, kuten mikä tahansa esikäsittelydirektiivi aloittaa itsensä erityisellä symbolilla ”#”, jota seuraa tunniste ja sitten direktiivin nimi. Välilyönti on sallittu myös ennen ja jälkeen #. Esimerkiksi # sisältää.

C Esikäsittelylaite voi tarjota tiettyjä varusteita tai laitteita:

  • Otsikkotiedostot : Otsikkotiedostojen sisällyttäminen on tapa, jolla ilmoitukset voidaan korvata ohjelman syntaksilla ja ohjelman rungolla.
  • Makron laajentaminen: Makrojen määritteleminen on kuin koodin palan lyhennys, jonka C-esiprosessori korvaa makrot niiden vastaavilla määritelmillä.
  • Kokoonpano olosuhteiden mukaan: Eri skenaarioiden tai olosuhteiden mukaan tiettyjen ohjelman osien sisällyttäminen on mahdollista ehdollisella kokoamisella.
  • Rivinohjaus: Jos käytät ohjelmaa jonkin tai useamman lähdetiedoston yhdistämiseen tai järjestämiseen välitiedostoksi kokoamiseksi, voit käyttää rivinohjausta ilmoittaa kääntäjälle kustakin lähderivistä.

Esikäsittelydirektiivityypit

Kaiken tyyppiset esikäsittelydirektiivit ovat seuraavat:

  1. # määrittele
  2. # sisältää
  3. # ifdef
  4. # undef
  5. #ifndef
  6. # jos
  7. #else
  8. #elif
  9. #loppu Jos
  10. #virhe
  11. #pragma

1. #define (makrot)

Makro on koodinpätkä, joka korvataan jollain makron koodin arvolla. Mikä tahansa makro kuvataan ja määritellään enimmäkseen sen #define-direktiivillä.

Syntaksi:

#define token value

Makroja on kahta tyyppiä:

  • Funktionaaliset makrot
  • Objektin kaltaiset makrot
Funktionaaliset makrot

Toiminto kuten makro toimii melkein kuin funktion kutsu.

Esimerkiksi:

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

MAX tässä on makronimi.

Esimerkki:

lähtö:

Objektin kaltaiset makrot

Objektimaiset makrot ovat tyyppiä tunnisteelle, joka korvataan arvolla. Sitä käytetään enimmäkseen numeeristen vakioiden esittämiseen.

#define PI 3.1415

Tässä PI-arvo korvataan makrolla.


lähtö:

2. # Sisällytä

Sisältää esikäsittelydirektiiviä on joitain muita toimintoja. Sillä on omat kolme vaihtoehtoa, jotka korvaavat koodin nykyisellä lähdetiedostolla.

Kolme vaihtoehtoa ovat seuraavat:

  • #sisältää
  • # include”tiedosto”
  • Sisällytä kaikki muu

#sisältää

Etsii tiedostoa määritellyssä järjestelmäluettelossa tai hakemistoissa määritellyn mukaisesti ja etsii sitten vakioluettelon järjestelmäkirjastoista.

# include”tiedosto”

Tätä tyyppiä käytetään omissa ohjelman mukautetuissa otsikkotiedostoissa. Etsitään tiedosto nimeltä tiedosto ensin nykyisestä hakemistosta, jota seuraa järjestelmän otsikkotiedostot ja nykyiset hakemistot nykyisen hakemiston hakemistosta.

# sisällyttää mitään

Tämän tyyppistä sisällyttää esikäsittelydirektiiviä käytetään, kun mikään muista jäljellä olevista kahdesta direktiivityypistä ja sen argumentit eivät sovi ja täytä laskentarakennetta.

3. #Ifdef

Tarkistaa, määritteleekö makro # määrittelee vai ei. Jos kyllä, se suorittaa koodin, muuten ei.

Syntaksi:

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

Makron määritelmän peruuttaminen tarkoittaa, että sitä ei ole määritelty ja sitä edeltää #undef-direktiivi.

Syntaksi:

#undef token

lähtö:

4. Jos tarjous

Tämä prosessori tarkistaa, määritteleekö #define #define. Jos kyllä, se suorittaa koodin.

Syntaksi:

#Ifndef MACRO
//code
#endif
#If

Tämä prosessori toimii vain jos silmukka, se arvioi lausekkeen tai tilan. Jos ehto id true, se suorittaa koodin muuten ei.

Syntaksi:

#if expression
//code
#endif
#else

#Else-esikäsittelydirektiiviä käytetään lausekkeen tai tilan arviointiin, jos #if: n ehto on väärä. Sitä voidaan käyttää #if-, #elif-, #ifdef- ja #ifndef-direktiivien kanssa.

Syntaksi:

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

Esimerkki:

lähtö:

5. #Virhe

Kuten nimensä viittaa, virheen esikäsittelyprosessoridirektiiviä käytetään ilmaisemaan virhe ja sitten kääntäjä antaa kohtalokkaan virheen, jos virhedirektiivi löytyy, ja ohittaa seuraavat kokoamisvaiheet.

lähtö:

6. #pragma

Se riippuu kääntäjästä, koska erilaiset käyttöjärjestelmät ja eri koneet tarjoavat kaikentyyppisiä käyttöjärjestelmäominaisuuksia, joita kääntäjä käyttää tarjoamaan lisätietoja kääntäjälle.

Syntaksi:

#pragma token

Esimerkki:

lähtö:

Jokaisella esikäsittelijällä on oma merkityksensä, kuten ehdollisella direktiivillä tarkistetaan, onko osa ohjelmasta otettava huomioon skenaarioiden perusteella vai ei.

Oletetaan, että ohjelma haluaa koota tietyssä ympäristössä tietyn käyttöjärjestelmän kokoonpanon kanssa, mutta heti siirryttyään kokoamisvaiheeseen se antaa virheen tai se voi antaa virheellisen koodin vain antamalla ohjelmalle mahdollisuuden iso linkittääksesi ohjelman ja ajaa sitä suorittamisen aikana. Voi olla myös toinen mahdollisuus, jos sama lähdetiedosto kahdella eri ohjelmalla voi tehdä aikaa vievän tarkkuuden tai välittömien tietojen tarkistamisen tai tulostaa tietojen arvot virheenkorjauksella.

Näitä laskennan avulla luotavia skenaarioita voidaan käyttää myös ajamaan yhdessä koneessa käyttämällä esikäsittelydirektiivejä.

johtopäätös

C-esikäsittelylaitteen lähtö näyttää paljon kuin tulo, paitsi että kaikki esikäsittelydirektiivit on korvattu tyhjillä riveillä tai välilyönteillä. Eri tiedostoilla ja tiedostomuodoilla on erilaiset syntaksit sanomalla, että uusi tiedosto on aloitettu, tai mikä tarkoittaa, että tiedostoon palaaminen tai käsittely olisi suoritettava ennen kokoamista.

Kaikkia skenaarioita käytetään ilmoittamaan muille C-prosessorin teho ja miten se kehittyy GCC- ja ANSI-standardeilla aloitettujen kääntäjän eri versioiden kanssa.

Suositellut artikkelit

Tämä on opas esikäsittelydirektiiveihin C. Tässä keskustellaan esikäsittelydirektiivien tyypeistä syntaksin ja esimerkkien kanssa. Voit myös katsoa seuraavia artikkeleita saadaksesi lisätietoja-

  1. Käänteinen numero C: nä
  2. Lajittelu C: ssä
  3. Hajautustoiminto C: ssä
  4. Jatka lausumaa C: ssä
  5. Lajittelu C #
  6. Kuinka hajautustoiminto toimii php: ssä?