Variables estáticas en C

¡Las variables estáticas tienen la propiedad de preservar su valor incluso después de que estén fuera de su alcance! Por lo tanto, las variables estáticas conservan su valor anterior en su ámbito anterior y no se inicializan de nuevo en el nuevo ámbito. 
Sintaxis: 

static data_type var_name = var_value; 

A continuación se presentan algunos datos interesantes sobre las variables estáticas en C.
1) Una variable int estática permanece en la memoria mientras se ejecuta el programa. Una variable normal o automática se destruye cuando finaliza una llamada de función donde se declaró la variable. 
Por ejemplo, podemos usar static int para contar el número de veces que se llama a una función, pero no se puede usar una variable automática para este propósito.
Por ejemplo, el programa a continuación imprime «1 2» 
 

C

#include<stdio.h>
int fun()
{
  static int count = 0;
  count++;
  return count;
}
  
int main()
{
  printf("%d ", fun());
  printf("%d ", fun());
  return 0;
}

Producción: 

1 2

Pero debajo del programa imprime 1 1 
 

C

#include<stdio.h>
int fun()
{
  int count = 0;
  count++;
  return count;
}
  
int main()
{
  printf("%d ", fun());
  printf("%d ", fun());
  return 0;
}

Producción: 

1 1

2) A las variables estáticas se les asigna memoria en el segmento de datos, no en el segmento de pila. Consulte el diseño de memoria de los programas C para obtener más detalles.
3) Las variables estáticas (como las variables globales) se inicializan como 0 si no se inicializan explícitamente. Por ejemplo, en el siguiente programa, el valor de x se imprime como 0, mientras que el valor de y es algo basura. Vea esto para más detalles. 
 

C

#include <stdio.h>
int main()
{
    static int x;
    int y;
    printf("%d \n %d", x, y);
}

Producción: 

0 
[some_garbage_value] 

4) En C, las variables estáticas solo se pueden inicializar usando literales constantes. Por ejemplo, el siguiente programa falla en la compilación. Vea esto para más detalles. 
 

C

#include<stdio.h>
int initializer(void)
{
    return 50;
}
  
int main()
{
    static int i = initializer();
    printf(" value of i = %d", i);
    getchar();
    return 0;
}

Producción 

 In function 'main':
9:5: error: initializer element is not constant
     static int i = initializer();
     ^

Tenga en cuenta que esta condición no se cumple en C++. Entonces, si guarda el programa como un programa C++, se compilará y funcionará bien.
 
5) Las variables y funciones globales estáticas también son posibles en C/C++. El propósito de estos es limitar el alcance de una variable o función a un archivo. Consulte Funciones estáticas en C para obtener más detalles.
6)Las variables estáticas no deben declararse dentro de la estructura. La razón es que el compilador de C requiere que todos los elementos de la estructura se coloquen juntos (es decir, la asignación de memoria para los miembros de la estructura debe ser contigua). Es posible declarar la estructura dentro de la función (segmento de pila) o asignar memoria dinámicamente (segmento de montón) o incluso puede ser global (BSS o segmento de datos). Cualquiera que sea el caso, todos los miembros de la estructura deben residir en el mismo segmento de memoria porque el valor del elemento de la estructura se obtiene contando el desplazamiento del elemento desde la dirección inicial de la estructura. Separar un solo miembro del segmento de datos anula el propósito de la variable estática y es posible tener una estructura completa como estática.
Artículos relacionados: 
 

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *