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