gpt4 book ai didi

c - 将 0 附加到不完整的宏参数列表

转载 作者:太空狗 更新时间:2023-10-29 17:13:15 26 4
gpt4 key购买 nike

我使用了以下几个 C 预处理器宏:

#define TAKE4(a1, a2, a3, a4, ...) a1, a2, a3, a4
#define FILL_PARAMS(...) TAKE4(__VA_ARGS__, 0, 0, 0, 0)

当使用 1、2 或 3 个参数调用 FILL_PARAMS 时,后面的(未指定的)按预期变为 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

我想添加对以下边缘情况的支持:

FILL_PARAMS()          // => 0, 0, 0, 0

欢迎提供帮助。

最佳答案

找到了一个 hack-ish 解决方案:

#define TAKE4(a1, a2, a3, a4, ...) a1, a2, a3, a4
#define FILL_PARAMS(...) TAKE4( __VA_ARGS__ + 0, 0, 0, 0, 0)

这至少适用于以下测试用例。

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));

关于c - 将 0 附加到不完整的宏参数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36936144/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com