我有一个简单的C程序,在c99下编译得很好,但在ANSI下它会抱怨:
初始化器周围缺少大括号
令人不快的一行是:
int myarr[3][3]={0};
为什么ANSI C抱怨?我看到一篇帖子说要在{ 0 }周围添加额外的{ },但这对我来说毫无意义...(我在CentOS中进行编译,以防出现问题)
xxhby3vn1#
严格地说(在ANSI C下),如果你要初始化一个多维数组,你应该附加一个花括号。例如,如果一个人将每个元素初始化为一个特定的值,他会做以下事情:
int myarr[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
zy1mlcev2#
这是完全有效的C,在这种情况下,警告只是编译器的指示。如果你想摆脱警告,你可以这样做:
int myarr[3][3]={{0}};
或者如果您使用gcc和-Wall选项,还可以添加-Wno-missing-braces。
gcc
-Wall
-Wno-missing-braces
2条答案
按热度按时间xxhby3vn1#
严格地说(在ANSI C下),如果你要初始化一个多维数组,你应该附加一个花括号。例如,如果一个人将每个元素初始化为一个特定的值,他会做以下事情:
zy1mlcev2#
这是完全有效的C,在这种情况下,警告只是编译器的指示。
如果你想摆脱警告,你可以这样做:
或者如果您使用
gcc
和-Wall
选项,还可以添加-Wno-missing-braces
。