Trois fonctions de la statique



Premièrement, modifier les variables locales-variables locales statiques

Lorsque static modifie une variable locale, il change le cycle de vie de la variable, de sorte que la variable locale statique soit hors de portée et existe toujours. À la fin du programme, le cycle de vie se termine, mais la portée reste inchangée et reste la portée locale. Lors de la définition de sa fonction Ou lorsque le bloc d'instructions se termine, la portée se termine.

Code 1: Variables locales sans modification statique

#include <stdio.h>
void test(){
    
    
	int i = 0;
	i++;
	printf("%d ", i);
}
int main()
{
    
       
	int i = 0;
	for (i = 0; i < 10; i++){
    
    
		test();
	}
	system("pause");
	return 0;
}

Résultat:

Analyse: une fois que la
variable i est hors de portée, le cycle de vie et la portée sont invalides. Je serai redéfini et initialisé à chaque exécution de la boucle for.


Code 2: statique modifie les variables locales

#include <stdio.h>
void test(){
    
    
	static int i = 0;
	i++;
	printf("%d ", i);
}
int main()
{
    
       
	int i = 0;
	for (i = 0; i < 10; i++){
    
    
		test();
	}
	system("pause");
	return 0;
}

Résultat:

Analyse: La
variable i est créée et initialisée une seule fois lorsqu'elle est appelée pour la première fois, puis i ++ est exécuté, en ajoutant un à chaque fois.

Deuxièmement, modifier les variables globales-variables globales statiques

Lorsque static modifie une variable globale, cette variable globale ne peut être utilisée que dans ce fichier source, pas dans d'autres fichiers source.

Code 1: variable globale
tc sans modification statique

//t.c
int g = 2020;

test.c

//test.c
#include <stdio.h>
extern int g;
int main()
{
    
    
	printf("%d\n",g);
	system("pause");
	return 0;
}

Résultat:

Analyse: Le
résultat est 2020.


Code 2: variable globale statique modifiée
tc

//t.c
static int g = 2020;

test.c

//test.c
#include <stdio.h>
extern int g;
int main()
{
    
    
	printf("%d\n",g);
	system("pause");
	return 0;
}

Résultat:
Insérez la description de l'image ici
Analyse: les
erreurs générées, les symboles externes non résolus _g, les commandes externes non résolues et les variables globales modifiées par statique ne peuvent être utilisés que dans ce fichier source, pas dans d'autres fichiers source.

Trois, fonction statique de fonction modifiée

Fonction modifiée statique, cette fonction n'est appelée ou accessible que dans ce fichier et n'est pas accessible entre les fichiers. Les fonctions portant le même nom peuvent être définies dans d'autres fichiers sans conflit.

Code 1: Fonction
add.c sans modification statique

//add.c         
int MyAdd(int x, int y){
    
    
	return x + y;
}

sc

//s.c
#include <stdio.h>
extern int MyAdd(int x, int y);
int main()
{
    
    
	printf("%d\n", MyAdd(1, 1));
	system("pause");
	return 0;
}

Résultat:

Analyse:
Résultat de sortie 2.


Code 2: fonction modifiée statique
add.c

//add.c
static int MyAdd(int x, int y){
    
    
	return x + y;
}

sc

//s.c
#include <stdio.h>
extern int MyAdd(int x, int y);
int main()
{
    
    
	printf("%d\n", MyAdd(1, 1));
	system("pause");
	return 0;
}

résultat:

Analyse: le
symbole externe non résolu _MyAdd, qui est référencé dans la fonction _main, est une commande externe impossible à résoudre. Les fonctions modifiées par statique ne peuvent être appelées ou accessibles que dans ce fichier, et ne sont pas accessibles entre les fichiers.


Code 3: La fonction
my.c avec le même nom que la fonction modifiée statique

//my.c
int MyAdd(int a, int b){
    
    
	return a-b;
}

#include <stdio.h>
int main()
{
    
    
	printf("%d\n", MyAdd(1, 1));
	system("pause");
	return 0;
}

Résultat;
Insérez la description de l'image iciAnalyse: lorsque
des fonctions statiques sont modifiées, des fonctions portant le même nom peuvent être définies dans d'autres fichiers sans conflit.

Quatre, résumé et points d'attention

1. Lorsque static modifie une variable locale, le cycle de vie de la variable est modifié, de sorte que la variable locale statique existe toujours hors de la portée, et le cycle de vie se termine lorsque le programme se termine, et la portée reste la portée locale.
2. Lorsque static modifie des variables globales, cette variable globale ne peut être utilisée que dans ce fichier source, pas dans d'autres fichiers source.
3. Lorsque static modifie une fonction, la fonction n'est appelée ou accessible que dans ce fichier et n'est pas accessible entre les fichiers. Les fonctions portant le même nom peuvent être définies dans d'autres fichiers sans conflit.
4. Lorsque des variables globales et des fonctions sont déclarées en externe, le mot-clé extern est nécessaire et peut être déclaré plusieurs fois.

Je suppose que tu aimes

Origine blog.csdn.net/qq_34270874/article/details/109224688
conseillé
Classement