C Eeltöötleja ja makrod

Selles õpetuses tutvustatakse teile c eeltöötlejaid ja õpitakse näidete abil kasutama #include, #define ja tingimuslikku kompileerimist.

C eeltöötlusprotsessor on makro eeltöötleja (võimaldab teil makrosid määratleda), mis muudab teie programmi enne selle kompileerimist. Need teisendused võivad olla päisefaili lisamine, makro laiendused jne.

Kõik eeltöötlemise direktiivid algavad #sümboliga. Näiteks,

 #define PI 3.14

Mõned C-eelprotsessori tavalised kasutusalad on:

Sealhulgas päisefailid: #include

#includeEeltöötluse kasutatakse hulka kaudu faile C programmid. Näiteks,

 #include 

Siin stdio.hon päisefail. #includeEeltöötluse direktiiv asendab eespool kooskõlas sisu stdio.hkaudu faili.

See on põhjus, miks peate kasutama #include enne, kui saate kasutada selliseid funktsioone nagu scanf()ja printf().

Selle eeltöötlusdirektiivi abil saate luua ka oma päisefaili, mis sisaldab funktsiooni deklaratsiooni ja lisada selle oma programmi.

 #include "my_header.h"

Päisefailide kasutamise kohta lisateabe saamiseks külastage seda lehte.

Makrod, mis kasutavad #define

Makro on koodijupp, millele antakse nimi. #defineEeltöötlusdirektiivi abil saate C-s makro defineerida .

Siin on näide.

 #define c 299792458 // speed of light

Siin, kui kasutame programmis c, asendatakse see tähisega 299792458.

Näide 1: #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; )

Funktsioon nagu makrod

Samuti saate määratleda makrod, mis töötavad sarnaselt funktsioonikutsega. See on tuntud kui funktsioonilaadsed makrod. Näiteks,

 #define circleArea(r) (3.1415*(r)*(r))

Iga kord, kui programm kohtab circleArea(argument), asendatakse see nimega (3.1415*(argument)*(argument)).

Oletame, et me läbisime argumendina 5, see laieneb järgmiselt:

 circleArea(5) expands to (3.1415*5*5)

Näide 2: eelprotsessori #define kasutamine

 #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; )

Makrode ja #define preprocessori kohta lisateabe saamiseks külastage seda lehte.

Tingimuslik koostamine

C-programmeerimises saate eeltöötlejat juhendada, kas lisada koodiplokk või mitte. Selleks saab kasutada tingimuslikke direktiive.

See sarnaneb ifühe suurema erinevusega avaldusega.

ifAvaldus testitakse täitmise ajal aega, et vaadata, kas koodiplokk tuleks ellu või mitte arvestades, et conditionals kasutatakse lisada (või jätke) ploki koodi oma programmi enne täitmist.

Tingimuslike kasutusalad

  • kasutage erinevat koodi sõltuvalt masinast, opsüsteemist
  • kompileerida sama lähtefail kahes erinevas programmis
  • teatud kood programmist välja jätta, kuid säilitada see edaspidi viitena

Kuidas kasutada tingimuslikku?

Tingimusliku, #ifdef, #if, #defined, #elseja #elseifdirektiivid kasutatakse.

#ifdef direktiiv

 #ifdef MACRO // conditional codes #endif 

Siin lisatakse tingimuslikud koodid programmi ainult siis, kui MACRO on määratletud.

#if, #elif ja #else direktiiv

 #if expression // conditional codes #endif 

Siin on avaldis täisarvu väljend (võivad olla täisarvud, märgid, aritmeetiline avaldis, makrod ja nii edasi).

Tingimuslikud koodid lisatakse programmi ainult juhul, kui avaldise väärtus on nullist erinev.

Valikulist #elsedirektiivi saab kasutada koos #ifdirektiiviga.

 #if expression conditional codes if expression is non-zero #else conditional if expression is 0 #endif 

Võite lisada ka pesastatud tingimusliku oma #if… #elselehe#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

Spetsiaalset operaatorit #defined kasutatakse selleks, et testida, kas teatud makro on määratletud või mitte. Seda kasutatakse sageli direktiiviga #if.

 #if defined BUFFER_SIZE && BUFFER_SIZE>= 2048 // codes 

Eelmääratud makrod

Siin on mõned C-programmeerimisel eelnevalt määratletud makrod.

Makro Väärtus
__DATE__ Praegune kuupäeva sisaldav string
__FILE__ String, mis sisaldab faili nime
__LINE__ Täisarv, mis tähistab praegust rea numbrit
__STDC__ Kui järgitakse ANSI standardit C, on väärtus nullist täisarv
__TIME__ Praegune kuupäeva sisaldav string.

Näide 3: hankige praegune aeg, kasutades __TIME__

Järgmine programm väljastab __TIME__makro abil praeguse aja .

 #include int main() ( printf("Current time: %s",__TIME__); )

Väljund

 Praegune kellaaeg: 19:54:39

Soovitatavad lugemised

  • Liini juhtimine
  • Pragmasid
  • Eeltöötleja väljund
  • Muud direktiivid

Huvitavad Artiklid...