Programare C

Macro în limbaj C

Macro în limbaj C
O macrocomandă în limbajul C este o bucată de cod căreia i s-a atribuit un nume. Când numele este folosit oriunde în program, valoarea macro este înlocuită înainte de compilarea programului. În acest articol, vom vedea în detaliu cum se scrie o macro în limbaj C.

Luați în considerare următorul cod:

START
INTEGER n = 5;
PRINT („Valoarea lui n este% d”, n);
SFÂRȘIT

Codul de mai sus nu este un cod C. valid.

Dar următorul cod este valid:

// Exemplul 1.c
#define START int main ()
#define END
#define INTEGER int
#define PRINT (A, B) printf (A, B)
START
INTEGER n = 5;
PRINT („Valoarea lui n este% d”, n);
SFÂRȘIT

Înainte de compilare, macro-ul START, INTEGER, PRINT și END a fost înlocuit cu valoarea lor, iar codul devine un cod C valid. Putem verifica folosind următoarea comandă:

gcc -E Exemplul 1.c

Această comandă se va afișa după extinderea tuturor macrocomenzilor.

Acum vom vedea diferite tipuri de macrocomenzi:

1. Macrocomenzi de tip obiect:

Sintaxă:

#define macro_name macro_value

Dacă macrocomanda are mai multe linii, o putem face după cum urmează:

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

Această macrocomandă arată ca un obiect de date, de aceea acest tip de macrocomandă este numită macrocomandă de tip obiect.

// Exemplul 2.c
//#include
#define MAX 200
int main ()

printf („Valoarea MAX este:% d”, MAX);
retur 0;

În Exapmle2.c, MAX este o macro. Din rezultat, observăm că MAX se înlocuiește cu valoarea sa 200.

2. Macro-uri funcționale:

Sintaxă:

#define macro_name () macro_value

macro_name este un nume definit de utilizator al macro-ului. Perechea de paranteză trebuie pusă după macro_name. Nu este permis spațiu între macro_name și paranteză. De asemenea, putem transmite argumente în acest tip de macrocomenzi.

#define add (x, y) x + y

Această macrocomandă arată ca un apel funcțional, de aceea acest tip de macrocomeneală numită macrocomandă funcțională.

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

int a;
plutitor b;
a = adăuga (4,5);
b = adăugați (2.5,3.6)
retur 0;

În Exemplul 3.c, am văzut că spre deosebire de funcția lui C, macro-ul înlocuiește doar codul cu argumente fără a-l calcula. Deci, putem transmite diferite tipuri de date folosind aceeași macro.

Dacă punem un spațiu între numele macro și paranteză, acesta funcționează la fel ca o macro de tip obiect. Mai jos, C Exemplul ilustrează acest lucru.

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

int a;
plutitor b;
a = adăuga (4,5);
b = adăugați (2.5,3.6)

În Exemplul 4.c, am văzut că adăugarea macro este înlocuită cu (x, y) x + y . La fel ca o macro de tip obiect.

3. Macro pentru lipirea jetonului:
În limbajul C, operatorul ## este utilizat pentru lipirea simbolurilor. Folosind acest operator, putem combina două jetoane valide într-un singur jeton valid.
Exemplu:

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

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

Dacă încercăm să lipim simbolul care nu generează un simbol valid, compilatorul C dă o eroare sau un avertisment.

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

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

În Exemplul 6.c, avem un mesaj de eroare deoarece, după o combinație de două jetoane, primim un jeton nevalid „52 +”.

4. Macro pentru Stringizing:
În limbajul C, operatorul # este folosit pentru a converti un parametru macro într-o constantă de șir. Când un operator # precede cu un parametru macro, parametrul se convertește într-un șir literal. Stringizarea poate fi utilizată pentru macro-uri de tip obiect și funcțional.
Exemplu:

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

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

În Exemplul 7.c avem un șir „Hello World” folosind macrocomanda STRINGIZING.

Concluzie:

Acest articol a aflat despre toate tipurile de macro-like Macrocomenzi de tip obiect, Macro-uri funcționale, Macro pentru Token Pasting, Macro pentru Stringizing și Macro pentru Stringizing în limbaj C. Acum putem folosi o macro în programul nostru C fără nici o îndoială.

Emulate Mouse clicks by hovering using Clickless Mouse in Windows 10
Using a mouse or keyboard in the wrong posture of excessive usage can result in a lot of health issues, including strain, carpal tunnel syndrome, and ...
Add Mouse gestures to Windows 10 using these free tools
In recent years computers and operating systems have greatly evolved. There was a time when users had to use commands to navigate through file manager...
Control & manage mouse movement between multiple monitors in Windows 10
Dual Display Mouse Manager lets you control & configure mouse movement between multiple monitors, by slowing down its movements near the border. Windo...