C Programiranje

Makronaredba na C jeziku

Makronaredba na C jeziku
Makronaredba na jeziku C dio je koda kojem je dodijeljeno ime. Kada se ime koristi bilo gdje u programu, vrijednost makronaredbe zamjenjuje se prije sastavljanja programa. U ovom ćemo članku detaljno vidjeti kako napisati makronaredbu na jeziku C.

Razmotrite sljedeći kod:

POČETAK
CIJELI n = 5;
PRINT ("Vrijednost n je% d", n);
KRAJ

Gornji kod nije valjani C kod.

Ali sljedeći je kod valjan:

// Primjer1.c
#define START int main ()
#define END
#define INTEGER int
#define PRINT (A, B) printf (A, B)
POČETAK
CIJELI n = 5;
PRINT ("Vrijednost n je% d", n);
KRAJ

Prije kompilacije, makronaredbe START, INTEGER, PRINT i END zamijenjene su njihovom vrijednošću, a kôd postaje važeći C kod. Možemo provjeriti pomoću sljedeće naredbe:

gcc -E Primjer1.c

Ova će se naredba prikazati nakon proširenja svih makronaredbi.

Sada ćemo vidjeti različite vrste makronaredbi:

1. Makronaredbe nalik objektima:

Sintaksa:

#define macro_name macro_value

Ako makronaredba zauzima više redaka, možemo to učiniti na sljedeći način:

#define macro_name macro_value1 \
makro_vrijednost2 \
macro_value3
#define MAX 200

Ova makronaredba izgleda kao podatkovni objekt, zbog čega se ova vrsta makronaredbe naziva objektnom makronaredbom.

// Primjer2.c
// # uključuje
#define MAX 200
int main ()

printf ("MAX vrijednost je:% d", MAX);
return 0;

U Primjer2.c, MAKS je makro. Iz rezultata vidimo da MAKS zamjenjuje se njegovom vrijednošću 200.

2. Makronaredbe nalik funkcijama:

Sintaksa:

#define macro_name () macro_value

ime_makronaredbe je korisničko definirano ime makronaredbe. Par zagrada mora se staviti nakon ime_makronaredbe. Nije dopušten prostor između ime_makronaredbe i zagrade. Također možemo prosljeđivati ​​argumente u ovoj vrsti makronaredbi.

#define add (x, y) x + y

Ova makronaredba izgleda kao poziv funkcije, zato se ova vrsta makronaredba naziva makronaredba nalik funkciji.

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

int a;
plutati b;
a = dodaj (4,5);
b = dodaj (2.5,3.6)
return 0;

U Primjeru3.c, vidjeli smo da za razliku od funkcije C, makronaredba zamjenjuje samo kôd argumentima bez izračuna. Dakle, možemo proslijediti različite vrste podataka koristeći istu makronaredbu.

Ako stavimo razmak između naziva makronaredbe i zagrade, to će raditi isto kao makronaredba nalik na objekt. Ispod primjer C to ilustrira.

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

int a;
plutati b;
a = dodaj (4,5);
b = dodaj (2.5,3.6)

U primjeru4.c, vidjeli smo da se makronaredba zamjenjuje s (x, y) x + y . Isto kao objektna makronaredba.

3. Makronaredba za lijepljenje tokena:
U jeziku C, operator ## koristi se za lijepljenje tokena. Korištenjem ovog operatora možemo kombinirati dva valjana tokena u jedan važeći žeton.
Primjer:

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

int num = MARGE (52,34);
return 0;

Ako pokušamo lijepiti tokene koji ne generiraju valjani token, C kompajler daje pogrešku ili upozorenje.

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

int num = MARGE (52, +);
return 0;

U Primjer6.c, imamo poruku o pogrešci jer nakon kombinacije dva tokena dobivamo nevažeći token '52 + '.

4. Makronaredba za nizanje:
U jeziku C, operator # koristi se za pretvaranje parametra makronaredbe u konstantu niza. Kada operator # prethodi parametru makronaredbe, parametar se pretvara u literal niza. Stringiziranje se može koristiti za makronaredbe nalik objektima i funkcijama.
Primjer:

// Primjer7.c
#define STRINGIZING (x) #x
int main ()

printf (STRINGIZING (Pozdrav svijetu));
return 0;

U Primjer7.c dobili smo niz "Hello World" pomoću STRINGIZING makronaredbe.

Zaključak:

Ovaj je članak naučio o svim vrstama makronaredbi Makronaredbe nalik objektima, Makronaredbe nalik funkciji, Makronaredba za lijepljenje tokena, Makronaredba za nizanje i Makronaredba za nizanje na jeziku C. Sada bez ikakve sumnje možemo koristiti makro u našem programu C.

Kako instalirati League Of Legends na Ubuntu 14.04
Ako ste ljubitelj League of Legends, ovo je prilika za vas da testirate League of Legends. Imajte na umu da je LOL podržan na PlayOnLinux ako ste kori...
Instalirajte najnoviju strategiju igre OpenRA na Ubuntu Linux
OpenRA je Libre / Free Real Time strateški pokretač igre koji stvara rane Westwoodove igre poput klasične Command & Conquer: Red Alert. Distribuirani ...
Instalirajte najnoviji Dolphin Emulator za Gamecube i Wii na Linux
Dolphin Emulator omogućuje vam igranje odabranih Gamecube i Wii igara na Linux osobnim računalima (PC). Dolphin Emulator je slobodno dostupan i emula...