#define中#和##的涵义

详解一:

在define的指令格式中,#为Stringizing Operator,意思是把形参转化为字符串,如上面的例子: 

#define   paster(n)
printf("token "#n" = %d", token##n)

#n即转化为了 "n ",它与前面的标志符和后面的标志符之间的空格将被忽略. 


##为Token-Pasting Operator,在define指令中,它可以把两个token连接在一起. 
例如: 
#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}



猜你喜欢

转载自blog.csdn.net/moruihong/article/details/7896701