C Scope
Scope
Einen Block existiert überall dort, wo Klammern die { } gesetzt sind
und an solchen Stellen, an denen die Klammern als kurchschreibweise
weggelassen werden:
Die Regel ist, dass Variablen, die in einem inneren Block definiert werden im äußeren Block nicht existieren. Wir sprechen dabei vom Scope, oder Sichtbarkeitsbereich der Variable:
{
// äußerer block
{
//
innerer block
}
}
Die Regel ist, dass Variablen, die in einem inneren Block definiert werden im äußeren Block nicht existieren. Wir sprechen dabei vom Scope, oder Sichtbarkeitsbereich der Variable:
#include <stdio.h>
int global = 0; // diese
variable existiert überall
int main(void)
{
int a = 1;
if(a > 0)
{
int b = 2; // exxistiert nur in
dieser if-bedingung
printf("global:
%d", global); //
funktioniert
printf("a: %d", a); // funktioniert
}
// printf("b: %d",
b); würde nicht funktionieren!
return 0;
}
Zum Beispiel kann man überall auf die Variable global zugreifen, während a nur in der main-Methode
existiert. b wiederum kann nicht außerhalb der if-Bedingung aufgerufen werden.
Jede Variable lässt sich pro Block nur einmal definieren, alles andere führt zu einem Fehler:
Weil es aber umständlich wäre jeder Variablen einen anderen Namen zu geben, kann man den Variablennamen in einem andern Block nochmal verwenden. Also ist folgender Code korrekt:
Der Wert der alten Variable wird dabei übderdeckt:
Überdeckung
Jede Variable lässt sich pro Block nur einmal definieren, alles andere führt zu einem Fehler:
int value = 20;
int value = 5; // fehler!
Programm lässt sich nicht starten
Weil es aber umständlich wäre jeder Variablen einen anderen Namen zu geben, kann man den Variablennamen in einem andern Block nochmal verwenden. Also ist folgender Code korrekt:
int value = 20;
{
int value = 5;
}
Der Wert der alten Variable wird dabei übderdeckt:
#include <stdio.h>
int main(void)
{
int value = 20;
//
klammern bestimmen den scope
{
printf("(1) value: %d\n",
value); //
value = 20 (aus äußeren scope)
int value = 5; // überdeckung!
// value außerhalb des blocks
// bleit unverändert
printf("(2) value: %d\n",
value); //
value = 5 (aus inneren scope)
}
printf("(3)
value: %d\n", value); // value
= 20
getchar();
return 0;
}
Keine Kommentare:
Kommentar veröffentlichen