1. ##连接符的用法

在C语言中,## 连接符号由两个井号组成,其功能是在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串,一般跟在宏定义参数的前面。

2.#转换符的用法
#转化符是将传递的参数作为字符串来进行处理。
例如定义如下宏:

#define pasrse( i ) printf( "token" #i " = %d", token##i ) 
//同时定义如下的变量
int token1 = 1;

则调用parse(1)的打印结果为:

#宏展开: printf("token" "1" "= %d", token1);
token1=1

3.宏定义的可变参数
在宏定义中使用可变参数,只需在参数后面加入”…”,然后使用##连接即可
例如下面的例子:

  #define LOG_INFO(fmt, args...) \
      do {                       \
          log_write("LOG_INFO", __func__, __FILE__, __LINE__, fmt, ##args); \
      }while(0)
//其中log_write的原型为:
  void log_write(const char *level, const char *func, const char *file, int line, const char *fmt,
          ...);
来自yaronspace.cn  本文链接:http://yaronspace.cn/blog/archives/1216