我正在阅读一些C语言代码(似乎根据C11编写)关于从Github获得的编译器原理,链接如下。
我从main.c开始得到一些代码,如:
首先,结构:
typedef struct {
void **body;
int len;
int nalloc;
} Vector;
然后是一个宏:
#define EMPTY_VECTOR ((Vector){})
和最后:
static Vector *cond_incl_stack = &EMPTY_VECTOR;
我的问题是,如果可以将空块转换为结构并分配给指针,我会编写一些代码进行测试:
Vector v=(Vector){};
Vector a[3]={};
并且Qt5中没有合规
答案 0 :(得分:5)
在任何版本的C中都不允许使用空的初始化列表。
我相信这是一个GNU非标准扩展。不要使用它。如果您想要标准等效项,请初始化至少一个元素:
Vector v = {0};
同样适用于复合文字:
Vector v = (Vector){0};
编辑:引用标准:
(6.7.9) initializer-list: designationopt initializer initializer-list , designationopt initializer