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
#include
Predprocesor se uporablja vključuje datoteke glav za programe C. Na primer
#include
Tu stdio.h
je datoteka z glavo. #include
Direktiva o predprocesorju nadomešča zgornjo vrstico z vsebino stdio.h
datoteke 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 #define
predprocesorske 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 if
izjavi z eno veliko razliko.
if
Izjava 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
, #else
in #elseif
se 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 #else
direktiva se lahko uporablja z #if
direktivo.
#if expression conditional codes if expression is non-zero #else conditional if expression is 0 #endif
V svojo #if… #else
uporabo 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