Macros, funcții și fișiere, articole, programare - programare c, delphi, c #

M acroses în 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)

după expansiune va da

extins = argument1: foo bar argument2: yuk yuk

M acționează șiruri de proces și știu foarte puțin despre sintaxa C ++, dar 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.

De la astfel de macrocomenzi poate fi destul:

#define Break case, caz
#define nl <<"\\n"
#definiti pentru totdeauna pentru (;;)
#define MIN (a, b) (((a)<(b))?(a):(b))

Din macrocomenzi complet inutile:

#define PI 3.141593
#define BEGIN #define END>

Iată câteva exemple de macrocomenzi periculoase:

#define SQUARE (a) a * a
#define INCR_xx (xx) ++
#define DISP = 4

Pentru a vedea pentru ce sunt periculoase, încercați să extindeți extensiile în următorul exemplu:


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).

О aruncăm o privire la diferența dintre rezultatele extinderii acestor două macrocomenzi:

int a = m1 (1) + 2;
int b = m2 (1) + 2;

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.