我正在阅读一些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中没有合规性
在任何版本的C中都不允许使用空的初始化列表.
我相信这是一个GNU非标准扩展.不要使用它.如果您需要标准等效项,请初始化至少一个元素:
Vector v = {0};
Run Code Online (Sandbox Code Playgroud)
复合文字同样如此:
Vector v = (Vector){0};
Run Code Online (Sandbox Code Playgroud)
编辑:引用标准:
(6.7.9) initializer-list:
designationopt initializer
initializer-list , designationopt initializer