【发布时间】:2013-01-16 14:16:18
【问题描述】:
在Linux内核代码中我发现了以下我无法理解的东西。
struct bts_action {
u16 type;
u16 size;
u8 data[0];
} __attribute__ ((packed));
代码在这里:http://lxr.free-electrons.com/source/include/linux/ti_wilink_st.h
零元素数据数组的需求和目的是什么?
【问题讨论】:
-
我不确定是否应该有zero-length-arrays 或struct-hack 标签...
-
@hippietrail,因为经常有人问这个结构是什么时,他们不知道它被称为“灵活数组成员”。如果他们这样做了,他们很容易找到答案。因为他们不这样做,所以他们不能这样标记问题。这就是为什么我们没有这样的标签。
-
投票重新开放。我同意这不是重复的,因为其他帖子都没有解决长度为零的非标准“struct hack”和定义明确的 C99 功能灵活数组成员的组合。我还认为 C 编程社区对 Linux 内核中任何晦涩的代码有所了解总是有益的。主要是因为许多人认为 Linux 内核是某种最先进的 C 代码,原因不明。虽然实际上它是一个可怕的混乱,充斥着不应该被视为某些 C 规范的非标准漏洞。
-
不是重复的 - 我不是第一次看到有人不必要地关闭问题。我也认为这个问题增加了 SO 知识库。
标签: c structure flexible-array-member