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.