En la versión C89/90 del lenguaje C, todos los inicializadores agregados deben constar de constantes solamente. En la terminología del lenguaje C una constante del tipo int
es un valor literal, como 10
, 20u
, 0x1
etc. Los miembros Enum también son constantes. Las variables del tipo const int
son no constantes en C. No se puede usar una variable const int
en el inicializador agregado. (Por esta razón, en lenguaje C, cuando se necesita para declarar una constante llamada se debe utilizar ya sea #define
o enum
, pero no const
calificador.)
En C99 este requisito para inicializadores agregados era relajado. Ahora está bien usar no constantes en los inicializadores agregados de objetos locales. Sin embargo, para objetos estáticos (como en su ejemplo), el requisito aún se cumple. Por lo tanto, incluso en C99 'te tienen que usar ya sea
#define a 0
o utilizar una constante de enumeración nombrado como se sugiere en @R ..' s respuesta.
¿Trataste de compilar esto en un proyecto separado? Me parece perfecto –