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/