
C-esiprosessori on makrojen esiprosessori (mahdollistaa makrojen määrittelyn), joka muuttaa ohjelman ennen sen kääntämistä. Nämä muunnokset voivat olla otsikkotiedoston sisällyttämistä, makrojen laajennuksia jne.
Kaikki esikäsittelydirektiivit alkavat #-symbolilla. Esimerkiksi,
#define PI 3.14
Joitakin C-esikäsittelijän yleisiä käyttökohteita ovat:
- Otsikkotiedostojen sisällyttäminen: #include
- Makrot #define
- Esimerkki 1: #define preprocessor
- Funktion kaltaiset makrot
- Esimerkki 2: #define preprocessorin käyttäminen
- Edellytyskompilointi
- Konditionaalien käyttötarkoitukset
- Miten käyttää konditionaalia?
- #ifdef-direktiivi
- #if-, #elif- ja #else-direktiivi
- #defined
- Ennalta määritellyt makrot
- Esimerkki 3: Nykyisen kellonajan hakeminen käyttämällä __TIME__
- Suositellut lukemat
Otsikkotiedostojen sisällyttäminen: #include
#include-esiprosessoria käytetään otsikkotiedostojen sisällyttämiseen C-ohjelmiin. Esimerkiksi
#include <stdio.h>
Tässä stdio.h on otsikkotiedosto. Esikäsittelijän #include-direktiivi korvaa yllä olevan rivin stdio.h otsikkotiedoston sisällöllä.
Se on syy, miksi sinun täytyy käyttää #include <stdio.h> ennen kuin voit käyttää funktioita kuten scanf() ja printf().
Voit myös luoda oman otsikkotiedoston, joka sisältää funktioiden julistuksen, ja sisällyttää sen ohjelmaasi käyttämällä tätä esikäsittelijän direktiiviä.
#include "my_header.h"
Käy tällä sivulla oppiaksesi lisää otsikkotiedostojen käytöstä.
Makrot #define
Makrojen käyttö #define
Makro on koodin pätkä, jolle annetaan nimi. Voit määritellä makron C:ssä käyttämällä esikäsittelijän #define-direktiiviä.
Tässä on esimerkki.
#define c 299792458 // speed of light
Tässä, kun käytämme c:tä ohjelmassamme, se korvataan 299792458:llä.
Esimerkki 1: #define preprocessor
#include <stdio.h>#define PI 3.1415int 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;}
Funktion kaltaiset makrot
Voit myös määritellä makroja, jotka toimivat samalla tavalla kuin funktiokutsu. Tätä kutsutaan funktion kaltaisiksi makroiksi. Esimerkiksi,
#define circleArea(r) (3.1415*(r)*(r))
Joka kerta kun ohjelma kohtaa circleArea(argument), se korvataan (3.1415*(argument)*(argument)):llä.
Asettakaamme, että annoimme argumenttina 5, niin se laajenee seuraavasti:
circleArea(5) expands to (3.1415*5*5)
Esimerkki 2: #define preprocessorin käyttäminen
#include <stdio.h>#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;}
Käy tällä sivulla oppiaksesi lisää makroista ja #define preprocessorista.
Edellytyskompilointi
C-ohjelmoinnissa voit käskeä preprocessoria sisällyttämään koodin lohkoon koodilohkoon. Tätä varten voidaan käyttää ehdollisia direktiivejä.
Se on samanlainen kuin if-lauseke yhdellä merkittävällä erolla.
if-lauseketta testataan suorituksen aikana sen tarkistamiseksi, pitäisikö koodilohko suorittaa vai ei, kun taas ehdollisia direktiivejä käytetään sisällyttämään (tai ohittamaan) koodilohko ohjelmaan ennen suoritusta.
Konditionaalien käyttötarkoitukset
- käyttää erilaista koodia koneesta, käyttöjärjestelmästä riippuen
- kääntää sama lähdetiedosto kahteen eri ohjelmaan
- jättää tietty koodi pois ohjelmasta, mutta pitää sen referenssinä myöhempää tarkoitusta varten
Miten käyttää konditionaalia?
Konditionaalin käyttämiseen käytetään direktiivejä #ifdef, #if, #defined, #else ja #elseif.
#ifdef-direktiivi
#ifdef MACRO // conditional codes#endif
Tässä ehdolliset koodit sisällytetään ohjelmaan vain, jos MACRO on määritelty.
#if-, #elif- ja #else-direktiivi
#if expression // conditional codes#endif
Tässä lauseke on kokonaislukutyyppinen lauseke (voi olla kokonaislukuja, merkkejä, aritmeettisia lausekkeita, makroja ja niin edelleen).
Edellytyskoodit sisällytetään ohjelmaan vain, jos lauseke arvioidaan nollasta poikkeavaksi arvoksi.
Vapaaehtoista #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ä ehdollisia koodeja #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
#defined
Erikoisoperaattoria #defined käytetään testaamaan, onko tietty makro määritelty vai ei. Sitä käytetään usein yhdessä #if-direktiivin kanssa.
#if defined BUFFER_SIZE && BUFFER_SIZE >= 2048 // codes
Ennalta määritellyt makrot
Tässä on joitakin ennalta määriteltyjä makroja C-ohjelmoinnissa.
| Makro | Value |
|---|---|
__DATE__ |
A merkkijono, joka sisältää senhetkisen päivämäärän |
__FILE__ |
A. merkkijono, joka sisältää tiedostonimen |
__LINE__ |
Kokonaisluku, joka edustaa nykyistä rivinumeroa |
__STDC__ |
Jos noudattaa ANSI-standardia C, niin arvo on nollasta poikkeava kokonaisluku |
__TIME__ |
A merkkijono, joka sisältää nykyisen päivämäärän. |
Esimerkki 3: Nykyisen kellonajan hakeminen käyttämällä __TIME__
Oheinen ohjelma antaa nykyisen kellonajan käyttämällä __TIME__-makroa.
#include <stdio.h>int main(){ printf("Current time: %s",__TIME__); }
Tulostus
Current time: 19:54:39
Suositellut lukemat
- Rivinohjaus
- Pragmat
- Preprosessorin tulostus
- Muut direktiivit