1. 程式人生 > 其它 >C 語言的不定引數巨集(批量建立字串)

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 */