Hoe te repareren waarschuwing: ontbrekende accolades rond initializer?

De waarschuwing wordt geproduceerd door de c-code die is gegenereerd door vala.

waarschuwing: ontbrekende accolades rond initializer

De code werkt, maar de waarschuwing is vervelend. De vala-code waarnaar wordt verwezen door de waarschuwing is

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

De gegenereerde C-code is

static Position det_positions[8] = {0};

Ik heb geprobeerd posities op zes verschillende manieren te initialiseren, maar ik krijg de syntaxis niet om aan de waarschuwing te voldoen. Is dit GCC-bug 53119of is er een manier om dit op te lossen?


Antwoord 1, autoriteit 100%

Ja, dit lijkt verband te houden met GCC-bug 53119. Het verdwijnt als u de C-declaratie wijzigt in {{0}}. Uw opties zijn:

  1. Negeer de waarschuwing.
  2. Manipuleer de C-code na generatie om {{0}}in plaats van {0}op die regel te hebben met behulp van sedof iets dergelijks .
  3. Declareer de array externin Vala en schrijf de C-definitie ergens anders. (De permanente versie van #2.)
  4. Doe iets als struct foo { int bar; Position positions[8]; } static foo position_holderen {0}zullen dan position_holder.barinitialiseren, wat goed is en de waarschuwing verdwijnt.

Antwoord 2, autoriteit 23%

Deze waarschuwing verschijnt ook wanneer een multidimensionale array wordt behandeld als een lineaire array (hoewel het nog steeds correct is en de code perfect werkt) met -Wall compilervlaggen ingesteld.

Bijvoorbeeld

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" };

Hiermee wordt de waarschuwing gegenereerd.

Doe de volgende wijzigingen om de waarschuwingen te verwijderen, zoals hieronder weergegeven

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"} };

Corrigeer me alstublieft als ik het mis heb.

Other episodes