gcc编译器宏定义做了许多扩展,支持宏定义可变参数列表。
1. 在不支持可变参数列表之前,为了写支持不同参数的打印宏定义,打印Log的宏定义可能会这样写:
#define Log1(format, args1) printf(format, args1)
#define Log2(format, args1, args2) printf(format, args1, args2)
#define Log3(format, args1, args2, args3) printf(format, args1, args2, args3)
Log1("%s\n", "a");
Log2("%s %s\n", "a", "b");
Log3("%s %s %s\n", "a", "b", "c");
这种写法弊端很明显,只要参数个数不一样,就得多写一个宏定义。
2. 在不支持可变参数列表之前,在很多源代码里面经常看到如下写法:
#define Log(args) printf args
Log(("%s %s\n", "a", "b"));
这样做相当于对printf做了简单的替换,只是语义上更好理解一点而已。
3. C99之前gcc对宏定义可变参数列表的支持。
#define Log(format