Tenía este código:¿Por qué no puedo inicializar una variable estática con un valor no literal?
int foo(void){
return 1;
}
int main(void){
static const int x = foo();
//do stuff
return 0;
}
pero me dio un error sobre la inicialización de una variable estática con un valor no constante. Pensé que tenía algo que ver con el especificador const, pero no fue así. Terminé dejando caer la palabra clave const y hacer esto:
int foo(void){
return 1;
}
int main(void){
static int x = 0;
if (x == 0) x = foo();
//do stuff
return 0;
}
Ahora, ¿por qué no puede el compilador simplemente retrasar la inicialización de la variable static int x
hasta que se utiliza, y lo más importante, ¿por qué no puede simplemente ponerlo en una sección de lectura y escritura, y simplemente hacer cumplir que no está escrito en tiempo de compilación? Me gustaría usar la palabra clave const
Y static
para mejorar la semántica en mi código, pero realmente no me importa cómo maneja esto el compilador, solo déjalo funcionar.
¿No entiendo bien el estándar C? ¿O está chupando mi compilador? Es MSVC 9.0.
¿Para qué sirve la variable estática en main good? – tchap
'x' parece una variable local en el contexto de su ejemplo. ¿Por qué quieres que esto sea estático? –
@ValAkkapeddi: a menudo debido al hecho de que no necesita/desea reiniciarlo para cada llamada a esa función. –