Token-Incollando operatore (##)
Il doppio numero segno o “token-incollare„ operator (##), talvolta viene chiamato “l'unione„ operator, viene utilizzato sia nelle macro del tipo di oggetto che a una funzione.Consente i singoli token separati di essere unito in un unico token e pertanto non può essere il primo o l'ultimo token nella definizione macro.
Se un parametro formale in una definizione di macro è preceduto o seguiti dall'operatore di concatenamento dei token, il parametro formale immediatamente viene sostituito da un argomento effettivo non espansa.L'espansione della macro non viene eseguita nell'argomento prima di sostituzione.
Quindi, ogni occorrenza dell'operatore di concatenamento dei token in token-stringa viene rimosso e i token che la precede e che seguono vengono concatenati.il token risultante deve essere un token valido.Se è, il token viene effettuato un controllo per la sostituzione verificarsi se rappresenta un nome di macro.L'identificatore rappresenta il nome da cui i token concatenati saranno noti nel programma prima di sostituzione.Ogni token rappresenta un token definito altrove, nel programma o dalla riga di comando del compilatore.lo spazio vuoto che precede o che segue l'operatore è facoltativo.
In questo esempio viene illustrato l'utilizzo sia di per la creazione di stringhe di token-incollare operatori che specificano il programma restituito:
#define paster( n ) printf_s( "token" #n " = %d", token##n )
int token9 = 9;
Se una macro viene chiamata con un argomento numerico come
paster( 9 );
cede il controllo delle macro
printf_s( "token" "9" " = %d", token9 );
quale diventa
printf_s( "token9 = %d", token9 );
Esempio
// preprocessor_token_pasting.cpp
#include <stdio.h>
#define paster( n ) printf_s( "token" #n " = %d", token##n )
int token9 = 9;
int main()
{
paster(9);
}