トークン演算子 (##)を貼り付けます
二つの数値記号または演算子 () を [ 「トークン連結とオブジェクトに似た関数に似たマクロに」「演算子をマージするというが使用されます。これにより区切り一つのトークンに結合するトークンに従ってマクロ定義の最初または最後のトークンにすることはできません。
マクロ定義の仮パラメーターはトークン連結演算子の前または後ろには仮パラメーターが拡張されておらず実引数に置き換えられます。マクロの配置前に引数で置換は実行されません。
次に トークン文字列 トークン連結演算子が繰り返されてが削除されその前に記述し次のトークンが連結されます。結果のトークンは有効なトークンである必要があります。その場合トークンは代わりにマクロ名を表す走査されます。識別子を連結したトークンに置換の前のプログラムにおける既知の名前を表します。各トークンはプログラム内でまたはコンパイラのコマンド ラインで他の場所で定義されたトークンを表します。演算子の直前または後続の空白は省略可能です。
この例ではプログラムの出力を指定する stringizingトークン連結演算子の使用例です :
#define paster( n ) printf_s( "token" #n " = %d", token##n )
int token9 = 9;
マクロは引数 number の場合が呼び出されます
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);
}