通过宏进行C数组初始化

spc*_*mrn 3 c arrays macros

问题的背景:
void dash(int *n, char c)绘制用'+'分隔的字符c。
参数n是一个整数数组,例如{1、3、2}和'-'表示c应为“ +-+ --- +-+”,这很好用。为了使用破折号,我这样做了{int f={1, 3, 2}; dash(f, '-');},这使得构造可以复制和粘贴。

问题本身:
为了避免我想做的复制粘贴操作#define F(X, Y) {int f=X; dash(f, Y);},使用起来很不错F({1, 3, 2}, '-')。
不幸的是,编译器抱怨F获取了4个(数组的长度+ 1)参数,而不是2个参数。

那么,如何给{1, 3, 2}宏作为参数呢?

Wil*_*ill 5

可变参数宏是C99的功能。

#define F(Y,...) dash((int[]){__VA_ARGS__},Y)
Run Code Online (Sandbox Code Playgroud)

那么如何将{1、3、2}作为参数提供给宏?

F('-',1,3,2);
Run Code Online (Sandbox Code Playgroud)