#define的一些不常见的用法

一  #define后含有 ## 符号,如以下代码所示:

1.

#define DEFAULT_COMMAND_REGISTER(command_request,command,factory) \
  private:    \
  void_t __##command_request##_command##_register()  \
  { \
   (void_t)Hyer::Vision::Cmd::CommandRegister<command_request,command,factory>::commandRegister; \
  }


其中的 ## 表示连接的意思。即如有#define Macro1(a,b) a##b 表示a连接b,int a = Macro1(12,34) ;a的值为1234.

2.用于可变参数宏中

#define DEBUG(fmt, args...) fprintf(stderr, fmt, ##args)

##的作用为:万一 __VA_ARGS__ 为空,省去之前的逗号,以免fprintf出现错误。(http://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.html#Variadic-Macros

二 #define后含有 #@ 符号

#define Macro2(a)  #@a    表示将a加上单引号,返回的是一个const char。如char i = Macro2(1) ;i的值为'1';  char i = Macro(123);则i 的值为'3'。然而,参数不应超过四个字符,否则将会编译出错。返回信息类似于 "too many characters in constant   "。

 

三 #define后只含 # 符号

 #define Macro3(a) #a 表示将a上加上双引号。如char* str =  Macro3(23423);则str的值为"23423"。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值