Macrogramele din C sunt foarte importante, dar în C ++ ele sunt folosite mult mai puțin. Prima regulă referitoare la acestea este: nu le utilizați decât dacă vi se cere să faceți acest lucru. Așa cum sa observat, aproape fiecare macro prezintă propriile erori fie în limba, fie în program. Dacă doriți să utilizați macrocomenzi, vă rugăm să citiți cu atenție manualul pentru punerea în aplicare a preprocesorului C la început.
O macrocomandă simplă este definită după cum urmează:
#define nume restul de linie
Când numele apare ca un jeton, acesta este înlocuit de restul liniei.
după expansiune va da:
numit = restul liniei
De asemenea, puteți defini o macrocomandă cu parametri.
#define mac (a, b) argument1: un argument2: b
Atunci când se utilizează mac, trebuie să fie date două șiruri de parametri. După extensia mac (), acestea înlocuiesc a și b.
expanded = mac (foo bar, yuk yuk)
extins = argument1: foo bar argument2: yuk yuk
Macroanele se ocupă cu șiruri de caractere și știu foarte puțin despre sintaxa C ++, și nimic despre tipurile sau scopurile C ++. Compilatorul vede numai forma extinsă a macrocomenzii, astfel încât eroarea din macro este diagnosticată când macrocomanda este extinsă și nu când este definită. Acest lucru duce la mesaje de eroare incomprehensibile.
Aici, astfel de macrocomenzi pot fi destul:
#define Break case, caz
#define nl <<"\n"
#definiti pentru totdeauna pentru (;;)
Aici sunt macrocomenzi complet inutile:
#define PI 3.141593
Iată câteva exemple de macrocomenzi periculoase:
#define SQUARE (a) a * a
#define INCR_xx (xx) ++
Pentru a vedea pentru ce sunt periculoase, încercați să extindeți extensiile în următorul exemplu:
int xx = 0; // contor global
int xx = 0; // variabila locala
xx = SQUARE (xx + 2); // xx = xx + 2 * xx + 2
INCR_xx; // incrementează local xx
dacă (a-DISP == b) / a-= 4==b
Dacă sunteți obligat să utilizați o macrocomandă, utilizați funcția de domeniu de aplicare atunci când faceți referire la nume globale. și să cuprindă apariția numelui parametrului macro în paranteze ori de câte ori este posibil (a se vedea MIN de mai sus).
Observați diferența în rezultatele extinderii acestor două macrocomenzi:
Cu ajutorul macrocomenzilor, vă puteți dezvolta propria limbă. Cel mai probabil, pentru restul va fi de neînțeles. În plus, preprocesorul C este un procesor macro foarte simplu. Când încerci să faci ceva netrivial, probabil vei găsi că este imposibil sau extrem de dificil.