Seite 1 von 1
Globale Variablen
Verfasst: Di Okt 30, 2012 9:09 am
von Kmitska
Hallo Leute,
ich würde gerne wissen, wie man solche "Globale Variablen" am Besten verwenden.
Ich habe sie bis jetzt in einer Datei deklariert und definiert und in den anderen einfach mit "extern" rübergeschoben.
Beispiel:
header.h
main.cpp:
datei2.cpp:
würde nun von Euch wissen, ob das in Ordnung so ist und wie sich die Ressourcen hier verhalten. :)
Re: Globale Variablen
Verfasst: Di Okt 30, 2012 9:17 am
von cloidnerux
ich würde gerne wissen, wie man solche "Globale Variablen" am Besten verwenden.
Am besten gar nicht. Den Globale Variablen bedeuten, dass du sie an jeder stelle ändern kannst, du must also sehr viel besser darauf achten, wann du wo wie diese Variable nutzt. Und wenn du dich einmal vertust und sie änderst ist sie im kompletten Programm falsch und führt zu Problemen.
Um das zu verhindern müsstest du sie als const Deklarieren und dann kannst du es durch ein #define ersetzten.
Sehr viel sinnvoller ist es daher, dass du diese Informationen einer klasse im Konstruktor oder einer Funktion übergibst, denn damit wird es Kopiert und Änderungen betreffen nur noch eine Klasse. Wenn du keine Klassen verwendest, kannst du auch einen Pointer den Funktionen übergeben, der auf das Element zeigt, am besten auch wieder mit const.
Re: Globale Variablen
Verfasst: Di Okt 30, 2012 9:44 am
von Kmitska
Ich muss in meinem Fall aber welche verwenden, da die Informationen IMMER aktuell bleiben müssen.
Also mit const kann ich nichts anfangen.

Re: Globale Variablen
Verfasst: Di Okt 30, 2012 10:01 am
von cloidnerux
Ich muss in meinem Fall aber welche verwenden, da die Informationen IMMER aktuell bleiben müssen.
Also mit const kann ich nichts anfangen.
Dann übergib einen Pointer auf dein Element, bzw wie oft ändert sich diese Information, und was ändert sich daran.
Folglich die Frage, ist es so drastisch wie du es darstellst?
Re: Globale Variablen
Verfasst: Di Okt 30, 2012 10:58 am
von Xin
Kmitska hat geschrieben:ich würde gerne wissen, wie man solche "Globale Variablen" am Besten verwenden.
Wie cloidnerux richtig sagt - am besten gar nicht.
Wenn Du sie trotzdem brauchst und softwaretechnisch Junior-Programmierer-1337-Style haben willst, lies Dich im Singleton-Pattern ein.
Wenn Du einfach eine globale, statische Variable brauchst versuch es so:
header.h
Code: Alles auswählen
struct serverInfo
{
std::string info;
};
external serverInfo sInfo;
main.cpp:
datei2.cpp:
Kmitska hat geschrieben:würde nun von Euch wissen, ob das in Ordnung so ist und wie sich die Ressourcen hier verhalten.

In main.cpp wird die tatsächliche Variable im Object-File angelegt, alle anderen wissen, dass es irgendwo eine "sInfo" geben soll. Der Linker packt das alles zusammen.
Das ist also im Prinzip in Ordnung, die Deklaration von sInfo (mit external davor, also eben keine Definition) würde ich in den Header legen. Das Ganze wird ungern gesehen, aber gerade für Konfigurationsgeschichten finde ich das soweit vollkommen in Ordnung.