C Ohjelmointi

Makro C-kielellä

Makro C-kielellä
Makro C-kielellä on koodinpätkä, jolle on annettu nimi. Kun nimeä käytetään missä tahansa ohjelmassa, makroarvo korvataan ennen ohjelman kokoamista. Tässä artikkelissa näemme yksityiskohtaisesti, kuinka makro kirjoitetaan C-kielellä.

Harkitse seuraavaa koodia:

ALKAA
INTEGER n = 5;
PRINT ("n: n arvo on% d", n);
LOPPU

Yllä oleva koodi ei ole kelvollinen C-koodi.

Mutta seuraava koodi on kelvollinen:

// Esimerkki 1.c
#define START int main ()
#define END
#define INTEGER int
#define TULOSTA (A, B) printf (A, B)
ALKAA
INTEGER n = 5;
PRINT ("n: n arvo on% d", n);
LOPPU

Ennen kääntämistä makro START, INTEGER, PRINT ja END on korvattu niiden arvolla, ja koodista tulee kelvollinen C-koodi. Voimme tarkistaa seuraavan komennon avulla:

gcc -E Esimerkki 1.c

Tämä komento näkyy, kun kaikki makrot on laajennettu.

Nyt näemme erityyppisiä makroja:

1. Objektin kaltaiset makrot:

Syntaksi:

#define macro_name makroarvo

Jos makro vie useamman kuin yhden rivin, voimme tehdä sen seuraavasti:

#define macro_name makroarvo1 \
makroarvo2 \
makroarvo3
#define MAX 200

Tämä makro näyttää dataobjektilta, minkä vuoksi tämän tyyppistä makroa kutsutaan objektimäiseksi makroksi.

// Esimerkki 2.c
//#sisältää
#define MAX 200
int main ()

printf ("MAX-arvo on:% d", MAX);
paluu 0;

Sisään Exapmle2.c, MAX on makro. Lähdön perusteella havaitsemme sen MAX korvataan sen arvolla 200.

2. Toimintomaiset makrot:

Syntaksi:

#define macro_name () makro_arvo

makron_nimi on käyttäjän määrittelemä makron nimi. Pari sulkeita on lisättävä makron_nimi. Välissä ei ole tilaa makron_nimi ja sulkeet. Voimme välittää argumentteja myös tämän tyyppisissä makroissa.

#define add (x, y) x + y

Tämä makro näyttää funktiokutsulta, minkä vuoksi tämän tyyppistä makroa kutsutaan funktion kaltaiseksi makroksi.

// Esimerkki 3.c
#define add (x, y) x + y
int main ()

int a;
kellua b;
a = lisää (4,5);
b = lisää (2.5,3.6)
paluu 0;

Esimerkissä 3.c, Olemme nähneet, että toisin kuin C: n funktio, makro korvaa vain koodin argumenteilla laskematta sitä. Joten voimme välittää eri tietotyypin samalla makrolla.

Jos laitamme välilyönnin makron nimen ja sulkeiden väliin, se toimii samalla tavalla kuin objektimäinen makro. Alla oleva esimerkki C kuvaa tätä.

// Esimerkki 4.c
#define add (x, y) x + y
int main ()

int a;
kellua b;
a = lisää (4,5);
b = lisää (2.5,3.6)

Esimerkissä 4.c, olemme havainneet, että makron lisäys korvataan (x, y) x + y . Sama kuin objektimainen makro.

3. Makro tunnuksen liittämistä varten:
C-kielellä ## -operaattoria käytetään tunnuksen liittämiseen. Tämän operaattorin avulla voimme yhdistää kaksi kelvollista tunnusta yhdeksi kelvolliseksi tunnukseksi.
Esimerkki:

// Esimerkki 5.c
#define MARGE (x, y) x ## y
int main ()

int numero = MARGE (52,34);
paluu 0;

Jos yritämme tunnuksen liittämistä, joka ei luo kelvollista tunnusta, C-kääntäjä antaa virheen tai varoituksen.

// Esimerkki 6.c
#define MARGE (x, y) x ## y
int main ()

int numero = MARGE (52, +);
paluu 0;

Sisään Esimerkki 6.c, meillä on virheilmoitus, koska kahden tunnuksen yhdistelmän jälkeen saamme virheellisen tunnuksen '52 + '.

4. Makro merkkijonoa varten:
C-kielellä # -operaattoria käytetään muuttamaan makro-parametri merkkijonovakiona. Kun # -operaattori edeltää makroparametria, parametri muuntuu merkkijonon kirjaimeksi. Stringointia voidaan käyttää olio- ja toimintomaisissa makroissa.
Esimerkki:

// Esimerkki 7.c
#define STRINGIZING (x) #x
int main ()

printf (STRINGIZING (Hello World));
paluu 0;

Sisään Esimerkki 7.c meillä on merkkijono "Hello World" käyttämällä STRINGIZING-makroa.

Päätelmä:

Tämä artikkeli on oppinut kaikentyyppisistä makrokuvista Objektin kaltaiset makrot, Toimintomaiset makrot, Makro tunnuksen liittämistä varten, Makro merkkijonoille ja makro merkkijonoille C-kielellä. Nyt voimme käyttää makroa C-ohjelmassa epäilemättä.

Viisi parasta ergonomista tietokonehiirtä Linux-tuotteille
Aiheuttaako pitkäaikainen tietokoneen käyttö kipua ranteessasi tai sormissasi?? Onko sinulla nivelten jäykkyys ja sinun on jatkuvasti ravistettava kät...
How to Change Mouse and Touchpad Settings Using Xinput in Linux
Most Linux distributions ship with “libinput” library by default to handle input events on a system. It can process input events on both Wayland and X...
Remap your mouse buttons differently for different software with X-Mouse Button Control
Maybe you need a tool that could make your mouse's control change with every application that you use. If this is the case, you can try out an applica...