C 中带有 2 个以上参数的 Case 可变参数宏
Case variadic macro in C with 2+ parameters
这个问题中接受的答案回答了如何创建一个宏,该宏将从 2 个可用的其他宏(一个采用 1 个参数,另一个采用 2 个)中进行选择。
如果有问题的 2 个宏有 4 个和 5 个参数,而不是 1 个和 2 个参数,如何编写代码?
这是对 1 到 5 个变量采用相同的方法。它还可以扩展到更多。
#define VAR_1(x1) printf("%d\n", x1);
#define VAR_2(x1, x2) printf("%d\n", x1 + x2);
#define VAR_3(x1, x2, x3) printf("%d\n", x1 + x2 + x3);
#define VAR_4(x1, x2, x3, x4) printf("%d\n", x1 + x2 + x3 + x4);
#define VAR_5(x1, x2, x3, x4, x5) printf("%d\n", x1 + x2 + x3 + x4 + x5);
#define GET_MACRO(_1, _2, _3, _4, _5, NAME, ...) NAME
#define VAR(...) GET_MACRO(__VA_ARGS__, VAR_5, VAR_4, VAR_3, VAR_2, VAR_1, DUMMY)(__VA_ARGS__)
/* The DUMMY element is required to avoid the warning: "ISO C99
requires rest arguments to be used" when compiled with -pedantic" */
int main(void)
{
VAR(0);
VAR(0, 1);
VAR(0, 1, 2);
VAR(0, 1, 2, 3);
VAR(0, 1, 2, 3, 4);
return 0;
}
这个问题中接受的答案回答了如何创建一个宏,该宏将从 2 个可用的其他宏(一个采用 1 个参数,另一个采用 2 个)中进行选择。
如果有问题的 2 个宏有 4 个和 5 个参数,而不是 1 个和 2 个参数,如何编写代码?
这是对 1 到 5 个变量采用相同的方法。它还可以扩展到更多。
#define VAR_1(x1) printf("%d\n", x1);
#define VAR_2(x1, x2) printf("%d\n", x1 + x2);
#define VAR_3(x1, x2, x3) printf("%d\n", x1 + x2 + x3);
#define VAR_4(x1, x2, x3, x4) printf("%d\n", x1 + x2 + x3 + x4);
#define VAR_5(x1, x2, x3, x4, x5) printf("%d\n", x1 + x2 + x3 + x4 + x5);
#define GET_MACRO(_1, _2, _3, _4, _5, NAME, ...) NAME
#define VAR(...) GET_MACRO(__VA_ARGS__, VAR_5, VAR_4, VAR_3, VAR_2, VAR_1, DUMMY)(__VA_ARGS__)
/* The DUMMY element is required to avoid the warning: "ISO C99
requires rest arguments to be used" when compiled with -pedantic" */
int main(void)
{
VAR(0);
VAR(0, 1);
VAR(0, 1, 2);
VAR(0, 1, 2, 3);
VAR(0, 1, 2, 3, 4);
return 0;
}