{data type} estàtic {nom de la variable}
Variables locals estàtiques
Quan una variable d'una funció és estàtica, la variable conserva el seu valor entre les trucades a funcions.
//Example1.c
#incloure
intfun1()
{
intcomptar=0;
comptar++;
tornarcomptar;
}
intfun2()
{
estàtic intcomptar=0;
comptar++;
tornarcomptar;
}
intprincipal()
{
printf (Torna la primera trucada 'fun1:% d n',fun1());
printf (Torna la segona trucada 'fun1:% d n n',fun1());
printf (Torna la primera trucada 'fun2:% d n',fun2());
printf (Torna la segona trucada 'fun2:% d n',fun2());
tornar 0;
}
A l'exemple 1.c, tenim dues funcions: fun1 () i fun2 () . En fun1 () , declarem una variable (recompte) i la inicialitzem a 0. Després, incrementem la variable de recompte i retornem el valor resultant. Utilitzant main () , cridem fun1 () dues vegades i, cada vegada, es retorna un valor d'1 perquè la variable de recompte s'esborra quan es crida a fun1 () s'ha completat. En fun2 () hem declarat la variable de recompte com a variable estàtica. Per tant, es conserva el seu valor. Utilitzant main () , cridem fun2 () dues vegades: la primera vegada es torna un valor d'1 i la segona vegada es torna un valor de 2.
Variables globals estàtiques
Una variable global estàtica es comporta de la mateixa manera que altres variables globals, però no es pot accedir des d’un altre programa C.
Funcions estàtiques
A C, les funcions són globals per defecte. Tanmateix, si declarem una funció estàtica, la funció és local i no es pot accedir des d’un altre programa C.
Inicialització de variables estàtiques
Si no s’inicialitza explícitament una variable estàtica, s’inicialitza com a 0.
//Example2.c
#incloure
intprincipal()
{
estàtic intjo;
printf ('Valor d'i:% d n',jo);
tornar 0;
}
A Example2.c, hem declarat una variable estàtica i que no està inicialitzada. Tanmateix, com que la variable és estàtica, s'inicialitza automàticament a 0.
És important tenir en compte que una variable estàtica ha de ser inicialitzada per un literal constant; no podem utilitzar el valor retornat d’una funció per inicialitzar una variable estàtica.
//Example3.c#incloure
intfun1()
{
tornar 5;
}
intprincipal()
{
estàtic intjo=fun1();
printf ('Valor d'i:% d n',jo);
tornar 0;
}
A Example3.c, intentem inicialitzar una variable estàtica mitjançant el valor retornat de fun1 () . Tanmateix, com podeu veure, es torna un error quan es compila el codi.
Resum
La vida útil d'una variable estàtica i la vida útil del programa són iguals.
Si no s’inicialitza una variable estàtica, prendrà un valor per defecte de 0.
Ni una variable estàtica global ni una funció estàtica són accessibles des d’un programa diferent del que es va definir.