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:
- Negeer de waarschuwing.
- Manipuleer de C-code na generatie om
{{0}}
in plaats van{0}
op die regel te hebben met behulp vansed
of iets dergelijks . - Declareer de array
extern
in Vala en schrijf de C-definitie ergens anders. (De permanente versie van #2.) - Doe iets als
struct foo { int bar; Position positions[8]; } static foo position_holder
en{0}
zullen danposition_holder.bar
initialiseren, 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.