关于宏定义中,为辨认参数而加入的#和##的使用区别
在看傻孩子的书中,宏定义一章例1:
#define CREATE_BUFF(Name,Size) int Buff_##Name
例2:
#define CREATE_STR(Name,Str) unsigned char *Name = #Str
两个例子中都是为辨认参数而加入的#和##,但是这里有个问题
两个例子中的##和#是否可以交换 to 【楼主位】 llsenyue 坏人
不可以互换。#和##的功能是不同的。
CREATE_BUFF(Example,128);
实际展开的效果是
int Buff_Example;
CREATE_STR(Example,Hello);
实际展开的效果是
unsigned char *Example = "Hello"; //注意,同样是字符串替换,但是这里多了一对引号。 支持傻孩子!加油!A ZA A ZA~~~ Define mark
strong,孩子 还是有点不明白
意思是Size对应#
Str对应##
吗? 学习了 #define CREATE_STR(Name,Str) unsigned char *Name = #Str
那这个.为什么不是#define CREATE_STR(Name,Str) unsigned char *##Name = #Str
???##Name 写起来差不多,但意思完全不同:
#是将宏参数转为C里的字符串,产生实际C代码(串)
##是将宏参数连接成一个标识符,不生成实际代码. 受教了 又学到了一点! 受教,谢谢 学习了
页:
[1]