/*
* 不定参数的宏: 批量创建字符串
* 示例: string(s1, s2, s3);
* string(s1, s2, s3, s4, s5);
* string(s1, s2, s3, s4, s5, s6, s7, s8);
*/
#ifndef _STRVAR_H
#define _STRVAR_H
// 获取宏参数个数
#define _number(a, b, c, d, e, f, g, h, num, ...) num
#define number(...) _number(__VA_ARGS__, 8, 7, 6, 5, 4, 3, 2, 1)
// 连接源代码 (二次展开)
#define _defcat(a, b) a##b
#define defcat(a, b) _defcat(a, b)
// 通用接口 (通过参数个数来确定调用的宏)
#define string(...) string defcat(string, number(__VA_ARGS__))(__VA_ARGS__)
// 嵌套展开
#define string2(var, ...) var = {0}, __VA_ARGS__ = {0}
#define string3(var, ...) var = {0}, string2(__VA_ARGS__)
#define string4(var, ...) var = {0}, string3(__VA_ARGS__)
#define string5(var, ...) var = {0}, string4(__VA_ARGS__)
#define string6(var, ...) var = {0}, string5(__VA_ARGS__)
#define string7(var, ...) var = {0}, string6(__VA_ARGS__)
#define string8(var, ...) var = {0}, string7(__VA_ARGS__)
#endif /* strvar.h */