# ja ## Operaattorit C:ssä

Merkkioperaattori (#)

The stringizing operaattori (#) on esikäsittelyoperaattori, joka saa vastaavan varsinaisen argumentin sisälle kaksinkertaiset lainausmerkit. #-operaattori, jota yleensä kutsutaan nimellä virittää operaattori, muuttaa sen edeltävän argumentin muotoon a lainattu merkkijono . Se tunnetaan myös stringification-operaattorina.

Sitä käytetään yleensä C:n makrojen kanssa.

Esimerkki

Seuraava C-koodi havainnollistaa Stringizing-operaattorin (#) käyttöä.

C




Lähtö

geeksforgeeks 

Selitys

Seuraava esiprosessori kääntää rivin printf(mkstr(geeksforgeeks)); osaksi printf(geeksforgeeks);

Token-pasting-operaattori (##)

The Token-pasting-operaattori (##) sallii varsinaisina argumentteina käytettyjen tokenien ketjuttamisen muiden merkkien muodostamiseksi. Usein on hyödyllistä yhdistää kaksi merkkiä yhdeksi makroja laajennettaessa. Tätä kutsutaan tokenin liittämiseksi tai merkkien yhdistämiseksi.

Esikäsittelyoperaattori '##' suorittaa tunnuksen liittämisen. Kun makroa laajennetaan, kunkin ##-operaattorin kummallakin puolella olevat kaksi merkkiä yhdistetään yhdeksi tunnukseksi, joka sitten korvaa ##-tunnuksen ja kaksi alkuperäistä merkkiä makrolaajennuksessa.

Esimerkkejä

Seuraava C-koodi osoittaa Token-pasting-operaattorin (##) käytön.

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

Lähtö

30 

Selitys

Esiprosessori muuntaa printf(%d, concat(x, y)); osaksi printf(%d, xy);

Token-pasting-operaattorin sovellus (##)

## tarjoaa tavan ketjuttaa todellisia argumentteja makrolaajennuksen aikana. Jos korvaavan tekstin parametri on ##:n vieressä, parametri korvataan varsinaisella argumentilla, ## ja sitä ympäröivä välilyönti poistetaan ja tulos tarkistetaan.