Variável estática em C
- Utilizar a variável estática para preservar o valor entre chamadas de funções em C
-
Utilizar a palavra-chave
static
para declarar variável dentro do âmbito do ficheiro em C
Este artigo irá demonstrar múltiplos métodos sobre como utilizar variáveis estáticas em C.
Utilizar a variável estática para preservar o valor entre chamadas de funções em C
A palavra-chave static
é utilizada em múltiplos contextos, um deles é declarar a variável que mantém o seu valor na memória entre as chamadas de função. Este tipo de variável tem uma duração de armazenamento estático.
No exemplo seguinte, declaramos uma variável k
no âmbito de um bloco de funções. Quando o fluxo de controlo deixa a função up
, o valor da variável k
persiste na memória até que o programa saia. Este comportamento pode ser utilizado para armazenar objectos de dados de forma persistente durante a execução do programa.
Note-se que as variáveis estáticas são automaticamente inicializadas a 0, se não as inicializarmos explicitamente.
#include <stdio.h>
#include <stdlib.h>
static int j = 0;
void up(void) {
static int k = 0;
j++;
k++;
printf(" up() called. k=%2d, j=%2d\n", k, j);
}
int main() {
int i;
for (i = 0; i < 3; i++) up();
exit(EXIT_SUCCESS);
}
Resultado:
up() called. k= 1, j= 1
up() called. k= 2, j= 2
up() called. k= 3, j= 3
Utilizar a palavra-chave static
para declarar variável dentro do âmbito do ficheiro em C
As variáveis static
qualificadas podem ser declaradas fora de qualquer função, tornando-as visíveis dentro do âmbito do ficheiro de fonte única. Tais variáveis são chamadas variáveis estáticas com ligação interna, o que significa que os seus valores só podem ser utilizados pela função no mesmo ficheiro.
Note-se que ambas as funções têm a variável local chamada k
inicializada a zero, mas quando a função down
é chamada, a variável k
(declarada em up
) não está no mesmo âmbito, e uma nova é inicializada no local de memória diferente. Assim, o valor negativo é exibido após duas iterações. Note-se que os parâmetros da função não podem ter um qualificador static
.
#include <stdio.h>
#include <stdlib.h>
static int j = 0;
void up(void) {
static int k = 0;
j++;
k++;
printf(" up() called. k=%2d, j=%2d\n", k, j);
}
void down(void) {
static int k = 0;
j--;
k--;
printf("down() called. k=%2d, j=%2d\n", k, j);
}
int main() {
int i;
for (i = 0; i < 3; i++) up();
for (i = 0; i < 2; i++) down();
exit(EXIT_SUCCESS);
}
Resultado:
up() called. k= 1, j= 1
up() called. k= 2, j= 2
up() called. k= 3, j= 3
down() called. k=-1, j= 2
down() called. k=-2, j= 1
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook