我猜不出像
这样的结构的使用struct
{
uint64_t offsets[0];
} table;
请给我一些关于这方面的提示。
最佳答案
您发布的代码正式无效。形式上,C 语言不支持大小为 0
的数组。
一些编译器(带有松散/遗留错误检查)允许在结构末尾使用大小为零的数组,这有时用于实现所谓的 "struct hack"。 . (更好的方法是使用大小为 1 的尾随数组。)但是您的声明未提供该用途。 “Struct hack”需要一个命名的结构类型,并且必须动态分配实际对象。在您的情况下,结构类型未命名,并且变量 table
是非动态定义的。因此,假设您正确地重现了代码,“struct hack”在这里是毫无疑问的。
因此,即使它编译了,您最终得到的变量 table
不包含任何可用数据。此变量的唯一用途(如果声明为静态存储持续时间)是通过 &table
表达式(“指向匿名结构的指针”类型的指针)生成唯一的地址常量。
将您的声明变成更接近“struct hack”的一种方法是在它前面添加一个typedef
typedef struct
{
uint64_t offsets[0];
} table;
但是,“struct hack”的“人工生成”结构声明通常会在灵活的数组声明之前包含其他数据字段(没有它们,选择“struct hack”而不是普通数组就毫无意义)。
关于c - 使用结构 struct { a[0] } 测试;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14028359/