web-dev-qa-db-fra.com

Comment réparer l'avertissement: accolades manquantes autour de l'initialiseur?

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?

40
jacknad

Oui, cela semble être lié à bogue GCC 53119 . Il disparaît si vous changez la déclaration C en {{0}}. Vos options sont:

  1. Ignorez l'avertissement.
  2. Manipulez le code C après la génération pour avoir {{0}} au lieu de {0} sur cette ligne en utilisant sed ou similaire.
  3. Déclarez le tableau extern dans Vala et écrivez la définition C ailleurs. (La version permanente de # 2.)
  4. Faites quelque chose comme 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.
56
apmasell

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.

12
Adit Ya