variable usar funcion estructuras estaticas estatica ejemplos cuando arreglo array c static struct member

usar - variable static c#



La variable miembro de una estructura estática en C (3)

Tenga en cuenta que una estructura estática en sí es diferente de un miembro estático de una estructura. Mientras puede declarar una variable de estructura estática:

static struct MyStruct s;

no puede definir un tipo de estructura con un miembro estático:

struct MyStruct { static int i; // <- compiler error };

La razón para esto es que en C, una estructura es un tipo - declarar un tipo de cual una variable miembro es siempre la misma instancia (es decir, estática) para múltiples instancias de ese tipo es simplemente una tontería. En C ++, las estructuras están en clases de realidad (solo difieren en el alcance de visibilidad predeterminado de los miembros), y en C ++ la palabra clave estática significa algo más en este caso. Significa un método de clase, pero como C no tiene clases ni métodos, esto no tiene sentido y no es válido en C.

Lección aprendida: C ++ no es C.

Tengo una pregunta sobre las variables miembro de struct estático en lenguaje C.

Alguien dijo que podemos declarar una static struct , pero en C, struct no tiene los miembros estáticos como clase en C ++, ¿qué significa esto? Si declaro una estructura estática, ¿cuál es el estado de la variable miembros? ¿Alguien me puede ayudar en esto?


static en C significa:

  • Solo habrá una instancia de esta variable en el programa.
  • La variable debe ser válida durante toda la duración de la ejecución del programa.
  • La variable se inicializará antes de que se ejecute main (). Si el programador inicializa una variable explícitamente, entonces debe establecerse en este valor. De lo contrario, debería establecerse en cero.
  • La variable (o función estática) solo será accesible desde el alcance que se declara dentro. Si se declara en el alcance del archivo (global), solo se puede acceder al mismo archivo .c.

En C ++, también hay un significado adicional:

  • Una variable de miembro estática o función de miembro solo se asignará una vez, sin importar cuántas instancias de una clase se asignen.

Tengo una pregunta sobre las variables miembro de struct estático en lenguaje C.

Alguien dijo que podemos declarar una estructura estática

Correcto / legal:

// (global scope) static struct t_struct { int a; } THE_STATIC_VARIABLE;

pero en C, struct no tiene los miembros estáticos como clase en C ++

// (global scope) struct t_ill_struct { static int a; // << ill-formed in C, but valid in C++ };

¿Qué significa esto? Si declaro una estructura estática, ¿cuál es el estado de la variable miembros? ¿Alguien me puede ayudar en esto?

Usando el ejemplo anterior, significa que THE_STATIC_VARIABLE tendrá almacenamiento estático. Los siguientes son equivalentes:

UN

// (global scope) static struct t_struct { int a; } THE_STATIC_VARIABLE;

segundo

// (global scope) struct t_struct { int a; }; static struct t_struct THE_STATIC_VARIABLE;

Es decir, cada traducción que vea la definición de THE_STATIC_VARIABLE obtendrá su propia copia.

Si desea el mismo efecto que un miembro estático de C ++, tendrá que declararlo en otro ámbito, fuera de la declaración de una estructura:

// file.h // (global scope) struct t_struct { int a; }; extern struct t_struct THE_GLOBAL_VARIABLE; // file.c struct t_struct THE_GLOBAL_VARIABLE;

Ahora realmente tenemos exactamente uno, como en C ++.