Tekenreeksoperator (#)
De tekenreeksoperator (#) is een preprocessoroperator die ervoor zorgt dat het overeenkomstige feitelijke argument wordt ingesloten dubbele aanhalingstekens. De operator #, die gewoonlijk de rijgen operator, verandert het argument dat eraan voorafgaat in a geciteerde tekenreeks . Het is ook bekend als de stringificatie-operator.
Het wordt over het algemeen gebruikt met macro's in C.
len van string in Java
Voorbeeld
De volgende C-code demonstreert het gebruik van de Stringizing-operator (#).
C
>
>Uitvoer
geeksforgeeks>
Uitleg
De volgende preprocessor draait de regel printf(mkstr(geeksforgeeks)); naar printf(geeksforgeeks);
Token-plakken-operator (##)
De Token-plakken-operator (##) maakt het mogelijk dat tokens die als feitelijke argumenten worden gebruikt, worden samengevoegd om andere tokens te vormen. Het is vaak handig om twee tokens samen te voegen tot één terwijl u macro's uitbreidt. Dit wordt token plakken of token-aaneenschakeling genoemd.
lijst overslaan
De ‘##’-voorverwerkingsoperator voert het plakken van tokens uit. Wanneer een macro wordt uitgebreid, worden de twee tokens aan weerszijden van elke ‘##’-operator gecombineerd tot één token, dat vervolgens de ‘##’ en de twee originele tokens in de macro-uitbreiding vervangt.
Voorbeelden
De volgende C-code demonstreert het gebruik van de Token-pasting-operator (##).
slf4j versus log4j
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;> }> |
>
>Uitvoer
30>
Uitleg
sorteer hoop
De preprocessor transformeert printf(%d, concat(x, y)); in printf(%d, xy);
Toepassing van token-plakken-operator (##)
De ## biedt een manier om feitelijke argumenten samen te voegen tijdens macro-uitbreiding. Als een parameter in de vervangende tekst naast een ## staat, wordt de parameter vervangen door het daadwerkelijke argument, worden de ## en de omringende witruimte verwijderd en wordt het resultaat opnieuw gescand.