logo

Operatori # e ## in C

Operatore di stringatura (#)

IL operatore di stringa (#) è un operatore del preprocessore che fa sì che venga racchiuso l'argomento effettivo corrispondente virgolette doppie. L'operatore #, generalmente chiamato the stringere operatore, trasforma l'argomento che precede in a stringa tra virgolette . È noto anche come operatore di stringificazione.

Viene generalmente utilizzato con le macro in C.



elenco di inizializzazione Python

Esempio

Il codice C seguente illustra l'utilizzo dell'operatore Stringizing (#).

C








>

>

Produzione

geeksforgeeks>

Spiegazione

npm svuota la cache

Il seguente preprocessore trasforma la riga printf(mkstr(geeksforgeeks)); in printf(geeksforgeeks);

Operatore di incollaggio di token (##)

IL Operatore di incollaggio di token (##) consente ai token utilizzati come argomenti effettivi di essere concatenati per formare altri token. Spesso è utile unire due token in uno solo durante l'espansione delle macro. Questo si chiama incollamento di token o concatenazione di token.

L'operatore di pre-elaborazione '##' esegue l'incollaggio del token. Quando una macro viene espansa, i due token su entrambi i lati di ciascun operatore '##' vengono combinati in un unico token, che quindi sostituisce il '##' e i due token originali nell'espansione della macro.

Esempi

Il codice C seguente illustra l'utilizzo dell'operatore Incolla token (##).

C




nginx

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

>

>

array di restituzione Java
Produzione

30>

Spiegazione

Il preprocessore trasforma printf(%d, concat(x, y)); in printf(%d, xy);

Applicazione dell'operatore Incolla token (##)

Il ## fornisce un modo per concatenare gli argomenti effettivi durante l'espansione della macro. Se un parametro nel testo sostitutivo è adiacente a un ##, il parametro viene sostituito dall'argomento effettivo, il ## e lo spazio bianco circostante vengono rimossi e il risultato viene nuovamente scansionato.