C语言宏替换的一个小问题
浏览:1975次 出处信息
gcc和vc2008都支持宏字符串链接,下面是一个小例子:
#define PRINT_STR(string) printf(#string);
int main(){
PRINT_STR("appleleaf \n");
return 0;
}
出乎意料的是,打印的结果是:
"appleleaf \n",没有换行,还多了两个括号
使用-E展开宏可以看出来宏被翻译为
printf("\"appleleaf \\\\n\"");;
只有这么写才能正确输出:
PRINT_STR(appleleaf \n);
也就是去掉字符串前后的括号。
对于这样的预处理是实现,我设计了一个小case, 想要打印appleleaf回车后再打印abcd:
PRINT_STR(appleleaf \n, abcd);这样显然不行,是两个参数,且第二个参数code引用有问题,linux下面引用不到。
PRINT_STR(“appleleaf \n, abcd”);这样也不行。
预处理器的设计者最初为何设计这种违背直观的替换方案,我还是觉得奇怪。
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:移动产品设计之硬件能力
后一篇:SVN Hook造成SVN提交速度慢的问题 >>
文章信息
- 作者:appleleaf 来源: kernelchina blogs
- 标签: 宏替换
- 发布时间:2011-09-19 13:35:05
近3天十大热文
- [69] Twitter/微博客的学习摘要
- [67] IOS安全–浅谈关于IOS加固的几种方法
- [65] 如何拿下简短的域名
- [64] android 开发入门
- [63] find命令的一点注意事项
- [62] Go Reflect 性能
- [61] 流程管理与用户研究
- [60] Oracle MTS模式下 进程地址与会话信
- [59] 图书馆的世界纪录
- [57] 读书笔记-壹百度:百度十年千倍的29条法则