我无法猜测如何使用构造
struct
{
uint64_t offsets[0];
} table;
Run Code Online (Sandbox Code Playgroud)
请给我一些暗示.
您发布的代码正式无效.正式的C语言不支持大小的数组0.
一些编译器(具有松散/遗留错误检查)允许在结构的末尾使用大小为零的数组,这有时用于实现所谓的"struct hack".(更好的方法是使用大小为1的尾随数组.)但是,您的声明不提供该用法."struct hack"需要一个命名的struct类型,并且必须动态分配实际的对象.在您的情况下,结构类型未命名,并且变量table是非动态定义的.因此,假设您正确地复制了代码,"struct hack"在这里是不可能的.
因此,即使它编译,您最终也会得到table不包含可用数据的变量.此变量的唯一用途(如果使用静态存储持续时间声明)是通过&table表达式("指向匿名结构的指针"类型的指针)生成唯一的地址常量.
将你的声明变成更接近"结构黑客"的一种方法是typedef在它前面添加一个
typedef struct
{
uint64_t offsets[0];
} table;
Run Code Online (Sandbox Code Playgroud)
但是,"struct hack"的"人工生成"结构声明通常会在灵活数组声明之前包含其他数据字段(没有它们,在普通数组中选择"struct hack"根本就没有意义).
| 归档时间: |
|
| 查看次数: |
124 次 |
| 最近记录: |