Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Оператор двойного числа или вставки маркеров (##), который иногда называется оператором объединения или объединения, используется как в макросах типа объекта, так и в таких функциях. Он позволяет объединять отдельные маркеры в один маркер, поэтому не может быть первым или последним маркером в определении макроса.
Если перед формальным параметром в определении макроса или после него находится оператор вставки токена, этот формальный параметр сразу же заменяется неразвернутым фактическим аргументом. До замены расширение макроса в аргументе не выполняется.
Затем каждое вхождение оператора вставки маркера в строке маркера удаляется, а маркеры, предшествующие и следующие за ним, объединяются. Результирующий токен должен быть допустимым. Если это так, токен сканируется для возможной замены, если он представляет имя макроса. Идентификатор представляет имя, которое будут иметь объединенные токены в программе до замены. Каждый токен представляет токен, определенный в программе или в командной строке компилятора. Пробел перед или после оператора необязателен.
В приведенном ниже примере показано использование оператора создания строки и оператора вставки токена для задания выходных данных программы.
#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);
}
token9 = 9