【发布时间】:2020-06-14 18:49:53
【问题描述】:
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,但最后没有空括号。
什么时候应该在结构数组的末尾使用空括号?
【问题讨论】:
-
嗯,如果它添加来表示数组的结束,就像 0 表示字符串的结束一样?只是猜测。
-
这是一些非标准的 GCC 扩展。因此,它很可能带有很少或没有文档......我刚刚阅读了所有文档,但我找不到任何关于空结构初始化器列表的信息。但是它可以编译,除非您使用
-pedantic强制执行严格的 ISO。 -
无论如何,它是一个“哨兵”值,一个将所有内容都设置为零/NULL 以标记数组结尾的项。
-
哨兵在CPython extension modules中也很常见。
标签: c c arrays struct linux-kernel