今天在 kmod 代码中看到了这一段:
0237 struct index_value {
0238 struct index_value *next;
0239 unsigned int priority;
0240 char value[0];
0241 };
结构中最后一个成员是大小设为 0 的数组, google 了一下,解释如下:
这是 C99 之前的可扩展数组成员(flexible array member),属于 GCC 的扩展语法。
C99 之后的 GCC 支持不写括号中的 0,像这样:
struct foo {
int x;
int y[];
};
用于存储结构中大小不定的数据。 如果不管,编译器就不为这个成员分配空间,但通过 index_value_ptr->value 也能拿到其地址,相当于数组的尾地址。分配时用:
struct foo *p = malloc(sizeof(*p) + size_you_need);
也可以这样:
struct foo a = {1, {2, 3, 4}};
参考:
-->
阅读(265) | 评论(0) | 转发(0) |