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
#include
Esikääntäjä käytetään sisältämään header tiedostot C ohjelmia. Esimerkiksi,
#include
Tässä stdio.h
on otsikkotiedosto. #include
Esikäsittelijän direktiivi korvaa edellä linjassa sisällön stdio.h
otsikkotiedostoon.
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ä #define
esiprosessoridirektiivin 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 if
lausunto, jolla on yksi suuri ero.
if
Lausuma 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
, #else
ja #elseif
direktiivejä 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 #else
direktiiviä voidaan käyttää #if
direktiivin 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… #else
kä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