Поделиться через


Токен-Вставящ оператор (##)

Двойн-номер-знак или «токен-вставить оператор (»##), иногда называется «слияние» используется оператор, и в объект-как и функция-как макросов.Он разрешает отдельные токены быть соединениеым в один токен и поэтому не может быть первым или последним токеном в определении макроса.

Если формальный параметр в определении макроса предшествует или после токен-вставя оператором, формальный параметр немедленно заменяется 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);
}
  

См. также

Ссылки

Операторы препроцессора