Sdílet prostřednictvím


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

Viz také

Referenční dokumentace

Operátory preprocesoru