gcc - tarjeta - Cómo reparar la advertencia: ¿faltan llaves alrededor del inicializador?
tarjetas de proximidad control de acceso (2)
La advertencia es producida por el código c generado por vala.
advertencia: falta llaves alrededor del inicializador
El código funciona pero la advertencia es molesta. El código vala al que hace referencia la advertencia es
struct Position {uint x; uint y;}
private static Position positions[8];
El código C generado es
static Position det_positions[8] = {0};
Intenté inicializar posiciones de media docena de maneras diferentes, pero parece que no puedo obtener la sintaxis para satisfacer la advertencia. ¿Es esta la falla GCC 53119 o hay alguna manera de solucionarlo?
Esta advertencia también aparece cuando una matriz multidimensional se trata como una matriz lineal (aunque sigue siendo correcta y el código se ejecuta a la perfección) con los indicadores de compilador de pared establecidos.
Por ejemplo
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" };
Esto generará la advertencia.
Realice los siguientes cambios para eliminar las advertencias, como se muestra a continuación
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"} };
Por favor corrígeme si estoy equivocado.
Sí, esto parece estar relacionado con la falla 53119 de GCC . Desaparece si cambias la declaración de C a {{0}}
. Tus opciones son:
- Ignora la advertencia.
- Manipule el código C después de la generación para que tenga
{{0}}
lugar de{0}
en esa línea usandosed
o similar. - Declara la matriz
extern
en Vala y escribe la definición de C en otro lugar. (La versión permanente de # 2.) - Haz algo como
struct foo { int bar; Position positions[8]; } static foo position_holder
struct foo { int bar; Position positions[8]; } static foo position_holder
struct foo { int bar; Position positions[8]; } static foo position_holder
y{0}
inicializaránposition_holder.bar
que está bien y la advertencia desaparece.