Uvod u predprocesorske direktive u C

Najčešće se navodi kao zabluda da su preprocesori ili makronaredbe dio sastavljanja programa, ali potpuno je pogrešno. Preprocesorske direktive su vrsta makronaredbi i faza prije kompilacije. Može se reći da su to neke upute koje daju prevoditelju da izvrši stvarnu kompilaciju. Poznate su i kao duže konstrukcijske skraćenice za makroe, što znači da se vrijednost u makroima zamjenjuje segmentom kodova. Makro je definiran posebnim simbolom i ima simbol koji započinje s "#", pa su ovi # define vrsta posebnog pretprocesora koje slijedi stvarni prevoditelj. U ovoj ćemo temi upoznati s pretprocesorskim direktivama u C.

Preprocesor ima posebnu vrstu reprezentacije za svoju identifikaciju kao što se svaka direktiva pretprocesora inicira posebnim simbolom "#", a slijedi identifikator, a zatim naziv direktive. Također je dopušteno bjeljenje prostora prije i nakon #. Na primjer, # uključuje.

Postoje određeni uklapanja ili pogodnosti koje C Preprocesor može pružiti:

  • Datoteke zaglavlja: Uključivanje datoteka zaglavlja način je na koji se deklaracije mogu zamijeniti sintaksom programa i tijelom programa.
  • Proširenje makronaredbe: Definiranje makronaredbi nalik je skraćivanju dijela koda koji C predprocesor zamjenjuje makronaredbe njihovim odgovarajućim definicijama kroz cijelu.
  • Kompilacija prema uvjetima: Prema različitim scenarijima ili različitim uvjetima, uključivanje pojedinih dijelova programa moguće je uvjetnim sastavljanjem.
  • Kontrola crte: Ako koristite program za kombiniranje ili preuređivanje neke ili više izvornih datoteka u intermedijsku datoteku za kompilaciju, možete pomoću kontrole linije obavijestiti sastavljača odakle svaka izvorna linija potječe.

Vrste direktiva o predprocesorima

Sve vrste predprocesorskih direktiva su sljedeće:

  1. # definirati
  2. # uključuju
  3. # ifdef
  4. # undef
  5. #ifndef
  6. # ako
  7. #drugo
  8. #elif
  9. #završi ako
  10. #error
  11. #pragma

1. #define (makronaredbe)

Makronaredba je isječak koda koji se zamjenjuje nekom vrijednošću koda makronaredbe. Bilo koja makronaredba uglavnom je opisana i definirana direktivom #define.

Sintaksa:

#define token value

Postoje dvije vrste makronaredbi:

  • Funkcija - poput makronaredbi
  • Makronaredbe nalik na objekt
Funkcija - poput makronaredbi

Funkcija like-macro djeluje gotovo poput poziva funkcije.

Na primjer:

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

MAX je ovdje ime makronaredba.

Primjer:

Izlaz:

Makronaredbe nalik na objekt

Objektne makronaredbe vrsta su identifikatora zamijenjene vrijednosti. Najčešće se koristi za predstavljanje numeričkih konstanti.

#define PI 3.1415

Ovdje će se vrijednost PI zamijeniti makronaredbom.


Izlaz:

2. #include

Za direktivu o uključivanju pretprocesora postoji i neka druga funkcija. Ima svoje tri varijante koje zamjenjuju kod s trenutnim kodom izvornih datoteka.

Tri su varijante:

  • #include
  • #include”datoteka”
  • Uključite bilo što drugo

#include

Pretražuje datoteku na definiranom popisu sustava ili direktorija kako je navedeno, a zatim traži standardni popis knjižnica sustava.

#include”datoteka”

Ova se vrsta koristi za vlastite prilagođene datoteke u zaglavlju programa. Pretražuje se datoteka koja se zove datoteka prvo u trenutnoj mapi, a zatim datoteke zaglavlja sustava i trenutne mape trenutne datoteke direktorija.

# uključite bilo što

Ova vrsta direktive za predprocesor uključivanja koristi se kada nijedna druga preostala dva tipa direktive i njezini argumenti ne odgovaraju i ne zadovoljavaju strukturu izračuna.

3. #Ifdef

Provjerava je li makronaredba definirana s # define ili ne. Ako je odgovor da, izvršiće ga u suprotnom, neće.

Sintaksa:

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

Otkazati definiciju makronaredbe znači da je nedefinirana i da joj prethodi #undef direktiva.

Sintaksa:

#undef token

Izlaz:

4. Ifndef

Ovaj procesor provjerava je li #define definiran ili ne #define. Ako je odgovor da, izvršava se kod.

Sintaksa:

#Ifndef MACRO
//code
#endif
#If

Ovaj procesor radi kao if petlja, on procjenjuje izraz ili stanje. Ako je uvjet id točan, izvršiće ga u suprotnom.

Sintaksa:

#if expression
//code
#endif
#else

Direktiva #else pretprocesora koristi se za procjenu izraza ili stanja ako je uvjet #if lažan. Može se koristiti s direktivama #if, #elif, #ifdef i #ifndef.

Sintaksa:

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

Primjer:

Izlaz:

5. #Error

Kao što mu ime sugerira, Direktiva za pogrešku pretprocesora koristi se za označavanje pogreške, a zatim prevoditelj daje fatalnu pogrešku ako se pronađe direktiva o pogrešci i preskoči sljedeće korake kompilacije.

Izlaz:

6. #pragma

Ovisi o prevoditelju jer različiti OS i različiti strojevi pružaju sve vrste značajki operacijskog sustava koje kompajler koristi da ponudi dodatne informacije prevoditelju.

Sintaksa:

#pragma token

Primjer:

Izlaz:

Svaki predprocesor ima svoj značaj, kao što se upotrebljava uvjetna direktiva da provjeri treba li dio programa uzeti u obzir na temelju scenarija ili ne.

Pretpostavimo da se program želi sastaviti u određenom okruženju s određenom konfiguracijom operativnog sustava, ali čim pređe u tu fazu kompilacije, on baca pogrešku ili može dati nevaljani kod samo što svom programu daje mogućnost velikog ne povezati program i pokrenuti ga tijekom izvršavanja. Također može postojati i druga mogućnost da ista izvorna datoteka s dva različita programa može izvršiti dugotrajnu provjeru dosljednosti ili njezinih neposrednih podataka ili ispisati vrijednosti podataka otklanjanjem pogrešaka.

Također, ovi se scenariji koji će se stvoriti računanjem također mogu koristiti za pokretanje na jednom stroju pomoću smjernica o unaprijed obradi.

Zaključak

Izlaz iz C Preprocesora jako liči na ulaz, osim što su sve direktive za predradnju zamijenjene praznim linijama ili razmacima. Različite datoteke i formati imaju različite sintakse koji govore da je napravljen početak nove datoteke ili da ukazuje na povratak u datoteku ili obradu treba obaviti prije sastavljanja.

Svi se scenariji koriste kako bi se upoznalo sa snagom C pretprocesora i kako se on razvija s različitim verzijama kompajlera započetim s GCC i ANSI standardima.

Preporučeni članci

Ovo je vodič za direktive o predprocesorima u C. Ovdje smo raspravljali o vrstama pretprocesorskih direktiva sa sintaksom i primjerima. Također možete pogledati sljedeće članke da biste saznali više -

  1. Obrnuti broj u C
  2. Razvrstavanje u C
  3. Funkcija ležanja u C
  4. Nastavite sa izjavom u C-u
  5. Razvrstavanje u C #
  6. Kako funkcionira hashing funkcija u php-u?

Kategorija: