Gültigkeitsbereiche von Variablen



  • Guten Tag zusammen!
    Meine Aufgabe ist es die Ausgabe des nachfolgenden kleinen Programms zu erklären bzw. zu begründen, warum es genau das ausgibt, was es ausgibt.
    Der Quellcode lautet wie folgt:

    #include <stdio.h>
    int a = 1, b = 2, c = 3;
    void f() {
    int a, c;
    a = 2;
    b = 4;
    c = 6;
    }
    int main(void) {
    int a = 0;
    f();
    printf("%d %d %d\n", a, b, c);
    return 0;
    }

    Ich habe den Code kompiliert und die Ausgabe lautete 0 4 3.
    Es geht also darum zu begründen, warum z.B. für a die 0 ausgegeben wird und nicht die 1 oder die 2.
    Ich erkläre mir das wie folgt: Die globale Variable a zu Beginn wird durch die lokale Variable a in der Main-Funktion überdeckt, deshalb wird 0 ausgegeben. Bei Variable b wird die globale Variable b = 2 durch die lokale Variable in der void - Funktion ersetzt und damit als 4 ausgegeben. Die Ausgabe für Variable c kann ich mir nicht recht erklären.
    Vielleicht könnte mir einer dies erläutern.
    Mit freundlichen Grüßen
    Bene77



  • Dein Mitschüler war schneller, koordiniert euch besser damit hie rnicht jeder einzeln aufschlägt:

    http://www.c-plusplus.net/forum/280368



  • Es wird immer die lokalste Variable angesprochen. Somit wird für a = 0 ausgegeben, da in der main-Funktion eine lokale Variable a mit dem Wert 0 existiert. Für die Variable b gibt es nur eine globale Variabel. Diese wird durch die Funktion f() auf den Wert 4 gesetzt. Schau genau hin: Es gibt in f() keine lokale Variable b. Und c behält den Startwert von 3, da es eine lokale Variable c gibt, welche die globale Variable c verdeckt.

    #include <stdio.h>
    int a = 1, 
    b = 2, 
    c = 3; // <--
    
    void f() {
    int a, c;
    a = 2;
    b = 4; // <--
    c = 6;
    }
    int main(void) {
    int a = 0; // <--
    f();
    printf("%d %d %d\n", a, b, c);
    return 0;
    }
    


  • Ich hätte eine Zwischenfrage:
    Gibt es eine Möglichkeit die globale Variable anzusprechen, während man im scope der gleichnamigen lokalen Variable ist?



  • In C++ würde ::variable funktionieren, aber in C ist das soweit ich weiß nicht möglich. Also lautet die Antwort wohl: Nein.


Anmelden zum Antworten