2013-01-20 57 views
0

我有在C99編譯好一個簡單的C程序,但在ANSI它抱怨:ANSI C抱怨數組初始化

各地初始化缺少大括號

的違規行爲:

int myarr[3][3]={0}; 

ANSI C爲什麼抱怨?我看到一個帖子說要增加額外的{}周圍的{0}但是這是沒有意義的我...

(我在編譯CentOS的情況下,它事項)

+0

爲什麼要添加另一組大括號不直觀?它是一個2D數組,每個維度有一組大括號?... – ApproachingDarknessFish

回答

3

嚴格(在ANSI C下)如果要初始化多維數組,則應該使用額外的大括號。例如,如果將每個元素初始化爲特定值,則可以執行以下操作:

int myarr[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; 
+1

也許最好添加它們,但C不需要你在這裏添加內括號。見C99中的6.7.8p26。 – ouah

3
int myarr[3][3]={0}; 

這是完全有效的C,在這種情況下,警告只是編譯器的一個指示。

如果你想擺脫的警告,你可以這樣做:

int myarr[3][3]={{0}}; 

或還加-Wno-missing-braces如果您正在使用gcc-Wall選項。

+0

行了。我的老師不需要其他編譯器選項,所以我必須添加額外的大括號。 – TSG