我有一个简单的C程序,可以在c99下编译,但在ANSI下它抱怨:
在初始化程序周围缺少大括号
违规行是:
int myarr[3][3]={0};
为什么ANSI C会抱怨?我看到一个帖子说要在{0}附近添加额外的{},但这对我没有意义......
(我在CentOS中编译以防万一)
答案 0 :(得分:3)
int myarr[3][3]={0};
这是完全有效的C,在这种情况下警告只是编译器的指示。
如果您想摆脱警告,可以这样做:
int myarr[3][3]={{0}};
,如果您使用-Wno-missing-braces
gcc
选项,也可以添加-Wall
。
答案 1 :(得分:3)
严格(在ANSI C下)如果要初始化多维数组,则应该使用额外的花括号。例如,如果将每个元素初始化为特定值,则执行以下操作:
int myarr[3][3] = {{1,2,3},{4,5,6},{7,8,9}};