C Išankstinis procesorius ir makrokomandos

Š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

Įdomios straipsniai...