Preprocessori direktiivid C-keeles

# Pealkiri # Preprocessor Direktiivid: #define, tingimusliku koostamise direktiiv # / pealkiri #
Preprocessor on spetsiaalne programm, mis on osa C-keele kompilaatorist. See on mõeldud programmi teksti eeltöödelda. Preprocessor võimaldab teil lisada tekstiprogrammi faile ja sisestada makromõisted.
Preprocessori töö toimub eri direktiivide (juhiste) abil. Nad on tähistatud võrega #. Lõpus ridade tähistavad direktiivide C-keeles, siis ei saa panna punkti komaga. Peamised preprocessor Direktiivid#Include - lisab teksti määratud failist#Define - seab makro määratluse (makro) või sümboolse konstantse#Undef - tühistab eelmise määratluse#If - tegeleb tingimusliku koostamise tões konstantse ekspressiooni#ifdef - teostab tingimusliku koostamise sümboolse konstantsuse määratlusega#If.

NDEF - teostab sümboolse konstantse ebakindluse tingimusliku koostamise

#Else - tingimusliku koostamise haru ekspressiooni#elif - tingimusliku koostamise filiaali moodustatud ühinemise muidu ja kui#Endif - tingimusliku koostamise filiaali lõpp#Line - Preprocessor muudab praeguse rea numbri ja koostatud faili nime#Error - diagnostilise sõnumi väljastamine#Pragma on tegevus, mis sõltub konkreetsest kompilaatori rakendamisest.#Include direktiiv#Include direktiiv võimaldab teil lisada programmi tekstis määratud faili. Kui päisefail sisaldab raamatukogufunktsioonide kirjeldust ja asub kompilaatori kausta, see koosneb nurgaklassidest <>.
Kui fail on praeguses projektikataloogis, on see märgitud jutumärkidesse ". Teises kataloogis asuva faili jaoks peate täpsustama täieliku tee tsitaatides.#Define direktiiv võimaldab teil sisestada konstantse ja makromõistmise programmi.

Salvestuse üldine vorm

#Define asendamise identifikaator
Väljade identifikaator ja asendamine eraldatakse ühe või mitme tühikuga.#Define direktiiv täpsustab kompilaatori, et teil on vaja asendada stringi määratletud asendus argument, mitte iga argument identifikaator lähtefaili. Identifikaatorit ei asendata, kui see on joonise kommentaaris või pikema ID.
12345678 tähenduses h> #define 3int peamine () {PRINTFF ("% D +% D =% D" , A, A + A); // 3 + 3 = 6 getchar (); Tagasi 0;}
Sõltuvalt konstantsest väärtusest määrab kompilaator selle ühe või teise tüübi. Sufitedite kasutamine, saate pideva tüübi tühistada:

U või u kujutab endast kogu konstanti allkirjastamata kujul (allkirjastamata);


F (või f) võimaldab teil kirjeldada materjali konstantset tüüpi ujuki;


L (või L) võimaldab teil esile tõsta kogu konstant 8 baiti (pikk INT);


L (või L) võimaldab teil kirjeldada materjali konstantset tüüpi pikki topelt

#define A 280U // Sjectimata Int # Määra B 280LU // Sjectimata Long Int # Määrake C 280 // INT (Long Int) #define D 280L // Long Int # Define K 28,0 // Topelt # Define L 28,0F // Float # define m 28,0l // pikad topelt
Süntaksi teine ​​vorm määrab funktsiooniga sarnase makroparameetriga. See vorm võimaldab meil kasutada sulgudes olevate parameetrite valikulist loendit. Pärast makro määramist iga järgneva makrode määramine / argument (argument1, ..., põllumajandus)
Asendusturbe versioon asendatakse, kus tegelikud argumendid asendatakse ametlike argumentide asemel.
Proovi SI: arvutamine Sine Anurgle12345678910111213141516 # Kaasa h> #include h> #include h> #define PI 3.
14159265 # Määrake patt (x) patt (PI * X / 180) INT peamine () {INT C; Süsteem ("CHCP 1251"); Süsteem ("CLS"); PRINTFF ("Sisestage kraadis nurk: Scanf ("% D", & c); Printf ("patt (% D) =% LF", C, pattu (c)); getchar (); getchar (); Tagasi 0;}

Täitmise tulemus


Selliste makromõistetavate definitsioonide erinevus C-keele funktsioonidest on see, et koostamise etapis asendatakse iga identifikaatori kirje vastava koodiga. Seega programmil võib olla identifikaatorile vastavate sama koodi mitu koopiat. Funktsioonidega töötamise korral sisaldab programm 1-koodi eksemplari, mis rakendab kindlaksmääratud funktsiooni ja kontrollib iga kord, kui ta pöördub funktsiooni poole.
Makromääramise saate tühistada #UNDEFi direktiivi abil.
Selliste makrode määratluste kasutamisel tuleb siiski olla ettevaatlik, näiteks 12345678910111213 # hulka h> #define summa (A, B) A + Bint Main () {INT A, B, C, D; A = 3; B = 5; C = (A + B) * 2; // c = (a + b) * 2 d = summa (a, b) * 2; // d = a + b * 2; PRINTFF ("a =% d \ t b =% d \ n", a, b); Printf ("C =% d N d =% d \ N ', C, d); getchar (); Tagasi 0;}
Täitmise tulemus:
Vaikimisi tuleks makro määratluse tekst paigutada samasse rida. Kui soovite makro määratluse teksti uuele reale üle kanda, siis praeguse rea lõpus on sümbol "tagurpidi" sümbol "H> #define summa (a, b) A + \ Bint peamine () {INT A, B, C, D; A = 3; B = 5; C = (A + B) * 2; // c = (a + b) * 2 d = summa (a, b) * 2; // d = a + b * 2; PRINTFF ("a =% d \ t b =% d \ n", a, b); Printf ("C =% d N d =% d \ N ', C, d); getchar (); Tagasi 0;}
Lisaks võimaldab #define direktiivi asendada osa identifikaatorist. Asendatava osa täpsustamiseks kasutati ##. 123456789 # Kaasa h> #define summa (x, y) ; Printf ("% D", summa (1, 2)); // (A1 + A2) Getchar (); Tagasi 0;}
Täitmise tulemus:

Tingimuslik koostamine


Direktiivid #if või # IFDEF / # IFNDEF koos #elif, #else ja #endif kontrollib allikafaili osade koostamist.
Kui kindlaksmääratud väljend pärast #IF-il on mitte-nullväärtus, salvestatakse Ridade rühm konversioonide salvestamisse kohe kohe #IF direktiivi jaoks. Süntaksi tingimuslik direktiiv Järgmine: 1234567 # Kui konstantse ekspressioonirühm Operations # Elif Constant Expressiivse Operatsioonide rühm # Else Operations grupp # ENDIF
Direktiivide # IFDEF / # IFDEF vahe on see, et konstantse ekspressiooni saab määrata ainult #define'i abil.
Iga allikafaili iga #ISi direktiiv peab olema vastav #-sulgemisdirektiiv. Võib esineda mistahes arvu #ifi.
Fi.
F Direktiive, kuid mitte rohkem kui üks #ELSE direktiiv on lubatud. #Elerse direktiiv, kui see on olemas, peaks olema viimane enne direktiivi enne Direktiivi.

Näide


1234567891011121314151617 # Kaasa h> #include h> #define p 2int peamine () {süsteem ("CHCP 1251"); Süsteem ("CLS"); # Kui p == 1 PRINTFF ("haru 1"); # Elif p == 2 printf ("haru 2, p =% d", p); p =% d, p); # lõpp-atchar (); Tagasi 0;}

Täitmise tulemus


Tagasi: SI keel

Navigation

thoughts on “Preprocessori direktiivid C-keeles

Leave a Reply

Your email address will not be published. Required fields are marked *