一 #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"。