定义不带大小或零大小的数组

时间:2018-09-13 06:01:56

标签: c++ c++11

我偶然发现了以下使我感到困惑的代码:

union
{
    struct
    {
        uint32_t Id;
        uint8_t a_data[];
    }vendor;
    uint8_t avp[0];
}data;

使用g ++ 7.2.1可以很好地进行编译,但是我不明白为什么。定义 a_data 时,如何无需提供大小? How can avp have size zero?

1 个答案:

答案 0 :(得分:5)

那是flexible array member,从技术上讲,它不是C ++的一部分(这是仅C的功能)。

一些编译器(尤其是GCC)很乐意将C的功能作为扩展名添加到C ++。因此,它不是可移植的,您应尽可能避免使用此类代码。