gpt4 book ai didi

c - 编程 C : default arguments in a macro?

转载 作者:太空宇宙 更新时间:2023-11-04 06:16:35 27 4
gpt4 key购买 nike

我正在编写一些编写结构 {a, b, c, d, e} 的宏。但是这个宏能够接收 5 个或更少的参数。如果接收到的参数少于 5 个,则应将 0 放入结构中。

我试图制作一个重复“0,”N 次的宏,但由于此 N 是参数的数量,它不是“硬编码”值,所以我无法将它与重复“0”的宏连接起来0.

我想知道是否有任何方法可以在宏本身上设置默认值。

#define REPEAT1(s) s
#define REPEAT2(s) s, s
#define REPEAT3(s) s, REPEAT2(s)
...
#define REPEATN(n, s) REPEAT ## n (s)
...
{__VA_ARGS__, REPEATN((5 - VA_ARGS_NUM(__VA_ARGS__)), 0)}
// can't work because ## will not create a valid token with REPEAT and (5 - ....)

最佳答案

默认情况下,C 将所有其他未初始化的设置为 0。

例如:

typedef struct {
int a,b,c,d,e,f;
} myStruct;

myStruct str = {1, 2, 3};

现在您有值 str.a = 1、str.b = 2 和 str.c = 3,而所有其他值都设置为 0


但是,如果您这样做:

myStruct str;

然后你不设置任何东西到 0,特别是如果这是在堆栈上声明的局部变量。如果变量是全局变量,则可以将其设置为 0,前提是链接器在启动时放置代码以将全局变量设置为 0

关于c - 编程 C : default arguments in a macro?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44554451/

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