我偶然发现了以下使我感到困惑的代码:
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?
答案 0 :(得分:5)
那是flexible array member,从技术上讲,它不是C ++的一部分(这是仅C的功能)。
一些编译器(尤其是GCC)很乐意将C的功能作为扩展名添加到C ++。因此,它不是可移植的,您应尽可能避免使用此类代码。