如何修复警告:初始化器周围缺少括号?

时间:2012-12-06 14:45:28

标签: gcc vala

警告由vala生成的c代码生成。

  

警告:初始化程序周围缺少大括号

代码有效,但警告很烦人。警告引用的vala代码是

struct Position {uint x; uint y;}
private static Position positions[8];

生成的C代码是

static Position det_positions[8] = {0};

我已尝试初始化六种不同方式的位置,但似乎无法获得满足警告的语法。这是GCC bug 53119还是有办法解决它?

2 个答案:

答案 0 :(得分:54)

是的,这似乎与GCC bug 53119有关。如果您将C声明更改为{{0}},它就会消失。您的选择是:

  1. 忽略警告。
  2. 使用{{0}}等操作后,在生成后操纵C代码,使{0}代替sed
  3. 在Vala中声明数组extern,并在其他地方写入C定义。 (#2的永久版本。)
  4. 执行struct foo { int bar; Position positions[8]; } static foo position_holder{0}之类的操作会初始化position_holder.bar,这很好,警告就会消失。

答案 1 :(得分:12)

当多维数组被设置为-Wall编译器标志时,多线阵列被视为线性数组(尽管它仍然正确且代码运行完美),也会出现此警告。

例如

char array[5][10][2] = {\
"0","0","0","0","0","0","0","0","0","0",\
"1","1","1","1","1","1","1","1","1","1",\
"2","2","2","2","2","2","2","2","2","2",\
"3","3","3","3","3","3","3","3","3","3",\
"4","4","4","4","4","4","4","4","4","4" };

这将生成警告。

执行以下更改以删除警告,如下所示

char array[5][10][2] = {\
{"0","0","0","0","0","0","0","0","0","0" },\
{"1","1","1","1","1","1","1","1","1","1"},\
{"2","2","2","2","2","2","2","2","2","2"},\
{"3","3","3","3","3","3","3","3","3","3"},\
{"4","4","4","4","4","4","4","4","4","4"} };

如果我错了,请纠正我。