C Esiprosessori ja makrot

Tässä opetusohjelmassa tutustut c-esiprosessoreihin ja opit käyttämään #include, #define ja ehdollista kokoamista esimerkkien avulla.

C-esiprosessori on makroesiprosessori (jonka avulla voit määrittää makroja), joka muuntaa ohjelman ennen sen kääntämistä. Nämä muunnokset voivat olla otsikkotiedoston sisällyttäminen, makrolaajennukset jne.

Kaikki esikäsittelydirektiivit alkavat #symbolilla. Esimerkiksi,

 #define PI 3.14

Joitakin C-esiprosessorin yleisiä käyttötarkoituksia ovat:

Sisältää otsikkotiedostot: #include

#includeEsikääntäjä käytetään sisältämään header tiedostot C ohjelmia. Esimerkiksi,

 #include 

Tässä stdio.hon otsikkotiedosto. #includeEsikäsittelijän direktiivi korvaa edellä linjassa sisällön stdio.hotsikkotiedostoon.

Siksi sinun on käytettävä #include ennen kuin voit käyttää toimintoja, kuten scanf()ja printf().

Voit myös luoda oman otsikkotiedoston, joka sisältää toimintoilmoituksen, ja sisällyttää sen ohjelmaasi käyttämällä tätä esikäsittelydirektiiviä.

 #include "my_header.h"

Tältä sivulta saat lisätietoja otsikkotiedostojen käytöstä.

Makrot, joissa käytetään #define

Makro on fragmentti koodia, jolle annetaan nimi. Voit määrittää makron C: ssä #defineesiprosessoridirektiivin avulla.

Tässä on esimerkki.

 #define c 299792458 // speed of light

Tässä, kun käytämme c: tä ohjelmassa, se korvataan 299792458.

Esimerkki 1: #define esiprosessori

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

Toimii kuten makrot

Voit myös määrittää makrot, jotka toimivat samalla tavalla kuin toimintokutsu. Tätä kutsutaan toimintomaisiksi makroiksi. Esimerkiksi,

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

Aina kun ohjelma törmää circleArea(argument), se korvataan (3.1415*(argument)*(argument)).

Oletetaan, että läpäisimme 5 argumenttina, se laajenee seuraavasti:

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

Esimerkki 2: #define -prosessorin käyttäminen

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

Tältä sivulta saat lisätietoja makroista ja #define -prosessorista.

Ehdollinen kokoaminen

C-ohjelmoinnissa voit ohjeistaa esikäsittelijän sisällyttämään koodilohkon vai ei. Tätä varten voidaan käyttää ehdollisia direktiivejä.

Se on samanlainen kuin iflausunto, jolla on yksi suuri ero.

ifLausuma testataan suorituksen aikana aikaa tarkistaa, onko koodiosion tulisi suorittaa vai ei ottaa huomioon, että ehtolauseet käytetään sisältämään (tai ohita) koodiosion oman ohjelman ennen toteuttamista.

Ehdollisen käyttö

  • käytä eri koodia koneesta, käyttöjärjestelmästä riippuen
  • käännä sama lähdetiedosto kahteen eri ohjelmaan
  • sulkea tietty koodi pois ohjelmasta, mutta pitää se viitteenä tulevaa tarkoitusta varten

Kuinka ehdollista käytetään?

Ehdollisen, #ifdef, #if, #defined, #elseja #elseifdirektiivejä käytetään.

#ifdef -direktiivi

 #ifdef MACRO // conditional codes #endif 

Tässä ehdolliset koodit sisältyvät ohjelmaan vain, jos MACRO on määritelty.

#if, #elif ja #else direktiivi

 #if expression // conditional codes #endif 

Tässä lauseke on kokonaislukutyypin lauseke (voi olla kokonaislukuja, merkkejä, aritmeettinen lauseke, makroja ja niin edelleen).

Ehdolliset koodit sisältyvät ohjelmaan vain, jos lauseke arvioidaan nollasta poikkeavaksi.

Valinnaista #elsedirektiiviä voidaan käyttää #ifdirektiivin kanssa.

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

Voit myös lisätä sisäkkäisiä ehdollinen omaan #if… #elsekäyttämällä#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 

# määritelty

Erityisoperaattoria #defined käytetään testaamaan, onko tietty makro määritelty vai ei. Sitä käytetään usein #if -direktiivin kanssa.

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

Ennalta määritetyt makrot

Tässä on joitain ennalta määriteltyjä makroja C-ohjelmoinnissa.

Makro Arvo
__DATE__ Merkkijono, joka sisältää nykyisen päivämäärän
__FILE__ Merkkijono, joka sisältää tiedoston nimen
__LINE__ Kokonaisluku, joka edustaa nykyistä rivinumeroa
__STDC__ Jos noudatetaan ANSI-standardia C, arvo on nolla kuin kokonaisluku
__TIME__ Merkkijono, joka sisältää nykyisen päivämäärän.

Esimerkki 3: Hanki nykyinen aika käyttämällä __TIME__

Seuraava ohjelma tuottaa nykyisen ajan __TIME__makrolla.

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

Tuotos

 Nykyinen aika: 19:54:39

Suositeltavat lukemat

  • Linjaohjaus
  • Pragmat
  • Esiprosessorin lähtö
  • Muut direktiivit

Mielenkiintoisia artikkeleita...