C 語言的不定引數巨集(批量建立字串)
阿新 • • 發佈:2022-03-18
/* * 不定引數的巨集: 批量建立字串 * 示例: 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 */