Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9490
  • 博文数量: 5
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 60
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-28 20:12
个人简介

在 CU 的博客

文章分类

全部博文(5)

文章存档

2015年(5)

我的朋友

分类: C/C++

2015-07-16 23:27:08

今天在 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) |
0

上一篇:TFO(TCP Fast Open) 分析(1):TFO 概述

下一篇:没有了

给主人留下些什么吧!~~