C语言宏替换的一个小问题
浏览:1989次 出处信息
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天十大热文
-
[73] 使用exp/imp 导入11g数据到9i
-
[63] Java开发岗位面试题归类汇总
-
[50] 如何拿下简短的域名
-
[48] 关于恐惧的自白
-
[47] find命令的一点注意事项
-
[47] 流程管理与用户研究
-
[46] Go Reflect 性能
-
[46] WEB系统需要关注的一些点
-
[46] 图书馆的世界纪录
-
[45] IOS安全–浅谈关于IOS加固的几种方法