C Programmeerimine

Makro C-keeles

Makro C-keeles
C-keeles makro on koodijupp, millele on määratud nimi. Kui nime kasutatakse kõikjal programmis, asendatakse makro väärtus enne programmi kompileerimist. Selles artiklis näeme üksikasjalikult, kuidas makrot C-keeles kirjutada.

Mõelge järgmisele koodile:

START
INTEGER n = 5;
PRINT ("n väärtus on% d", n);
LÕPP

Ülaltoodud kood ei ole kehtiv C-kood.

Kuid järgmine kood on kehtiv:

// Näide1.c
#define START int main ()
#define END
#define INTEGER int
#define PRINT (A, B) printf (A, B)
START
INTEGER n = 5;
PRINT ("n väärtus on% d", n);
LÕPP

Enne kompileerimist on makro START, INTEGER, PRINT ja END asendatud nende väärtusega ja koodist saab kehtiv C-kood. Saame seda kontrollida järgmise käsu abil:

gcc -E näide1.c

See käsk kuvatakse pärast kõigi makrode laiendamist.

Nüüd näeme erinevat tüüpi makrosid:

1. Objektitaolised makrod:

Süntaks:

#define macro_name makro_value

Kui makro võtab mitu rida, saame seda teha järgmiselt:

#define macro_name makro_value1 \
makro_väärtus2 \
makro_väärtus3
#define MAX 200

See makro näeb välja nagu andmeobjekt, mistõttu seda tüüpi makrot nimetatakse objektilaadseks makroks.

// Näide2.c
// # kaasata
#define MAX 200
int main ()

printf ("MAX väärtus on:% d", MAX);
tagastama 0;

Sisse Exapmle2.c, MAX on makro. Väljundi põhjal jälgime seda MAX asendatakse selle väärtusega 200.

2. Funktsioonilaadsed makrod:

Süntaks:

#define macro_name () makro_value

makro_nimi on kasutaja määratud makro nimi. Sulgude paar tuleb panna pärast makro_nimi. Nende vahel pole ruumi makro_nimi ja sulgudes. Samuti võime seda tüüpi makros edastada argumente.

#define add (x, y) x + y

See makro näeb välja nagu funktsioonikõne, mistõttu seda tüüpi makrot nimetatakse funktsioonilaadseks makroks.

Näide3.c
#define add (x, y) x + y
int main ()

int a;
ujuk b;
a = lisama (4,5);
b = lisama (2.5,3.6)
tagastama 0;

Näites3.c, oleme näinud, et erinevalt C funktsioonist asendab makro ainult koodi argumentidega ilma seda arvutamata. Niisiis, saame sama makro abil edastada erinevaid andmetüüpe.

Kui paneme tühiku makro nime ja sulgude vahele, töötab see samamoodi nagu objektitaoline makro. Allpool C näide illustreerib seda.

// Näide4.c
#define add (x, y) x + y
int main ()

int a;
ujuk b;
a = lisama (4,5);
b = lisama (2.5,3.6)

Näites4.c, oleme näinud, et makro lisamine asendatakse (x, y) x + y-ga . Sama mis objektilaadne makro.

3. Makro märkide kleepimiseks:
C-keeles kasutatakse loa kleepimiseks operaatorit ##. Selle operaatori abil saame ühendada kaks kehtivat märki üheks kehtivaks märgiks.
Näide:

Näide5.c
#define MARGE (x, y) x ## y
int main ()

int arv = MARGE (52,34);
tagastama 0;

Kui proovime märkide kleepimist, mis ei loo kehtivat märki, annab C kompilaator vea või hoiatuse.

Näide6.c
#define MARGE (x, y) x ## y
int main ()

int arv = MARGE (52, +);
tagastama 0;

Sisse Näide6.c, meil on tõrketeade, sest pärast kahe loa kombinatsiooni saame vale märgi '52 + '.

4. Stringimise makro:
C-keeles kasutatakse # operaatorit makro parameetri teisendamiseks stringi konstandiks. Kui # operaator eelneb makroparameetriga, teisendab parameeter stringi literaaliks. Stringimist saab kasutada objekti- ja funktsioonilaadsete makrode jaoks.
Näide:

// Näide7.c
#define STRINGIZING (x) #x
int main ()

printf (STRINGIZING (Tere maailm));
tagastama 0;

Sisse Näide7.c meil on string STRINGIZING kasutades makro STRINGIZING.

Järeldus:

See artikkel on õppinud tundma igat tüüpi makrosarnaseid Objektitaolised makrod, Funktsioonitaolised makrod, Makro märkide kleepimiseks, Makro stringi loomiseks ja makro stringi loomiseks C-keeles. Nüüd saame oma C-programmis makrot ilma igasuguse kahtluseta kasutada.

Vulkan Linuxi kasutajatele
Iga uue põlvkonna graafikakaartidega näeme, et mängude arendajad ületavad graafilise truuduse piire ja jõuavad fotorealismile ühe sammu lähemale. Kuid...
OpenTTD vs Simutrans
Oma transpordisimulatsiooni loomine võib olla lõbus, lõõgastav ja äärmiselt köitev. Sellepärast peate endale meelepärase leidmiseks kindlasti proovima...
OpenTTD õpetus
OpenTTD on seal üks populaarsemaid ärisimulatsioonimänge. Selles mängus peate looma suurepärase transpordiettevõtte. Alustate siiski alguses umbes 190...