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

#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

Vastaa

Sähköpostiosoitettasi ei julkaista.