C 语言的不定参数宏(批量创建字符串)

/*
 *  不定参数的宏: 批量创建字符串
 *  示例: 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 */

posted on 2022-03-18 10:58  UXOD  阅读(218)  评论(0编辑  收藏  举报