2011-04-30 95 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