gcc中的#和##操作符以及调试宏

gcc中的#和##操作符以及调试宏

 

from

http://hi.baidu.com/deep_pro/blog/item/0c297a1e1aa75d1540341746.html

 

gcc在标准c上作了很多扩展,而Linux内核代码也依赖gcc的一些特性,这样限制了使用其他编译器编译内核
gcc本身又支持多种cpu构架,我觉得这样也是Linux的自我保护

#是字符串化操作符,可以把当前内容转换为字符串
##是连接操作符,可以在预处理阶段实现字符串的链接操作

#include <stdio.h>
#include <stdlib.h>

#define dprintf(expr) printf("%s=%d/n",#expr,expr)
#define test(x) test ## x
void test1()
{
printf("this is %s/n",__FUNCTION__);
}
void test2()
{
printf("this is %s /n",__FUNCTION__);
}

int main(int argc, char *argv[])
{
dprintf(1+1);
test(1)();
test(2)();
return EXIT_SUCCESS;
}

根据gcc的这些特性,通常可见两种调试宏
#define DEBUG_OUT (fmt,args...) /
{/
printf("File:%s Function:%s Line:%d",__FILE__,__FUNUCTION__,__LINE__);/
printf(fmt,##args);/
}

#define DEBUG_OUT (fmt,args...) /
printf("FILE:%s Function:%s Line:%d "fmt,__FILE__,__FUNCTION__,__LINE__,##args);

这样的调试宏的缺点是fmt只能是字符串常量,不能像printf一样使用字符串指针了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值