Šioje pamokoje būsite supažindinti su c pirminiais procesoriais ir išmoksite naudoti #include, #define ir sąlyginį kompiliavimą pavyzdžių pagalba.
C išankstinis procesorius yra makroprocesorius (leidžiantis apibrėžti makrokomandas), kuris transformuoja jūsų programą prieš ją kompiliuojant. Šios transformacijos gali būti antraštės failo įtraukimas, makrokomandų išplėtimai ir kt.
Visos pirminio perdirbimo direktyvos prasideda #
simboliu. Pavyzdžiui,
#define PI 3.14
Kai kurie įprasti C pirminio procesoriaus naudojimo būdai yra šie:
Įskaitant antraštės failus: #include
Išankstinis #include
procesorius naudojamas antraštės failams įtraukti į C programas. Pavyzdžiui,
#include
Čia stdio.h
yra antraštės failas. Išankstinio #include
procesoriaus direktyva pakeičia aukščiau esančią eilutę stdio.h
antraštės failo turiniu .
Štai kodėl jums reikia naudoti, #include
kad galėtumėte naudoti tokias funkcijas kaip scanf()
ir printf()
.
Taip pat galite sukurti savo antraštės failą su funkcijos deklaracija ir įtraukti jį į savo programą naudodami šią pirminio procesoriaus direktyvą.
#include "my_header.h"
Apsilankykite šiame puslapyje, kad sužinotumėte daugiau apie antraštės failų naudojimą.
Makrokomandos naudojant #define
Makrokomanda yra kodo fragmentas, kuriam suteikiamas vardas. Naudodami #define
išankstinio procesoriaus direktyvą, galite apibrėžti makrokomandą C.
Štai pavyzdys.
#define c 299792458 // speed of light
Čia, kai programoje naudojame c, jis pakeičiamas 299792458
.
1 pavyzdys: #define preprocessor
#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; )
Veikia kaip makrokomandos
Taip pat galite apibrėžti makrokomandas, kurios veikia panašiai, kaip funkcijos iškvietimas. Tai vadinama makrokomandomis, panašiomis į funkcijas. Pavyzdžiui,
#define circleArea(r) (3.1415*(r)*(r))
Kiekvieną kartą, kai programa susiduria circleArea(argument)
, ji pakeičiama (3.1415*(argument)*(argument))
.
Tarkime, tada argumentą išlaikėme 5, jis išsiplečia taip:
circleArea(5) expands to (3.1415*5*5)
2 pavyzdys: naudokite #define preprocessor
#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; )
Apsilankykite šiame puslapyje, kad sužinotumėte daugiau apie makrokomandas ir #define preprocessor.
Sąlyginis rinkinys
Programuodami C, galite nurodyti pirminį procesorių, įtraukti kodo bloką ar ne. Norėdami tai padaryti, gali būti naudojamos sąlyginės direktyvos.
Tai panašu į if
teiginį su vienu esminiu skirtumu.
if
Pareiškimas yra išbandyta per vykdymo metu patikrinti, ar kodo blokas turėtų būti vykdomas, ar ne KADANGI sąlyginių naudojami įtraukti (arba praleisti) kodo bloką į savo programą prieš egzekuciją.
Sąlyginio naudojimo
- naudokite skirtingą kodą, priklausomai nuo mašinos, operacinės sistemos
- sudarykite tą patį šaltinio failą dviejose skirtingose programose
- neįtraukti tam tikro kodo iš programos, bet išlaikyti jį kaip nuorodą ateityje
Kaip naudoti sąlyginį?
Naudoti sąlyginis, #ifdef
, #if
, #defined
, #else
ir #elseif
yra naudojamas direktyvų.
#ifdef direktyva
#ifdef MACRO // conditional codes #endif
Čia sąlyginiai kodai yra įtraukti į programą tik tuo atveju, jei yra apibrėžtas MACRO.
#if, #elif ir #else direktyva
#if expression // conditional codes #endif
Čia išraiška yra sveiko skaičiaus išraiška (gali būti sveiki skaičiai, simboliai, aritmetinė išraiška, makrokomandos ir pan.).
Sąlyginiai kodai į programą įtraukiami tik tuo atveju, jei išraiškos vertė yra lygi nuliui.
Pasirenkama #else
direktyva gali būti naudojama kartu su #if
direktyva.
#if expression conditional codes if expression is non-zero #else conditional if expression is 0 #endif
Taip pat galite pridėti įdėtą sąlyginę prie savo #if… #else
naudojimo#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
#apibrėžta
Specialus operatorius #defined naudojamas patikrinti, ar tam tikra makrokomanda apibrėžta, ar ne. Jis dažnai naudojamas su #if direktyva.
#if defined BUFFER_SIZE && BUFFER_SIZE>= 2048 // codes
Iš anksto nustatytos makrokomandos
Čia yra keletas iš anksto nustatytų C programavimo makrokomandų.
Makrokomanda | Vertė |
---|---|
__DATE__ | Eilutė su dabartine data |
__FILE__ | Eilutė, kurioje yra failo pavadinimas |
__LINE__ | Sveikas skaičius, nurodantis dabartinį eilutės numerį |
__STDC__ | Jei vadovaujamasi ANSI standartu C, reikšmė yra ne nulinis sveikasis skaičius |
__TIME__ | Eilutė su dabartine data. |
3 pavyzdys: gaukite dabartinį laiką naudodami __TIME__
Ši programa pateikia dabartinį laiką naudodama __TIME__
makrokomandą.
#include int main() ( printf("Current time: %s",__TIME__); )
Rezultatas
Dabartinis laikas: 19:54:39
Rekomenduojami skaitiniai
- Linijos valdymas
- Pragmos
- Išankstinio procesoriaus išvestis
- Kitos direktyvos