Variabile statica in C

Jinku Hu 12 ottobre 2023
  1. Usa la variabile static per preservare il valore tra le chiamate di funzione in C
  2. Usa la parola chiave static per dichiarare la variabile all’interno dell’ambito del file in C
Variabile statica in C

Questo articolo illustrerà più metodi su come utilizzare le variabili statiche in C.

Usa la variabile static per preservare il valore tra le chiamate di funzione in C

La parola chiave static viene utilizzata in più contesti, uno di questi è dichiarare la variabile che mantiene il suo valore in memoria tra le chiamate di funzione. Questo tipo di variabile ha una durata di archiviazione statica.

Nell’esempio seguente, dichiariamo una variabile k in un ambito di blocco funzione. Quando il flusso di controllo esce dalla funzione su, il valore di k permane in memoria fino all’uscita del programma. Questo comportamento può essere utilizzato per memorizzare gli oggetti dati in modo persistente durante l’esecuzione del programma.

Nota che le variabili statiche vengono inizializzate automaticamente a 0 se non le inizializziamo esplicitamente.

#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);
}

Produzione:

up() called. k= 1, j= 1
up() called. k= 2, j= 2
up() called. k= 3, j= 3

Usa la parola chiave static per dichiarare la variabile all’interno dell’ambito del file in C

Le variabili qualificate static possono essere dichiarate al di fuori di qualsiasi funzione, rendendole visibili all’interno dell’ambito del singolo file sorgente. Tali variabili sono chiamate variabili statiche con collegamento interno, il che significa che i loro valori possono essere utilizzati solo dalla funzione nello stesso file.

Si noti che entrambe le funzioni hanno la variabile locale denominata k inizializzata a zero, ma quando viene chiamata la funzione down, la variabile k (dichiarata in up) non è nello stesso ambito, e ne viene creata una nuova inizializzato in una diversa posizione di memoria. Pertanto, il valore negativo viene visualizzato dopo due iterazioni. Nota che i parametri della funzione non possono avere un qualificatore 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);
}

Produzione:

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
Autore: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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