Frage zu globalen Funktionen/Variablen



  • Hey Leute!

    Ich bin neu in C++ und wollte mich mal über globale Fkt und Var informieren.

    Ist es richtig, dass ich diese so deklarieren kann, dass ich die einfach mit in den Quelltext (in eine cpp-Datei) schreibe, ohne sie einer Klasse zuzuordnen (also ohne Scope-Operator).

    Stimmt das so?

    Und was ich noch fragen wollte: Wie kann ich eine globale Variable verstehen... Sie ist ja nicht als static definiert, ist sie also für jedes Objekt "eine andere", oder teilen sich alle Objekte diese glob. Variable?

    Danke!!



  • Globale Variablen haben eine statische Lebenszeit. (Und es werden keine extra Instanzen für jedes Objekt angelegt, das wäre ja auch irgendwie unlogisch.)
    Aber normalerweise erstellt man eher selten bis nie globale Variablen.

    Globale Funktionen (aka freie Funktionen) nutzt man dagegen recht oft.



  • Hey, danke für die Antwort!! Habe mir das schon fast gedacht, dass die eine statische Lebendauer haben.

    Aber warum kann man dann explizit noch static dazuschreiben, ohne das der Compiler meckert:

    // globale Variable Test
    int static globVar = 5;
    
    int globVar2 = 5;
    
    void inkr() {
    	globVar = 6;
    }
    
    int sum(int i, int j) {
    	return i+j;
    }
    

    Zwischen globVar und globVar2 muss es doch einen unterschied geben oder?

    und die Funktion sum ist eine gloabe Funktion oder? Wollte mal ein kleines Beispiel schreiben.

    Vielen Dank fpr die Hilfe!!



  • P.S.: glob Variablen sind dann also auch an kein Objekt gebunden. Also auch statische Lebenszeit, wenn mans so will?!

    danke!


  • Mod

    static hat in C++ je nach Kontext verschiedene Bedeutungen (die zwar jeweils eine gewisse Ähnlichkeit haben, aber technisch oft ganz was anderes sind). Hier bedeutet static, dass globVar "internal linkage" (mir fällt gerade das deutsche Wort dafür nicht ein) hat. Das bedeutet, die Variable ist für den Linker nur in dieser Übersetzungseinheit sichtbar. Andere Übersetzungseinheiten können eine gleichnamige globale Variable besitzen, ohne dass es zu mehrfachen Definitionen kommt, dafür können andere Übersetzungseinheiten nicht auf diese Variable zugreifen (z.B. wenn man sie durch extern int globVar; anderswo bekannt macht, dann bekommt man einen "undefined reference"-Fehler vom Linker, da dieser die Variable nicht sehen kann.)



  • Okay, danke. Hab ich verstanden..

    Nur nochmal zur Absicherung: Meine Funktion sum ist eine globale Variable, oder? Auch unabhängig von jedem Objekt, das erstellt wird??



  • (D)eine Funktion ist keine Variable.



  • sorry, meinte natürlich globale Funktion! 😉



  • -> Und Funktionen sind und waren schon immer unabhängig von jedem Objekt. ^^



  • SeppJ schrieb:

    dass globVar "internal linkage" (mir fällt gerade das deutsche Wort dafür nicht ein) hat.

    Bei uns in den Vorlesungen wurde es immer modul global genannt.



  • Modul? Darauf hoffen wir, momentan gibt's nur Übersetzungseinheiten. 😃


Anmelden zum Antworten