#defineの#と##の意味


詳細1:
defineの命令フォーマットでは、#はStringizing Operatorであり、上記の例のように、パラメータを文字列に変換することを意味します.
#define   paster(n)
printf("token "#n" = %d", token##n)

nは「n」に変換する、前のフラグと後のフラグとの間のスペースは無視される. 
##はToken-Pasting Operatorであり、define命令では2つのtokenを接続することができる. 
例:
#define link(a,b)  a##b 

link(abc,def)はコンパイラによってプリコンパイルされた後abcdefとなる. 
詳細2:
ここで、#define文の#はパラメータを文字列化し、##は2つのパラメータを1つの全体に接続します.define FACTORY_REF(name){#name,Make##name}では#nameが入力したnameを文字列化し,Make##nameはMakeとnameを接続して全体としている.
ステートメント
FACTORY_REF(MP3Decoder)
の意味は次のとおりです.
{“MP3Decoder”, MakeMP3Decoder}