globale variable: an funktionen übergeben?



  • hi, habe eine frage zum verständniss: ich habe eine varibale global definiert, dann starte ich eine funktion der ich diese variable gar nicht übergebe und trotzdem "kennt" die funktion den wert? ist das normal, oder macht da der compiler was eingeständiges? bzw. kann ich dann in jeder funktion die variable benutzten (weil sie global definiert ist) ohne diese explizit zu übergeben? oder ist das nicht "standard"?

    bsp:

    #include <iostream>
    
    using namespace std;
    
    int ausgabe(int f);
    int n;
    
    int main (){
    	int f;
    	n=5;
    	f=0;
    	ausgabe (f); 
    	return 0; }
    
    int ausgabe(int f) {
    	cout << "n="<<n<<endl;
    	return 0;}
    

    ausgabe:

    n=5

    -mfg-



  • ja! 🙂
    Der Gültigkeitsbereich von globalen Variablen erstreckt sich über das ganze Programm.



  • Hallo

    oder ist das nicht "standard"

    Es ist korrekt und standard, aber kein guter Stil. In den meisten Fällen sind Parameter und Klassenmember sinnvoller. Global braucht man bestenfalls Konstanten.

    bis bald
    akari



  • bzw. kann ich dann in jeder funktion die variable benutzten (weil sie global definiert ist) ohne diese explizit zu übergeben?

    Ja, genau das bedeutet "global" 😃
    Und genau deswegen sind globale Variablen ja auch zumeist schlechter Stil.



  • hi, danke erstmal für die tips und hinweise.

    wenn ich jetzt aber ca. 5-10 variablen habe und diese fast alle in den jeweiligen funktionen brauche, macht das dann überhaupt sinn funktionen zu starten denen man "soviele" variablen übergeben "muss"?
    also für mich ist es sehr viel einfacher diese 5-10 variablen (die fast in jeder funktion komplett gebraucht werden) global zu definieren (in den funktionen werden ja auch noch variablen definiert die aber nur in der funk. gebraucht werden); dann sieht auch der funktionenstart nicht so "lang" aus (und ich muss nicht immer überlegen/nachschauen was ich alles übergeben muss?!



  • Du kannst zb Variablen aus dem Hauptprogramm per Referenz übergeben da erspart man sich einiges an Speicher und bekommt den globalen mist weg.



  • Du kannst auch diese 5-10 Variablen in eine struct (oder class) packen und die dann übergeben. Dann ist alles wieder etwas übersichtlicher.
    Wenn du unbedingt nicht auf globale Variablen verzichten willst, könntest du dich auch mal zum Thema Singleton belesen.



  • Es ist auf jeden Fall sicherer, alle nötigen Werte als Parameter zu übergeben. Globale Variablen haben immer den Nachteil, daß JEDER darauf zugreifen kann - ergo hast du keine Kontrolle darüber, wer sie wie beeinflusst. Und eine globale Variable existiert nur einmal in deinem Programm, damit bist du extrem unflexibel.

    Wenn dir die Parameterliste dadurch zu lang ist (und du sowieso immer das ganze Set benötigst - wozu das gut sein soll, frage ich lieber nicht), kannst du dir ja ein struct options; definieren und zwischen den beteiligten Funktionen herumreichen.


Anmelden zum Antworten