C Predprocesor in makri

V tej vadnici se boste seznanili s predprocesorji c in se s pomočjo primerov naučili uporabljati #include, #define in pogojno kompilacijo.

Predprocesor C je makroprocesor (omogoča določanje makrov), ki pretvori vaš program, preden je preveden. Te transformacije so lahko vključitev datoteke glave, razširitve makrov itd.

Vse smernice za predhodno obdelavo se začnejo s #simbolom. Na primer

 #define PI 3.14

Nekatere pogoste uporabe predprocesorja C so:

Vključno z datotekami glave: #include

#includePredprocesor se uporablja vključuje datoteke glav za programe C. Na primer

 #include 

Tu stdio.hje datoteka z glavo. #includeDirektiva o predprocesorju nadomešča zgornjo vrstico z vsebino stdio.hdatoteke glave.

To je razlog, zakaj morate uporabiti #include , preden lahko uporabite funkcije, kot so scanf()in printf().

Lahko tudi ustvarite svojo lastno datoteko glave, ki vsebuje izjavo funkcije, in jo vključite v svoj program s to direktivo predprocesorja.

 #include "my_header.h"

Obiščite to stran, če želite izvedeti več o uporabi datotek glave.

Makri, ki uporabljajo #define

Makro je fragment kode, ki dobi ime. Makro lahko definirate v jeziku C z uporabo #definepredprocesorske direktive.

Tu je primer.

 #define c 299792458 // speed of light

Tukaj, ko v našem programu uporabimo c, se nadomesti z 299792458.

Primer 1: #define predprocesor

 #include #define PI 3.1415 int main() ( float radius, area; printf("Enter the radius: "); scanf("%f", &radius); // Notice, the use of PI area = PI*radius*radius; printf("Area=%.2f",area); return 0; )

Deluje kot makri

Določite lahko tudi makre, ki delujejo na podoben način kot klic funkcije. To je znano kot funkcijski makri. Na primer

 #define circleArea(r) (3.1415*(r)*(r))

Vsakič, ko se program sreča circleArea(argument), ga nadomesti (3.1415*(argument)*(argument)).

Recimo, da smo kot argument nato podali 5, ta pa se razširi, kot spodaj:

 circleArea(5) expands to (3.1415*5*5)

Primer 2: Uporaba #define predprocesorja

 #include #define PI 3.1415 #define circleArea(r) (PI*r*r) int main() ( float radius, area; printf("Enter the radius: "); scanf("%f", &radius); area = circleArea(radius); printf("Area = %.2f", area); return 0; )

Obiščite to stran, če želite izvedeti več o makrih in #define predprocesorju.

Pogojna kompilacija

Pri programiranju C lahko predprocesorju naročite, ali naj vključuje blok kode ali ne. Za to se lahko uporabijo pogojne direktive.

Podobno je ifizjavi z eno veliko razliko.

ifIzjava je preizkušen v času izvajanja, da preveri, ali je treba kode, izvedeni ali ne ker se Pogojniki uporabljajo za vključitev (ali preskočite) blok kode v programu pred izvedbo.

Uporabe pogojnega

  • uporabite drugačno kodo, odvisno od naprave in operacijskega sistema
  • zbrati isto izvorno datoteko v dveh različnih programih
  • izključiti določeno kodo iz programa, vendar jo ohraniti kot referenco za prihodnje namene

Kako uporabljati pogojno?

Za uporabo pogojno, #ifdef, #if, #defined, #elsein #elseifse uporabljajo direktive.

Direktiva #ifdef

 #ifdef MACRO // conditional codes #endif 

Tu so pogojne kode vključene v program samo, če je definiran MACRO.

Direktiva #if, #elif in #else

 #if expression // conditional codes #endif 

Tu je izraz izraz celoštevilčnega tipa (lahko so cela števila, znaki, aritmetični izraz, makri in tako naprej).

Pogojne kode so vključene v program le, če je izraz ovrednoten na vrednost, ki ni nič.

Neobvezna #elsedirektiva se lahko uporablja z #ifdirektivo.

 #if expression conditional codes if expression is non-zero #else conditional if expression is 0 #endif 

V svojo #if… #elseuporabo lahko dodate tudi ugnezdene pogojne#elif

 #if expression // conditional codes if expression is non-zero #elif expression1 // conditional codes if expression is non-zero #elif expression2 // conditional codes if expression is non-zero #else // conditional if all expressions are 0 #endif 

#defined

Posebni operator #defined se uporablja za preizkušanje, ali je določen makro definiran ali ne. Pogosto se uporablja z direktivo #if.

 #if defined BUFFER_SIZE && BUFFER_SIZE>= 2048 // codes 

Vnaprej določeni makri

Tu je nekaj vnaprej določenih makrov v programiranju C.

Makro Vrednost
__DATE__ Niz, ki vsebuje trenutni datum
__FILE__ Niz, ki vsebuje ime datoteke
__LINE__ Celo število, ki predstavlja trenutno številko vrstice
__STDC__ Če sledi standardu ANSI C, potem je vrednost celo število, ki ni nič
__TIME__ Niz, ki vsebuje trenutni datum.

Primer 3: Pridobite trenutni čas z uporabo __TIME__

Naslednji program prikaže trenutni čas z uporabo __TIME__makra.

 #include int main() ( printf("Current time: %s",__TIME__); )

Izhod

 Trenutni čas: 19:54:39

Priporočena branja

  • Krmiljenje linije
  • Pragme
  • Izhod predprocesorja
  • Druge direktive

Zanimive Članki...