2009-08-18 5 views

Respuesta

36

Sí - el estándar de C ISO/IEC 9899:1999 alias C99 (y C++) normas dicen que esto debe ser así. Consulte el artículo 10 en la sección 6.7.8 ("Inicialización") de WG14 N1256 para obtener el texto exacto.

Como otros han señalado, es una buena práctica para inicializar siempre variables estáticas:

static int idx = 0; 

La razón para hacer esto no se debe a algún compilador no siempre se puede inicializar variables estáticas a cero (cualquier compilador que falló hacer tal inicialización se rompería definitivamente, y no podría pretender ser un compilador de C o C++), es Decir lo que significa, posiblemente la regla más básica de programación.

+1

Entonces otra vez ... el argumento contra las variables estáticas de inicialización explícitamente cero es que amplía el tamaño del ejecutable, porque ya no vivirán en .bss. – ephemient

+4

No veo por qué debería ser así. El compilador puede ignorar fácilmente las inicializaciones cero explícitas. –

+3

Detalle de implementación. GCC 4.2 y MSVC 7.1 parecen tratar 'static int a;' y 'static int a = 0;' de manera equivalente. Recuerdo los compiladores que no lo hicieron, pero parece que no tengo ninguno disponible lo suficientemente antiguo ... – ephemient

3

Si bien las normas dicen que sí ... La buena práctica indica que debe siempre variables de inicialización. Nunca se sabe cuándo cambia el compilador, o tiene que compilarlo en otra máquina, quiere minimizar cualquier posibilidad de comportamiento inesperado.

+5

Y también aclara a los futuros desarrolladores que necesita que el valor sea cero. – Edd

+0

@Edd, eso es lo que hace. – AAA

+5

double somethingImportant() { static arr doble [1024 * 1024]; ... } La inicialización explícita de cada miembro podría ser un poco difícil. Si tiene un compilador estándar, se inicializa por definición. Si no puede confiar en algo básico como eso trabajando en su compilador, obtenga otro compilador porque tendrá dificultades para razonar sobre cualquiera de los códigos. –

Cuestiones relacionadas