Lenguaje C: el papel de la palabra clave estática

uso estático:

En C, las principales definiciones estáticas 全局静态变量, 定义局部静态变量, 定义静态函数.

1. Definir variables estáticas globales

Agregue la palabra clave static delante de la variable global y la variable global se convierte en una variable estática global. Las variables estáticas globales tienen las siguientes características.

  • a. Asignar memoria en el área global.
  • b. Si no está inicializado, su valor predeterminado es 0.
  • c. La variable está visible en este archivo desde el principio de la definición hasta el final del archivo.

2. Definir variables estáticas locales

Agrega la palabra clave static delante de la variable local, sus características son las siguientes:

  • a. La variable asigna memoria en el área de datos globales.
  • b. Siempre reside en el área de datos globales hasta el final del programa.
  • c. Su alcance es un alcance local.Cuando finaliza la función o bloque de declaración que lo define, su alcance finaliza.
#include <stdio.h>

void fn(void)
{
    
    
    int n = 10;

    printf("n=%d\n", n);
    n++;
    printf("n++=%d\n", n);
}

void fn_static(void)
{
    
    
    static int n = 10;

    printf("static n=%d\n", n);
    n++;
    printf("n++=%d\n", n);
}

int main(void)
{
    
    
    fn();
    printf("--------------------\n");
    fn_static();
    printf("--------------------\n");
    fn();
    printf("--------------------\n");
    fn_static();

    return 0;
}
-> % ./a.out 
n=10
n++=11
--------------------
static n=10
n++=11
--------------------
n=10
n++=11
--------------------
static n=11
n++=12

3. Definir funciones estáticas

Agregue la palabra clave estática antes del tipo de retorno de la función, y la función se define como una función estática. Sus características son las siguientes:

  • a. Las funciones estáticas solo se pueden utilizar en este archivo fuente
  • b. La función en línea declarada en el alcance del archivo tiene como valor predeterminado el tipo estático
/* file1.c */
#include <stdio.h>

static void fun(void)
{
    
    
    printf("hello from fun.\n");
}

int main(void)
{
    
    
    fun();
    fun1();

    return 0;
}

/* file2.c */
#include <stdio.h>

static void fun1(void)
{
    
    
    printf("hello from static fun1.\n");
}
/tmp/cc2VMzGR.o:在函数‘main’中:
static_fun.c:(.text+0x20):对‘fun1’未定义的引用
collect2: error: ld returned 1 exit status

总结: La diferencia entre las variables estáticas globales y locales definidas por static es que el alcance y el dominio visible de las variables estáticas globales comienzan desde la definición del archivo hasta el final de todo el archivo; mientras que el dominio visible de las variables estáticas locales comienza desde la definición de el archivo al todo Al final del archivo, el alcance es desde la definición del bloque de instrucciones hasta el final del bloque de instrucciones.

Supongo que te gusta

Origin blog.csdn.net/houxiaoni01/article/details/105163418
Recomendado
Clasificación