C语言宏替换的一个小问题
浏览:2004次 出处信息
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天十大热文
-
[85] memory prefetch浅析
-
[45] 基本排序算法的PHP实现
-
[45] find命令的一点注意事项
-
[35] Oracle bbed工具的编译
-
[30] 卡诺模型―设计品质与设计价值的思考
-
[28] Inline Form Labels
-
[27] JS中如何判断字符串类型的数字
-
[27] 8大实用又重要Mac使用技巧
-
[26] 两行 JavaScript 代码
-
[24] 小屏幕移动设备网页设计注意事项