C 很奇怪的省略号 用法解决方法

C 很奇怪的省略号 用法
我遇到了一个有趣的宏定义如下:
#define __stringify_1(x...) #x
#define __stringify(x...) __stringify_1(x)

和平时省略号的使用不同, 没有逗号 在 x 和... 之间。
kernel 邮件列表中说这样做是为了可以处理 ,传多个参数,比如
#define FOO a, b, c
__stringify(FOO);

求解这种用法。

------解决方案--------------------
省略号与其它形参之间的逗号可以省略,这是规定的语法便利性。

因为省略号不是id的字符组成,它本身就可以与id分隔开来,再使用逗号分隔符反而显得多余,省略号在这里同时也起着分隔符的作用。
------解决方案--------------------
variadic macro ,确实没见过,呵呵,厉害
define 后面的#x是什么意思?
------解决方案--------------------
我讨厌这些玩意,只会用最普通的。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define func(fmt, ...) printf(fmt, ##__VA_ARGS__);
#define wraper(fmt, ...) func(fmt, ##__VA_ARGS__);

int main(int argc, char* const argv[]) {
wraper("%s is printable\n", "wraper");
return 0;
}
------解决方案--------------------
额,好吧,当了一回学生了!!!
------解决方案--------------------
自问自答