您的位置:首页 > 其它

#define的一些不常见的用法

2011-12-14 15:25 267 查看
一 #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"。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: