Gil*_*man 7 c macros c-preprocessor
我使用了以下几个C预处理器宏:
#define TAKE4(a1, a2, a3, a4, ...) a1, a2, a3, a4
#define FILL_PARAMS(...) TAKE4(__VA_ARGS__, 0, 0, 0, 0)
Run Code Online (Sandbox Code Playgroud)
当FILL_PARAMS
使用1,2或3个参数调用时,后面的(未指定的)会按预期变为0,但是当不给出参数时会出现错误.
有没有办法添加对无参数的支持?
澄清:
目前支持以下用途:
FILL_PARAMS(1) // => 1, 0, 0, 0
FILL_PARAMS(1, 2) // => 1, 2, 0, 0
FILL_PARAMS(1, 2, 3) // => 1, 2, 3, 0
Run Code Online (Sandbox Code Playgroud)
我想添加对以下边缘情况的支持:
FILL_PARAMS() // => 0, 0, 0, 0
Run Code Online (Sandbox Code Playgroud)
欢迎提供帮助.
找到了一个 hack-ish 解决方案:
#define TAKE4(a1, a2, a3, a4, ...) a1, a2, a3, a4
#define FILL_PARAMS(...) TAKE4( __VA_ARGS__ + 0, 0, 0, 0, 0)
Run Code Online (Sandbox Code Playgroud)
这至少适用于以下测试用例。
int i = 120;
printf("%d\t%d\t%d\t%d\n", FILL_PARAMS());
printf("%d\t%d\t%d\t%d\n", FILL_PARAMS(i));
printf("%d\t%d\t%d\t%d\n", FILL_PARAMS(1));
printf("%d\t%d\t%d\t%d\n", FILL_PARAMS(1, 2));
printf("%d\t%d\t%d\t%d\n", FILL_PARAMS(1, 2, 3));
printf("%d\t%d\t%d\t%d\n", FILL_PARAMS(1, 2, 3, 4));
printf("%d\t%d\t%d\t%d\n", FILL_PARAMS(1, 2, 3, i));
Run Code Online (Sandbox Code Playgroud)