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
#include
Preprocessoru se koriste za zaglavlje datoteke u C programa. Na primjer,
#include
Evo stdio.h
datoteke zaglavlja. #include
Preprocessoru direktiva zamjenjuje iznad linije sa sadržajem stdio.h
zaglavlje 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 #define
pretprocesorske 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 if
izjavi s jednom glavnom razlikom.
if
Izjava 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
, #else
i #elseif
direktive 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 #else
direktiva može koristiti s #if
direktivom.
#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… #else
upotrebu#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