详解一:
在define的指令格式中,#为Stringizing Operator,意思是把形参转化为字符串,如上面的例子:
#define paster(n)
printf("token "#n" = %d", token##n)
#n即转化为了 "n ",它与前面的标志符和后面的标志符之间的空格将被忽略.
例如:
#define link(a,b) a##b
则link(abc,def) 被编译器预编译之后就为abcdef.
详解二:
其中#define语句中的#是把参数字符串化,##是连接两个参数成为一个整体。
#define FACTORY_REF(name) { #name, Make##name }
中#name就是将传入的name进行字符串化,Make##name就是将Make跟name进行连接,使它们成为一个整体。
语句
FACTORY_REF(MP3Decoder)
的意思是:
{“MP3Decoder”, MakeMP3Decoder}