C语言宏替换的一个小问题
浏览:1957次 出处信息
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天十大热文
- [12] 逃出你的肖申克(五):看不见的牢笼(上)
- [10] linux 简单架设防火墙路由器
- [9] [Perl]Moose::Manual::T
- [8] 分布式系统的事务处理
- [8] 关于不得不在python中使用代理访问网络的
- [8] 位置服务类产品的用户状态和地点管理设想
- [8] 怎样获取PHP变量的变量名之PHP实现
- [8] YSLOW法则中,为什么yahoo推荐用GE
- [8] Eclipse开发Android应用程序入门
- [8] 浅述各平台系统交互设计的不同关注点