C的结构体不定参

在C语言中通常使用内建宏__VA_ARGS__来实现不定参,因此可以也可以使用它实现结构体参数的不定参.

实现如下:

#include <stdio.h>
#define func(...) func_vars((struct vars_stu){__VA_ARGS__})
struct vars_stu {
    int x;
    int y;
    int z;
};
void func_vars(struct vars_stu vs) {
    printf("x:%d,y:%d,z:%d\n", vs.x, vs.y, vs.z);
}
int main(){
    func(1);
    func(1,2);
    func(1,2,3);
    func(.x=1);
    func(.y=2);
    func(.y=2,.z=3);
    return 0;
}