2010-09-19 13 views
7

¿Por qué no podemos declarar una variable estática dentro de una estructura en el lenguaje de programación C?¿Por qué no podemos declarar una variable estática dentro de una estructura en el lenguaje de programación C?

+9

Porque el estándar ISO C dice que no se puede. Pero si dices por qué crees que lo necesitas, es posible ofrecer una solución alternativa para lo que sea. –

+1

Incluso en C++ no existe una variable 'estática' dentro de una estructura. Estos son miembros 'static ', y es realmente una pena que C++ sobrecargue la palabra clave' static' para otra semántica completamente diferente. En particular, significa lo contrario de 'estático' en el alcance del archivo o función, es decir, un símbolo que es visible globalmente. Realmente no veo ningún uso de eso. Si hubieras preguntado por 'extern', este * podría * tener sentido en C, pero esta sería una historia diferente. –

+1

@Jens: 'static' en el ámbito de la función significa que todas las invocaciones de la función comparten la misma instancia de una variable. Del mismo modo, 'static' en una clase significa que todas las instancias de la clase comparten la misma instancia del campo. Me parece que la reutilización de la palabra clave está perfectamente motivada. –

Respuesta

11

En C++, una estructura es básicamente una clase con todos los miembros del público, por lo que una variable estática tiene sentido allí.

En C, una estructura es un bloque contiguo de memoria con campos. No se puede crear una variable estática sin cambiarla (para implementar una estática debe referirse a una sola ubicación de memoria desde todas las estructuras de ese tipo), y eso sería una gran diferencia en complejidad sin mucho beneficio.

+0

¡Lo sabía ...! ¿Es esta la única razón? – Jagan

+4

Creo que esta es una razón bastante fuerte. – delnan

4

Porque C no es C++.

Porque el estándar C no lo permite.

Debido a que no tiene ninguna interpretación significativa en C.

+1

(zing) –

0

Porque en c no podemos acceder a la variable estática con el nombre de la estructura. En C++ podemos acceder a la variable miembro estática con nombre de clase, como a continuación.

NombredeClase :: staticVariableName

stucture 'C' no proporcionan tales instalaciones.

Cuestiones relacionadas