2011-04-30 160 views
2

我在这个C代码示例中找到构造= {0};,在tidy.sourceforge.net 上找到这个语句的右值是什么,ANSI C是什么?= {0}是什么意思;在C?

#include <tidy.h> 
#include <buffio.h> 
#include <stdio.h> 
#include <errno.h> 

int main(int argc, char **argv) 
{ 
    const char* input = "<title>Foo</title><p>Foo!"; 
    TidyBuffer output = {0}; 
    TidyBuffer errbuf = {0}; 
+2

这是一个“初始化程序列表”。见C99标准中的6.7.8,第13段及以后。 – 2011-04-30 12:33:24

+0

@Steve Jessop,在C90中合法还是非法? – Sebastian 2011-04-30 12:38:00

+1

这是合法的。在C89草稿中,初始化为3.5.7。我认为部分编号在C90中是一样的,但我不确定。 – 2011-04-30 12:49:50

回答

5

这初始化结构中的所有字段,在您的案例TidyBuffer,零。 C中的规则是,您可以在初始化子句中省略成员,其余的将初始化为零。在C++中,这也是合法的:

TidyBuffer output = {}; 
+0

同样允许的数组也是..... – Pushpendra 2011-04-30 12:33:16

+2

'{}'在C中不合法初始化(这是合法的C++。)该语法至少需要一个初始化程序;见C99中的6.7.8p1。 – 2011-04-30 13:48:31

+0

我不知道;我编辑了答案。但我不知道为什么任何一个正确的人会比C++更喜欢C++。 :-) – 2011-04-30 18:46:01