Are Flexible Array Members valid in C/C++

文章目录

  • Are Flexible Array Members valid in C/C++
  • Flexible Array Members 是什么?
  • 有什么用
  • 注意事项

Are Flexible Array Members valid in C/C++

Flexible Array Members 是什么?

我们在浏览代码时, 会见到如下代码:

struct foo
{
    int length;
    char data[];
};

或者是下面这种

struct foo
{
    int length;
    char data[0];
};

其中的 data[] 或 data[0] 就是 Flexible Array Members

有什么用

其最大的作用就是结构体的大小可以在运行时确定. 因此这也是为什么叫Flexible Array Members.

注意事项

  1. T[]是C的用法, 并且在C99标准中引入. C99之前无效. C++没有这种用法.
  2. FAM必须要放在结构体的最后一项. (原因很显然, 不解释了)
  3. 结构体必须要有除FAM外的其他项
  4. T[0] 这种写法是gcc的extension, 不是C标准. 所以这种写法不通用. 在标准C和C++是不行的.

有时为了可移植性, 会有T[1]这样的写法. 但是使用时需要额外注意数据的结构布局.

你可能感兴趣的:(c/c++)