Sdílet prostřednictvím


Operátor vložení tokenu (##)

Dvojčísloznam nebo operátor vkládání tokenů (##), který se někdy označuje jako slučovací nebo kombinační operátor, se používá v makrech podobných objektům i makrech podobných funkcím. Umožňuje připojení samostatných tokenů k jednomu tokenu, a proto nemůže být prvním ani 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 vlastním argumentem. Rozšíření makra není na argumentu provedeno před nahrazením.

Pak se odeberou všechny výskyty operátoru vkládání tokenu v řetězci tokenu a tokeny, které předchází a následují, jsou zřetězeny. Výsledný token musí být platný token. V takovém případě 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 výraz

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);
}
token9 = 9

Viz také

Operátory preprocesoru