gpt4 book ai didi

c - 结构数组末尾的空大括号 '{ }' 需要什么?

转载 作者:行者123 更新时间:2023-12-02 00:52:30 25 4
gpt4 key购买 nike

我打了一些 code在 Linux 内核中:

static struct ctl_table ip_ct_sysctl_table[] = {
{
.procname = "ip_conntrack_max",
.maxlen = sizeof(int),
.mode = 0644,
.proc_handler = proc_dointvec,
},
// ...
{
.procname = "ip_conntrack_log_invalid",
.maxlen = sizeof(unsigned int),
.mode = 0644,
.proc_handler = proc_dointvec_minmax,
.extra1 = &log_invalid_proto_min,
.extra2 = &log_invalid_proto_max,
},
{ }
};

这里的结构数组以 { } 结尾.添加的目的是什么?
顺便说一句,在这段代码上方还有一个 array of structs ,但最后没有空括号。

什么时候应该在结构数组的末尾使用空大括号?

最佳答案

此特定更改是 sysctl net: Remove unused binary sysctl code 的一部分由 Eric W. Biederman 提交,更改 ip_ct_sysctl_table 最后一个元素的初始化来自 {0} 的数组至 {} (并对许多其他数组初始化执行类似的更改)。
{0}模式似乎已经存在了更长时间,而且两者 {0}{}最后的元素初始化通常(在 Linux 源代码中)显式地称为 Terminating entry ,因此很可能存在一种模式,允许在不知道它们的长度的情况下使用这些数组,在点击零初始化终止条目时终止使用。例如。对于 sound/aoa/fabrics/snd-aoa-fabric-layout.c 中的类似数组甚至在评论中明确提到了零初始化的意图,例如:

static struct codec_connection toonie_connections[] = {
{
.connected = CC_SPEAKERS | CC_HEADPHONE,
.codec_bit = 0,
},
{} /* terminate array by .connected == 0 */
};

关于c - 结构数组末尾的空大括号 '{ }' 需要什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60489448/

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