logo

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.



întreg în șir

Exemplu

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

C








>

>

Ieșire

cel mai frumos zâmbet din lume
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


string.substring java



// 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;> }>

obiectul java la json
>

>

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.