日々精進

新しく学んだことを書き留めていきます

マクロで動的にシンボルを定義する

Token-Pasting Operator (##)を使うとシンボルを動的に定義出来る。
ここでの動的に、というのは実行時に、という意味では無く文字列を結合してシンボルをつくることができるという意味。
Stringizing Operator (#)を使うとシンボルを文字列に変換できる。

#define paster( n ) printf_s( "token" #n " = %d", token##n )
int token9 = 9;
paster( 9 );

paster( 9 );はStringizing OperatorとToken-Pasting Operatorによって
printf_s( "token" "9" " = %d", token9 );に変換され、
さらに文字列が結合されprintf_s( "token9 = %d", token9 );になる。
これは面白い。