Operátor vložení tokenu (##)
Operátor znaménka dvojitého čísla neboli operátor „vložení tokenu“ (##), která se někdy nazývá operátor „slučování“, se používá v makrech podobných objektu nebo funkci.Umožňuje sloučit samostatné tokeny do jediného tokenu a proto nemůže být prvním nebo posledním tokenem v definici makra.
Pokud je formální parametr v definici makra předcházen nebo následován operátorem vložení tokenu, je formální parametr okamžitě nahrazen nerozbaleným skutečným argumentem.Rozšíření makra není na argumentu provedeno před nahrazením.
Poté je každý výskyt operátoru vložení tokenu v řetězci tokenu odebrán a tokeny, které jej předcházejí a následují jsou zřetězeny.Výsledný token musí být platný token.Pokud je, je tento token prověřen pro možná nahrazení, pokud představuje název makra.Identifikátor představuje název, kterým bude tento zřetězený token v programu před nahrazením znám.Každý token představuje token definovaný jinde, buď v programu nebo na příkazovém řádku kompilátoru.Mezera před nebo za tímto operátorem je nepovinná.
Tento příklad ukazuje použití operátorů převodu na řetězec a vložení tokenu v určeném výstupu programu:
#define paster( n ) printf_s( "token" #n " = %d", token##n )
int token9 = 9;
Je-li makro voláno s číselným argumentem jako
paster( 9 );
vrátí makro
printf_s( "token" "9" " = %d", token9 );
, který se stane
printf_s( "token9 = %d", token9 );
Příklad
// preprocessor_token_pasting.cpp
#include <stdio.h>
#define paster( n ) printf_s( "token" #n " = %d", token##n )
int token9 = 9;
int main()
{
paster(9);
}