宏定义中 可变参数的使用以及# ## 的使用

1、宏定义中的可变参数通常有下列两种方式,在windows中,只支持第一种,而Linux下,两种都支持。

 #define MyPrint1(level,fmt,...) if(level > 1) printf(fmt,__VA_ARGS__); //使用宏定义__VA_ARGS__来引用可变参数

 #define MyPrint2(level,fmt.arg...)  if(level >1) printf(fmt,arg);

2、在宏定义中有时候会使用到“#”以及“##”操作符。

2.1“#”后面直接跟参数,将参数“字符串化”,相当于将参数外部加了一个双引号“”;如果是在可变参数中使用该符号,将将整个可变参数上双引号。示例如下:

#define Myprint3(level,buf) if(level > 1) printf("Myprint3 %s",#buf);
#define MyPrint4(level,fmt,arg...) if(level>1) printf("MyPrint4 %s",#arg);

2.2 在说“##”之前,先说一下宏定义中的分隔符。在宏定义后半部分中,预处理器把"##"本身是作为一种分隔符来使用的的,也就是遇到分隔符的时候,把每一段和前半部分的定义进行比较,如果有在前面定义的则予以替换,否则作为字符串和另一部分相连接。但是连接以后的字符串整体是作为一个变量的名字,而非字符串来看待。示例如下:

#define MyPrint3(a,b) printf("MyPrint3  %s",a##b);

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值