宏定义之“#”

来源:互联网 发布:新型网络搜索引擎 编辑:程序博客网 时间:2024/04/30 10:28

C语言中的宏定义的普通用法在此不举,但就宏定义的“#”用法作此总结,

1、#define  GEEK(p)  if(!p){ printf(“warning ”#p“ failed”);return;}

对上面的例子中“#p”,这个用法不常用,其作用是将p两边加上双引号,就是将宏替换之后的标识符加上引号,如果不如此的话,printf不好显示p

2、见过上面的#p,其实宏定义还支持“##”,两个“#”,这是什么作用呢,还是看例子说话,

#define NAME(geek) is##geek

上面的is##geek作用就是在geek前面加上is,中间没有空格。


扩展:现在我有这样一个需求,将一个宏打印出来,该宏是字符串,前面附加了My

1.0版

#define str(name) My##name

printf(“this is %s\n”,str(geek));

上面的例子,采用gcc编译的时候会报‘Mygeek’ undeclared (first use in this function),究其原因,乃是因为替换宏之后是printf(“this is %s\n”,Mygeek);Mygeek没有双引号,编译器就默认为这是一个变量而不是字符串。

1.1版

#define str(name) “My”#name

printf(“this is %s\n”,str(geek));

上面的方法就可以解决问题,得到想要的结果。

总结采用“##”可以比较方便的将宏扩展为变量,而“#”可以将宏扩展为字符串。


此文章由指尖极客原创,转载请指出其作者和出处!http://blog.csdn.net/wenchao126


原创粉丝点击