Globale Variablen verwenden ja oder nein?
-
Hallo, ich öfters kleine Programme erstellt wo öfters auf Variablen/Strings zugegriffen wird, die einfachste Lösung ist eine Variable im Kopf zu erstellen, so kann jede Funktion darauf zugreifen.
Mal kleines Beispiel:
string TEST = "HALLO"; void ausgabe() { //Zugriff auf test } void eineAndereFunktion() { //Zugriff auf test } ...Was meint Ihr, kann man das so machen?
-
Klassen sind super.
-
klar kann man das so machen, immerhin lässt die sprache das zu. schöner stil ist es allerding nicht. ich würd das zeug zumindest in nen namespace packen.
-
Das wichtigste ist, das du selber als programmierer nicht den überblick verlierst, und dazu solltest du zumindest wissen, wie man das Verkapseln könnte, und die Technik auch lernen, aber für winzige Prjekte, ist das völlig egal.
-
Bei kleinen Programmen ist es theoretisch egal.
Praktisch ist es aber *nicht egal*, weil man sich dadurch angewöhnt so zu programmieren, und das ist nicht gut.In grossen Projekten können globale Variablen auf verschiedene Arten zu grossem Chaos und viel Ärger führen.
Oft geht es dabei um Abhängigkeiten die keiner mehr überblickt weil sie nur in der Implementierung sichtbar sind, oft sogar nur wenn man sich 2 die Implementierung von Modulen gleichzeitig ansieht.
Weiters kann es bei Verwendung von mehreren Threads schnell zu schwer einzugrenzenden Fehlern führen, vor allem wenn man in kleinen Utility-Funktionen irgendwelche globale Daten verwendet, und die Zugriffe darauf nicht synchronisiert.
Also: grundsätzlich schlechter Stil, immer bleiben lassen wenns anders auch geht. Und es geht immer anders

-
wenn du versuchst, deine funktionen und algorithmen so generisch und generell einsetzbar, wie möglich zu gestalten, wird dir ohnehin kaum eine globale variable unterkommen. plötzlich wird aus
ausgabe()einausgabe(ostream&, string&)und du kannst ausgabe gleich viel öfter und besser einsetzen (und irgendwann *träum* wird daraus auchtemplate <class T, class Arg...> ausgabe(ostream&, T const&, Arg const&... arg))*egal, was ich sagen will: eigentlich braucht man globale variablen auch nur sehr selten.
~* nicht irgendwann, schon mit gcc 4.3 ;)~