Токен-Вставящ оператор (##)
Двойн-номер-знак или «токен-вставить оператор (»##), иногда называется «слияние» используется оператор, и в объект-как и функция-как макросов.Он разрешает отдельные токены быть соединениеым в один токен и поэтому не может быть первым или последним токеном в определении макроса.
Если формальный параметр в определении макроса предшествует или после токен-вставя оператором, формальный параметр немедленно заменяется unexpanded фактическим аргументом.Расширение макроса не выполняется в аргументе до замены.
Затем каждое вхождение токен-вставя оператора in token-string удаляет и токены перед сцеплены и выполните его.Результирующий маркер должен быть допустимым токеном.Если это так, то токен просмотрен для возможной замены если он представляет имя макроса.Идентификатор, представляющий имя, под которым будут полностью в программе сцепленные токены перед заменой.Каждый маркер представляет маркер, заданный в другом месте в рамках программы или в командной строке компилятора.Пробел перед или после оператор является необязательным.
Этот пример иллюстрирует использование операторов и stringizing и токен-вставя в определение выходные данные программы:
#define paster( n ) printf_s( "token" #n " = %d", token##n )
int token9 = 9;
Если макрос вызывается с числовым аргументом как
paster( 9 );
макрос формирует
printf_s( "token" "9" " = %d", token9 );
что становится
printf_s( "token9 = %d", token9 );
Пример
// preprocessor_token_pasting.cpp
#include <stdio.h>
#define paster( n ) printf_s( "token" #n " = %d", token##n )
int token9 = 9;
int main()
{
paster(9);
}