llsenyue 发表于 2008-7-30 16:44:24

关于宏定义中,为辨认参数而加入的#和##的使用区别

在看傻孩子的书中,宏定义一章
例1:
#define CREATE_BUFF(Name,Size)   int Buff_##Name
例2:
#define CREATE_STR(Name,Str) unsigned char *Name = #Str
两个例子中都是为辨认参数而加入的#和##,但是这里有个问题
两个例子中的##和#是否可以交换

Gorgon_Meducer 发表于 2008-7-31 00:36:04

to 【楼主位】 llsenyue 坏人
   不可以互换。#和##的功能是不同的。
CREATE_BUFF(Example,128);
实际展开的效果是
int Buff_Example;

CREATE_STR(Example,Hello);
实际展开的效果是
unsigned char *Example = "Hello";         //注意,同样是字符串替换,但是这里多了一对引号。

zrwzr5 发表于 2008-7-31 00:48:15

支持傻孩子!加油!A ZA A ZA~~~

lonely88 发表于 2008-8-1 18:39:58

Define   mark

strong,孩子

llsenyue 发表于 2008-8-5 20:53:27

还是有点不明白
意思是Size对应#
      Str对应##
                   吗?

dalianxwj 发表于 2008-8-18 14:22:26

学习了

zcl843 发表于 2008-8-18 15:40:43

#define CREATE_STR(Name,Str) unsigned char *Name = #Str
那这个.为什么不是#define CREATE_STR(Name,Str) unsigned char *##Name = #Str
???##Name

rainyss 发表于 2008-8-19 06:30:00

写起来差不多,但意思完全不同:

#是将宏参数转为C里的字符串,产生实际C代码(串)
##是将宏参数连接成一个标识符,不生成实际代码.

mcu5i51 发表于 2008-8-19 07:08:06

受教了

mydows 发表于 2008-8-19 08:10:39

又学到了一点!

wukaka 发表于 2010-11-1 22:35:47

受教,谢谢

wxx116zh 发表于 2010-11-2 08:58:44

学习了
页: [1]
查看完整版本: 关于宏定义中,为辨认参数而加入的#和##的使用区别