【发布时间】:2017-08-16 21:23:20
【问题描述】:
在我的头文件中有这个
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。
我不明白这是怎么发生的。
【问题讨论】:
-
包括
sys/time.h,而不是time.h -
谢谢各位。它似乎解决了我的问题。傻我。
-
char value[0];不是 C 兼容代码,尽管它可能与某些编译器“工作”。 -
有什么更好的方法来做到这一点?它是我在网上找到的 libpaxos 的一部分。不知道是什么意思。
-
Using
char value[0];是 'struct hack' 的一种变体,它被添加到 C99 并写成char value[];的 灵活数组成员 变得过时——根本没有维度数组。经典的“struct hack”使用char value[1];——GCC 和模拟它的编译器支持char value[0];,但 C 标准不支持(并且该标准从未正式支持 struct hack——但它始终有效,因为编译器编写者是现实主义者)。
标签: c struct incomplete-type