¿Es legal el siguiente código?¿Puedo inicializar una variable global con el resultado de una llamada a función?
int add(int a, int b)
{
return a + b;
}
int myvar = add(1, 2);
int main() { /* ... */ }
¿Por qué, o por qué no?
¿Es legal el siguiente código?¿Puedo inicializar una variable global con el resultado de una llamada a función?
int add(int a, int b)
{
return a + b;
}
int myvar = add(1, 2);
int main() { /* ... */ }
¿Por qué, o por qué no?
inicializadores estáticos pueden llamar funciones, siempre y cuando estén en su alcance. (Redacción 2003, 8/2)
[dcl.decl]
:
valores iniciales también se pueden especificar en un declarador; los inicializadores son discutidos en 8.5 y 12.6.
(redacción de 2003, 8,5/2)
[dcl.init]
:
automática, registro, estática, y variables externas de ámbito espacio de nombres puede ser inicializado por arbitrarias expresiones que implican literales y previamente declarado variables y funciones.
(No se deje engañar por la falta de la palabra clave static
, que tiene todo tipo de significados. La variable de myvar
se declara en el alcance de espacio de nombres, y por lo tanto tiene una duración de almacenamiento estático .)
Si Haga esto, tenga cuidado con los problemas de los pedidos: no hay garantía de qué orden ejecutan los inicializadores estáticos cuando están en diferentes unidades de traducción. Si los inicializadores no usan ninguna otra variable global, por supuesto, no hay problema. – bdonlan
@bdonlan: Muy bien. –