C结构体 - 字段具有不完整类型

4

在我的头文件中,我有这个:

    typedef struct _client_value
{
    int client_id;
    struct timeval t;
    size_t size;
    char value[0];
} client_value;

我已经包含了<time.h>,但是当我编译时,它显示:field 't' has incomplete type struct timeval t

我不明白为什么会出现这种情况。


1
包含 sys/time.h,而不是 time.h - zzn
谢谢,大家。看来问题解决了。我真是愚蠢。 - Huy Doan
1
char value[0]; 不符合 C 标准的编码,尽管它可能在某些编译器上“运行”。 - chux - Reinstate Monica
1
使用 char value[0]; 是“结构体技巧”的一种变化形式,这种技巧已经被 C99 中添加的“灵活数组成员”所取代,写作 char value[]; — 数组中根本没有维度。经典的“结构体技巧”使用 char value[1]; — GCC 和模拟它的编译器支持 char value[0];,但是 C 标准不支持(标准从未正式支持过结构体技巧 — 但它总是能工作,因为编译器作者是现实主义者)。 - Jonathan Leffler
@JonathanLeffler:标准规定编译器将大小为零的数组视为约束违规,这让我感到不爽,因为许多编译器要想支持比灵活数组成员更好的语义,只需要删除代码以避免对定义大小为零的数组的尝试发出警告即可。 - supercat
显示剩余2条评论
1个回答

5

它的 #include <sys/time.h>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接