使用构造struct {a [0]}测试;

Shr*_*dha 0 c linux-kernel

我无法猜测如何使用构造

struct 
{
    uint64_t offsets[0];
} table; 
Run Code Online (Sandbox Code Playgroud)

请给我一些暗示.

AnT*_*AnT 5

您发布的代码正式无效.正式的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"根本就没有意义).