Globale Variablen

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Kmitska
Beiträge: 349
Registriert: Fr Sep 23, 2011 8:49 pm
Wohnort: Karlsruhe, Pforzheim

Globale Variablen

Beitrag von Kmitska » Di Okt 30, 2012 9:09 am

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

Code: Alles auswählen

struct serverInfo
{
    std::string info;
};
main.cpp:

Code: Alles auswählen

serverInfo sInfo;
datei2.cpp:

Code: Alles auswählen

extern serverInfo sInfo;
würde nun von Euch wissen, ob das in Ordnung so ist und wie sich die Ressourcen hier verhalten. :)

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Globale Variablen

Beitrag von cloidnerux » Di Okt 30, 2012 9:17 am

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.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Kmitska
Beiträge: 349
Registriert: Fr Sep 23, 2011 8:49 pm
Wohnort: Karlsruhe, Pforzheim

Re: Globale Variablen

Beitrag von Kmitska » Di Okt 30, 2012 9:44 am

Ich muss in meinem Fall aber welche verwenden, da die Informationen IMMER aktuell bleiben müssen.
Also mit const kann ich nichts anfangen. :(

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Globale Variablen

Beitrag von cloidnerux » Di Okt 30, 2012 10:01 am

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?
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Globale Variablen

Beitrag von Xin » Di Okt 30, 2012 10:58 am

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:

Code: Alles auswählen

#include "header.h"

serverInfo sInfo; 
datei2.cpp:

Code: Alles auswählen

#include "header.h"
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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten