Operatorii # și ## în C

Operator de stringere (#)

The operator de stringere (#) este un operator de preprocesor care face ca argumentul real corespunzător să fie inclus în ghilimele duble. Operatorul #, care este în general numit stringe operator, transformă argumentul pe care îl precede în a șir citat . Este cunoscut și ca operator de stringificare.

Este folosit în general cu macrocomenzi în C.

Exemplu

Următorul cod C demonstrează utilizarea operatorului Stringizing (#).

C




Ieșire

geeksforgeeks 

Explicaţie

Următorul preprocesor transformă linia printf(mkstr(geeksforgeeks)); în printf(geeksforgeeks);

Operator de lipire a simbolurilor (##)

The Operator de lipire a simbolurilor (##) permite ca jetoanele folosite ca argumente reale să fie concatenate pentru a forma alte jetoane. Este adesea util să îmbinați două jetoane într-unul singur în timp ce extindeți macrocomenzi. Aceasta se numește lipire de jetoane sau concatenare de jetoane.

Operatorul de preprocesare „##” efectuează lipirea simbolurilor. Când o macrocomandă este extinsă, cele două jetoane de pe fiecare parte a fiecărui operator „##” sunt combinate într-un singur simbol, care apoi înlocuiește „##” și cele două jetoane originale în extinderea macro.

Exemple

Următorul cod C demonstrează utilizarea operatorului Token-lipting (##).

C




// C program to illustrate (##) operator> #include> > // Macro definition using the Token-pasting operator> #define concat(a, b) a##b> int> main(> void> )> {> > int> xy = 30;> > > // Printing the concatenated value of x and y> > printf> (> '%d'> , concat(x, y));> > return> 0;> }>

Ieșire

30 

Explicaţie

Preprocesorul transformă printf(%d, concat(x, y)); în printf(%d, xy);

Aplicarea operatorului de lipire a simbolurilor (##)

## oferă o modalitate de a concatena argumentele reale în timpul expansiunii macro. Dacă un parametru din textul de înlocuire este adiacent unui ##, parametrul este înlocuit cu argumentul real, ## și spațiul alb din jur sunt eliminate, iar rezultatul este scanat din nou.