我在ISO C99 committee draft中看到结构可能有一个不完整的数组,其大小未指定,称为Flexible Array Member .
另一方面,C99还具有可变长度数组,允许在编译时声明大小不恒定的数组 .
我认为FAM是一种特殊的VLA,但我看到两个SO用户声称不然 . 另外,阅读Wikipedia section on sizeof,它表示 sizeof
对于那两个表现不同 .
为什么它们都存在而不只是一个? (他们的用例是否太不相同?)
此外,哪些其他相关行为对于每个行为都不同?
1 回答
C99标准添加了两个不同的东西,它们很容易混淆:
Flexible array members. 这意味着结构可以在末尾具有未知大小的成员 . C标准的例子:
这也是在C99之前使用的,但它是未定义的行为,被称为另一个答案中提到的“struct hack” . 在C90之前,结构末尾可能会出现意外的填充字节,从而导致错误 .
Variable length arrays (VLA). 这些是在运行时设置其大小的数组 . 它们很可能是由编译器通过使用动态内存分配来实现的 . 例:
来自user29079:https://softwareengineering.stackexchange.com/questions/154089/c-flexible-arrays-when-did-they-become-part-of-the-standard