宏定义之“#”
来源:互联网 发布:新型网络搜索引擎 编辑:程序博客网 时间: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
- 宏定义之“#”
- IOS之宏定义
- C++之宏定义
- swift之宏定义
- 宏定义之 _FILE_, _LINE_
- Object-C之宏定义
- iOS之宏定义#define
- C语言之宏定义
- C语言之宏定义
- Qt之Q_OBJECT 宏定义
- Qt之Q_PROPERTY宏定义
- IOS基础之宏定义
- 4.6宏定义之带参宏
- c语言之宏定义
- 进程切换之__switch_to宏定义
- C语言宏定义之条件编译
- 宏定义之do-while(0)
- 面试题之inline和宏定义
- 一个游戏程序员的学习资料
- 在vs2010+MFC中动态添加菜单选项
- 计算出二进制数中有多少个1
- 第九周实验报告2
- VPN
- 宏定义之“#”
- 4秒100万条数据导入SQL数据库
- [php笔记]session
- 第九周实验报告1
- cglib动态代理介绍
- jquery实现弹出层的动画效果,相对定位
- 数据库中临时表、表变量和CTE使用优劣对比
- 二叉树的遍历
- jsp到数据库乱码问题