Statische Variable in C

Jinku Hu 12 Oktober 2023
  1. Verwendung von static-Variablen zur Erhaltung des Wertes zwischen Funktionsaufrufen in C
  2. Verwendung des static-Schlüsselworts zur Deklaration von Variablen innerhalb des Dateibereichs in C
Statische Variable in C

In diesem Artikel werden mehrere Methoden zur Verwendung von statischen Variablen in C vorgestellt.

Verwendung von static-Variablen zur Erhaltung des Wertes zwischen Funktionsaufrufen in C

Das Schlüsselwort static wird in mehreren Kontexten verwendet, einer davon ist die Deklaration einer Variablen, die ihren Wert zwischen den Funktionsaufrufen im Speicher behält. Dieser Typ von Variablen hat eine statische Speicherdauer.

Im folgenden Beispiel deklarieren wir eine Variable k in einem Funktionsblockbereich. Wenn der Kontrollfluss die Funktion up verlässt, bleibt der Wert von k im Speicher erhalten, bis das Programm beendet wird. Dieses Verhalten kann genutzt werden, um Datenobjekte während der Programmausführung persistent zu speichern.

Beachten Sie, dass statische Variablen automatisch auf 0 initialisiert werden, wenn wir sie nicht explizit initialisieren.

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

Ausgabe:

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

Verwendung des static-Schlüsselworts zur Deklaration von Variablen innerhalb des Dateibereichs in C

Die qualifizierten static-Variablen können außerhalb jeder Funktion deklariert werden, wodurch sie innerhalb des Bereichs der einzelnen Quelldatei sichtbar werden. Solche Variablen werden als statische Variablen mit interner Verknüpfung bezeichnet, was bedeutet, dass ihre Werte nur von der Funktion in derselben Datei verwendet werden können.

Beachten Sie, dass bei beiden Funktionen die lokale Variable mit dem Namen k auf Null initialisiert ist, aber wenn die Funktion down aufgerufen wird, befindet sich die Variable k (deklariert in up) nicht im gleichen Gültigkeitsbereich, und eine neue wird an einer anderen Speicherstelle initialisiert. Somit wird nach zwei Iterationen der negative Wert angezeigt. Beachten Sie, dass Funktionsparameter nicht den Qualifier static haben können.

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

Ausgabe:

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
Autor: 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