C Predprocesor i makronaredbe

U ovom vodiču upoznat ćete se s c pretprocesorima i naučit ćete koristiti #include, #define i uvjetnu kompilaciju uz pomoć primjera.

C pretprocesor je makroprocesor (omogućuje vam definiranje makronaredbi) koji transformira vaš program prije nego što je kompiliran. Te transformacije mogu biti uključivanje datoteke zaglavlja, proširivanje makronaredbi itd.

Sve smjernice za predobradu započinju #simbolom. Na primjer,

 #define PI 3.14

Neke od uobičajenih upotreba pretprocesora C su:

Uključujući datoteke zaglavlja: #include

#includePreprocessoru se koriste za zaglavlje datoteke u C programa. Na primjer,

 #include 

Evo stdio.hdatoteke zaglavlja. #includePreprocessoru direktiva zamjenjuje iznad linije sa sadržajem stdio.hzaglavlje datoteke.

To je razlog zašto morate koristiti #include prije nego što budete mogli koristiti funkcije poput scanf()i printf().

Također možete stvoriti vlastitu datoteku zaglavlja koja sadrži deklaraciju funkcije i uključiti je u svoj program pomoću ove pretprocesorske direktive.

 #include "my_header.h"

Posjetite ovu stranicu da biste saznali više o korištenju zaglavnih datoteka.

Makronaredbe pomoću #define

Makronaredba je fragment koda kojem je dato ime. Makronaredbu u C možete definirati pomoću #definepretprocesorske direktive.

Evo primjera.

 #define c 299792458 // speed of light

Ovdje, kada u našem programu koristimo c, zamjenjuje se s 299792458.

Primjer 1: #define pretprocesor

 #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; )

Funkcija poput makronaredbi

Također možete definirati makronaredbe koje rade na sličan način poput poziva funkcije. To je poznato kao makronaredbe slične funkcijama. Na primjer,

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

Svaki put kad se program susretne circleArea(argument), zamjenjuje ga (3.1415*(argument)*(argument)).

Pretpostavimo da smo tada kao argument predali 5, a on se širi kao dolje:

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

Primjer 2: Korištenje #define pretprocesora

 #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; )

Posjetite ovu stranicu da biste saznali više o makronaredbama i #define pretprocesoru.

Uvjetna kompilacija

U programiranju na C, pretprocesoru možete uputiti da uključuje blok koda ili ne. Da bi se to učinilo, mogu se koristiti uvjetne direktive.

Slično je ifizjavi s jednom glavnom razlikom.

ifIzjava je testiran za vrijeme izvršenja provjeriti je li blok koda treba biti izvršen ili ne, dok, su uvjetne koriste uključiti (ili preskočiti) blok koda u svoj program prije izvršenja.

Upotrebe uvjetnog

  • koristite drugačiji kod ovisno o stroju i operativnom sustavu
  • kompajlirati istu izvornu datoteku u dva različita programa
  • izuzeti određeni kôd iz programa, ali ga zadržati kao referencu za buduću svrhu

Kako koristiti uvjetni?

Za korištenje uvjetno, #ifdef, #if, #defined, #elsei #elseifdirektive koriste.

#ifdef direktiva

 #ifdef MACRO // conditional codes #endif 

Ovdje su uvjetni kodovi uključeni u program samo ako je definiran MACRO.

#if, #elif i #else Directive

 #if expression // conditional codes #endif 

Ovdje je izraz izraz cjelobrojnog tipa (mogu biti cijeli brojevi, znakovi, aritmetički izraz, makronaredbe i tako dalje).

Uvjetni kodovi uključeni su u program samo ako se izraz procjenjuje na vrijednost koja nije nula.

Izborna se #elsedirektiva može koristiti s #ifdirektivom.

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

Također možete dodati ugniježđeni uvjetni uvjet za #if… #elseupotrebu#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 

#definirano

Posebni operator #defined koristi se za ispitivanje je li određena makronaredba definirana ili ne. Često se koristi s #if direktivom.

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

Unaprijed definirani makronaredbe

Evo nekoliko unaprijed definiranih makronaredbi u C programiranju.

Makro Vrijednost
__DATE__ Niz koji sadrži trenutni datum
__FILE__ Niz koji sadrži naziv datoteke
__LINE__ Cijeli broj koji predstavlja trenutni broj retka
__STDC__ Ako slijedi ANSI standard C, tada je vrijednost cijeli broj koji nije nula
__TIME__ Niz koji sadrži trenutni datum.

Primjer 3: Dohvatite trenutno vrijeme pomoću __TIME__

Sljedeći program daje trenutno vrijeme pomoću __TIME__makronaredbe.

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

Izlaz

 Trenutno vrijeme: 19:54:39

Preporučena čitanja

  • Kontrola linije
  • Pragme
  • Izlaz predprocesora
  • Ostale smjernice

Zanimljivi članci...