Š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 #includeprocesorius naudojamas antraštės failams įtraukti į C programas. Pavyzdžiui,
#include
Čia stdio.hyra antraštės failas. Išankstinio #includeprocesoriaus direktyva pakeičia aukščiau esančią eilutę stdio.hantraš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 #defineiš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 į ifteiginį su vienu esminiu skirtumu.
ifPareiš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, #elseir #elseifyra 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 #elsedirektyva gali būti naudojama kartu su #ifdirektyva.
#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… #elsenaudojimo#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








