L'avertissement est généré par le code c généré par vala.
avertissement: accolades manquantes autour de l'initialiseur
Le code fonctionne mais l'avertissement est ennuyeux. Le code vala référencé par l'avertissement est
struct Position {uint x; uint y;}
private static Position positions[8];
Le code C généré est
static Position det_positions[8] = {0};
J'ai essayé d'initialiser des positions une demi-douzaine de façons différentes, mais je n'arrive pas à obtenir la syntaxe pour satisfaire l'avertissement. Est-ce bogue GCC 53119 ou existe-t-il un moyen de le corriger?
Oui, cela semble être lié à bogue GCC 53119 . Il disparaît si vous changez la déclaration C en {{0}}
. Vos options sont:
{{0}}
au lieu de {0}
sur cette ligne en utilisant sed
ou similaire.extern
dans Vala et écrivez la définition C ailleurs. (La version permanente de # 2.)struct foo { int bar; Position positions[8]; } static foo position_holder
et {0}
va alors initialiser position_holder.bar
ce qui est bien et l'avertissement disparaît.Cet avertissement apparaît également lorsqu'un tableau multidimensionnel est traité comme un tableau linéaire (bien qu'il soit toujours correct et que le code fonctionne parfaitement) avec les drapeaux du compilateur -Wall définis.
Par exemple
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" };
Cela générera l'avertissement.
Effectuez les modifications suivantes pour supprimer les avertissements, comme indiqué ci-dessous
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"} };
Veuillez me corriger si je me trompe.