Uvod v predprocesorske direktive v C

Najpogosteje gre za napačno predstavo, da so predprocesorji ali makri del sestavljenosti programa, vendar je popolnoma napačno. Predprocesorske direktive so vrsta makrov in faza pred izvedbo kompilacije. Lahko rečemo, da gre za nekakšen sklop navodil prevajalniku za izvajanje dejanske kompilacije. Znane so tudi kot daljše konstrukcijske okrajšave za makroe, kar pomeni, da se vrednost makrov zamenja z segmentom kod. Makro je opredeljen s posebnim simbolom in ima simbol, ki se začne z »#«, zato je ta # define vrsta posebnega predprocesorja, ki mu sledi dejanski prevajalnik. V tej temi bomo spoznali direktive o predprocesorjih v C.

Predprocesor ima posebno vrsto predstavitve za svojo identifikacijo, tako kot vsaka direktiva predprocesorja sproži poseben simbol „#“, ki mu sledi identifikator in nato ime direktive. Beli prostor je dovoljen tudi pred in po številki #. Na primer, # vključuje.

Obstajajo določeni elementi ali zmogljivosti, ki jih lahko zagotovi C Proprocesor:

  • Datoteke glave: Vključitev datotek glave je način, na katerega lahko deklaracije nadomestita programska sintaksa in programsko telo.
  • Razširitev makra: Opredelitev makrov je kot skrajšanje dela kode, ki predprocesor C nadomešča makrone z njihovo definicijo v celotnem obdobju.
  • Priprava po pogojih: Glede na različne scenarije ali različne pogoje je vključitev določenih delov programa možna s pogojno sestavo.
  • Nadzor linij: Če uporabljate program za združevanje ali preurejanje nekoga ali več izvornih datotek v vmesno datoteko za kompilacijo, lahko s krmiljenjem vrstic obvestite prevajalnika, od kod izvira vsaka izvorna vrstica.

Vrste direktiv o predprocesorjih

Vse vrste direktiv o predprocesorjih so naslednje:

  1. # definiraj
  2. # vključujejo
  3. # ifdef
  4. # undef
  5. #ifndef
  6. # če
  7. #else
  8. #elif
  9. #endif
  10. # napaka
  11. #pragma

1. #define (Makroni)

Makro je delček kode, ki ga nadomesti nekaj vrednosti kode makra. Katerikoli makro je večinoma opisan in opredeljen s svojo #define direktivo.

Sintaksa:

#define token value

Obstajata dve vrsti makrov:

  • Funkcija - kot makroni
  • Predmeti podobni makromom
Funkcija - kot makroni

Funkcija like-macro deluje skoraj kot klic funkcije.

Na primer:

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

MAX tukaj je makro ime.

Primer:

Izhod:

Predmeti podobni makromom

Objektno podobni makri so vrsta identifikatorja, ki ga nadomesti vrednost. Večinoma se uporablja za predstavljanje numeričnih konstant.

#define PI 3.1415

Tu bo vrednost PI nadomeščena z makro.


Izhod:

2. #vključi

Za direktivo vključuje predprocesorje obstaja še nekaj drugih funkcij. Ima tri različice, ki kodo nadomestijo s trenutno kodo izvornih datotek.

Tri variante so naslednje:

  • #include
  • #include "datoteka"
  • Vključite karkoli drugega

#include

Išče datoteko na definiranem seznamu sistema ali imenikov, kot je določeno, nato poišče standardni seznam sistemskih knjižnic.

#include "datoteka"

Ta vrsta se uporablja za lastne datoteke po meri programa. Poišče se datoteka z imenom datoteke najprej v trenutnem imeniku, nato sistemske datoteke z glavo in trenutni imeniki trenutne datoteke.

#vključi karkoli

Ta vrsta direktive za predprocesorje vključujejo, kadar nobena od preostalih dveh vrst direktive in njeni argumenti ne ustrezajo in ne ustrezajo računski strukturi.

3. #Ifdef

Preveri, ali je makro definiran z # define ali ne. Če je odgovor da, bo izvedel kodo, sicer ne.

Sintaksa:

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

Če želite preklicati definicijo makra, pomeni, da ni definirana in da je pred njo direktiva #undef.

Sintaksa:

#undef token

Izhod:

4. Ifndef

Ta procesor preveri, ali #define definira ali ne #define. Če je odgovor da, izvrši kodo.

Sintaksa:

#Ifndef MACRO
//code
#endif
#If

Ta procesor deluje kot zanka samo, če oceni izraz ali stanje. Če je stanje id resnično, izvrši kodo drugače ne.

Sintaksa:

#if expression
//code
#endif
#else

Direktiva predprocesorja #else se uporablja za oceno izraza ali stanja, če je pogoj #if napačen. Uporablja se lahko z direktivami #if, #elif, #ifdef in #ifndef.

Sintaksa:

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

Primer:

Izhod:

5. # Napaka

Kot že ime pove, je za označevanje napake uporabljena direktiva o predhodniku napake, nato pa prevajalnik poda usodno napako, če je najdena direktiva o napaki in preskoči naslednje korake prevajanja.

Izhod:

6. #pragma

Odvisno je od prevajalnika, saj različni OS in različni stroji ponujajo vse vrste funkcij operacijskega sistema, ki jih uporablja prevajalnik za ponujanje dodatnih informacij prevajalniku.

Sintaksa:

#pragma token

Primer:

Izhod:

Vsak predprocesor ima svoj pomen, kot da se pogojna direktiva uporablja za preverjanje, ali je treba del programa upoštevati na podlagi scenarijev ali ne.

Recimo, da se program želi sestaviti v določenem okolju z določenim konfiguriranjem operacijskega sistema, vendar takoj, ko preide v to fazo kompilacije, vrže napako ali pa lahko da neveljavni kodi le, da svojemu programu daje možnost velikega ne povezati program in ga zagnati med izvajanjem. Obstaja lahko tudi druga možnost, če lahko ista izvorna datoteka z dvema različnima programoma opravi zamudno preverjanje doslednosti ali njene neposredne podatke ali natisne vrednosti podatkov z odpravljanjem napak.

Tudi te scenarije, ki jih je treba ustvariti z računanjem, je mogoče uporabiti za izvajanje na enem stroju z uporabo smernic o predhodni obdelavi.

Zaključek

Izhod iz C Preprocesorja je zelo podoben vhodu, le da so bile vse direktive o predobdelavi zamenjane s praznimi črtami ali belimi presledki. Različne datoteke in formati imajo različne skladnje, ki navajajo, da je bil narejen začetek nove datoteke ali nakazujejo vrnitev na datoteko ali obdelavo pred kompilacijo.

Vsi scenariji se uporabljajo za to, da drugi spoznajo moč predprocesorja C in kako se razvija z različnimi različicami prevajalnika, ki se je začela s standardi GCC in ANSI.

Priporočeni članki

To je vodnik za direktive o predprocesorjih v C. Tukaj razpravljamo o vrstah direktiv o predprocesorjih s skladnjo in primeri. Za več informacij si lahko ogledate tudi naslednje članke -

  1. Povratna številka v C
  2. Razvrščanje v C
  3. Funkcija zastiranja v C
  4. Nadaljujte z izjavo na C
  5. Razvrščanje v C #
  6. Kako deluje hashing funkcija v php?