Wenn Sie unsere Tutorial-Reihe zur C-Programmierung verfolgen, sollten Sie sich mit dem Konzept der Variablen vertraut machen. Während wir die Grundlagen von Variablen besprochen haben, gibt es noch einen weiteren wichtigen Aspekt im Zusammenhang mit Variablen, den wir hier besprechen werden:Umfang von Variablen .
Beginnen wir mit dem Code zum Austauschen von Werten, den wir in einem unserer vorherigen Tutorials verwendet haben:
#include
void swap (int val1, int val2)
{
int temp =0;
temp =val1;
val1 =val2;
val2 =temp;
printf("\nAusgetauschte Werte sind:%d und %d", val1,val2);
}
int main()
{
int a=0, b=0;
printf("Geben Sie zwei ganze Zahlen ein Werte\n");
scanf("%d %d",&a,&b);
printf("Eingegebene Werte sind:%d und %d", a,b);
swap(a,b);
return 0;
}
Hier, in diesem Codeabschnitt, haben die Variablen „val1“ und „val2“ einen lokalen Geltungsbereich, was bedeutet, dass sie zum Leben erweckt werden, wenn die Funktion „swap“ aufgerufen wird, und sie sterben, sobald der Aufruf von „swap“ beendet ist. Sie können vor oder nach dem Aufruf der Funktion „swap“ einfach nicht auf „val1“ und „val2“ zugreifen. Ebenso ist der Geltungsbereich der Variablen 'a' und 'b' ebenfalls lokal - lokal für die Funktion 'main'.
Beachten Sie, dass diese lokalen Bereichsvariablen auch als automatische Variablen bekannt sind.
Während Variablen mit lokalem Gültigkeitsbereich auf den Block beschränkt sind, in dem sie deklariert sind, gibt es einen anderen Variablentyp, dessen Gültigkeitsbereich global ist. Wie der Name schon sagt, können globale Bereichsvariablen funktionsübergreifend verwendet werden. Beispielsweise ist die Variable „var“ eine globale Integer-Variable und kann sowohl in „main“- als auch in „swap“-Funktionen verwendet werden.
#include
int var;
void swap (int val1, int val2)
{
int temp =0;
temp =val1;
val1 =val2;
val2 =temp;
printf("\nAusgetauschte Werte sind:%d und % d", val1,val2);
}
int main()
{
int a=0, b=0;
printf("Geben Sie zwei Ganzzahlen ein\n");
scanf("%d %d",&a,&b);
printf(" Eingegebene Werte sind:%d und %d", a,b);
swap(a,b);
return 0;
}
Standardmäßig wird globalen Variablen der Wert '0' zugewiesen. Aber das ist bei lokalen Variablen nicht der Fall - Sie müssen ihnen einen Wert zuweisen, wenn sie definiert werden, sonst enthalten sie einen Müllwert. Zum Beispiel im folgenden Programm:
#include
int var;
int main()
{
int a;
printf("Lokale Variable 'a' enthält derzeit:%d", a);
printf("\n Globale Variable var enthält derzeit:%d", var);
gibt 0 zurück;
}
Es besteht eine hohe Wahrscheinlichkeit, dass Sie einen Wert ungleich Null für 'a' erhalten. 'var' hingegen wird am Anfang immer Null sein.
Kann es im weiteren Verlauf globale und lokale Variablen mit demselben Namen geben? Nun, die Antwort ist ja. Ok, was wird dann das folgende Stück Code in der Ausgabe erzeugen:
#include
int var =5;
int main()
{
int var =10;
printf("Lokale Variable 'a' enthält derzeit:%d", var);
printf("\n Globale Variable var enthält derzeit:%d", var);
gibt 0 zurück;
}
Nun, die Ausgabe wird in beiden Fällen '10' sein. Der Grund dafür ist, dass die lokale Variable „var“ die globale „var“ überschreibt. Die nächste logische Frage ist nun, wie in diesem Fall auf die globale „var“ innerhalb von „main“ zugegriffen werden kann. Leider ist die Antwort NEIN. Tatsächlich sollten Sie es vermeiden, in Situationen wie diese zu geraten, wenn Sie mit der Sprache C arbeiten.
Als nächstes kommt das Konzept der „externen“ Variablen. Laienhaft ausgedrückt teilen Sie dem Compiler durch die Verwendung des Schlüsselworts „extern“ mit einer beliebigen Variablendeklaration mit, dass diese Variable bereits woanders deklariert/definiert ist und wir sie hier nur verwenden. Im folgenden Codeabschnitt weiß der Compiler beispielsweise nicht, dass „var“ existiert, wenn er versucht, die printf-Anweisung innerhalb der main-Funktion zu kompilieren.
#include
int main()
{
printf("\n Globale Variable var enthält derzeit:%d", var);
return 0;
}
int var =5;
Deshalb erhalten Sie beim Kompilieren einen Fehler wie den folgenden:
main.c:In Funktion 'main':
main.c:14:58:Fehler:'var' undeclared (erste Verwendung in dieser Funktion)
printf("\n Globale Variable var enthält derzeit:%d", var);
^
main.c:14:58:Hinweis:Jeder nicht deklarierte Bezeichner wird nur einmal für jede Funktion gemeldet, in der er vorkommt
Aber wenn Sie hier 'var' als extern deklarieren, sehen Sie, dass alles gut funktioniert. Das liegt daran, dass der Compiler schließlich zur ursprünglichen 'var'-Deklaration gelangt.
#include
int main()
{
extern int var;
printf("\n Globale Variable var enthält derzeit:%d", var);
return 0;
}
int var =5;
Und Sie erhalten die korrekte Ausgabe:
Globale Variable var enthält derzeit:5
So funktioniert also extern. Externe Variablen werden häufig verwendet, wenn Ihr Programm/Projekt auf mehrere Quellcodedateien aufgeteilt ist und Sie beispielsweise in „Datei1“ eine in „Datei2“ definierte Variable verwenden möchten.
Und schließlich, da wir über den Geltungsbereich von Variablen sprechen, wäre es besser, wenn wir hier auch über „statische“ Variablen sprechen würden. Statische Variablen sind insofern etwas Besonderes, als sie ihren Wert auch dann behalten, wenn sie den Gültigkeitsbereich verlassen. Das bedeutet, dass sie nur einmal initialisiert werden, und zwar beim ersten Mal.
Statischer Int-Zähler
Es folgt ein Codestück, das eine statische Variable verwendet, um zu zählen, wie oft eine Funktion aufgerufen wird.
#include
int swap (int val1, int val2)
{
static int counter =1;
int temp =0;
temp =val1;
val1 =val2;
val2 =temp;
printf("\n Funktion wird %d Mal aufgerufen\n" , Zähler);
Zähler++;
}
int main()
{
int a=9, b=4;
swap(a,b);
swap(a,b);
swap(a,b);
return 0;
}Hier ist die Ausgabe:
Funktion 1 Mal aufgerufen
Funktion 2 Mal aufgerufen
Funktion 3 Mal aufgerufenSie können also sehen, dass die Variable „counter“ ihren Wert auch nach Verlassen des Geltungsbereichs beibehalten hat. Genau wie globale Variablen haben auch statische Variablen einen Standardwert von '0'.
In diesem Tutorial haben wir mehrere wichtige Konzepte besprochen, die sich alle auf den Gültigkeitsbereich von Variablen in der Programmiersprache C beziehen. Vergessen Sie nicht, Ihre eigenen Programme zu erstellen, um den Unterschied zwischen externen, statischen, globalen und lokalen Variablen besser zu verstehen. Und wie immer können Sie im Zweifelsfall oder bei Fragen unten einen Kommentar hinterlassen.