Globale Variablen
-
Guten Abend alle mit einander,
ich bin grade vor ein Problem gestoßen und wollte daher euren Rat ersuchen.
Hab mich schon umgeschaut aber nicht Konkretes gefunden.
Ich wollte fragen ob es möglich wäre in einer Funktion eine Globale Variable zu erstellen.
int funktion () { int x = 5 // diese Variable soll Global werden }
mfg Akoww
-
Du meinst damit eine Variable mit anderer Lebenszeit als der Scope der Funktion? Ja, das ist mit malloc/free möglich. Musst dir nur mit einem Pointer merken, wo die Variable ist.
Das ist jedoch ein sehr weites Thema mit vielen möglichen Fehlerquellen. Falls du das noch nicht kennst, solltest du gute Lehrbücher dazu lesen.
-
Danke für die rasche Antwort.
Ich sehe schon, dass es ein großer Spaß wird
-
Einfacher und weniger fehlerträchtig ist die Definition als statische Variable:
int funktion () { static int x = 5; /* diese Variable soll Global werden */ return x; }
-
int x = 5; int funktion () { return x; }
so... leichter gehts doch garnicht Global? Wieso also nicht so?
-
Keine Zugriffskapselung.
-
Kannst du das etwas genauer ausführen?
-
Sqwan schrieb:
Kannst du das etwas genauer ausführen?
http://de.wikipedia.org/wiki/Datenkapselung_(Programmierung)
MfG SideWinder
-
Genau das habe ich gelesen bevor ich hier schrieb.
Leider hab ich nicht genau verstanden was es auf diese Situation bezogen heißt.
Ich dachte eigentlich "global" heißt, das man es nicht verbergen möchte...
-
Datenkapselung bedeutet, dass du die Zugriffe auf deine Daten (lesend und schreibend) definierst, d.h. keinen direkten Zugriff gestattest. Denke mal an den Fall, du möchtest eine Bibliothek deiner Funktionen anderen (u.U. von anderen Leuten geschriebenen) Programmteilen zur Verfügung stellen; genau hierbei möchtest du sicher nie, dass dieser Code deine "internen" Daten direkt manipuliert, sondern du möchtest die Kontrolle behalten; also definierst du diese Zugriffskapselung.
Schau dir als Beispiel mal die Standardbibliotheksfunktionen fopen/fclose/fgets/f* an: diese arbeiten auch mit ihrer internen Datenstruktur FILE, die du als Anwender der Bibliothek zwar verwenden aber nie direkt manipulieren kannst (zumindest nicht standardkonform) sondern du musst die definierten Zugriffswege über die vorgegebenen Funktionsnamen einhalten.
-
Was datenkapselung im Grunde ist weiß ich. Und kann es in OOP auch einsetzen. Jedenfalls in Java.
Der rest ist super erklärt. Diese Möglichkeit bei C selbst globale variablen vor zugriff zu schützen kannte ich vorher nicht. Bzw ich dachte, global hieße, das man eben immer von überall drauf zugreifen kann...
Das wurde super richtig gestellt
Danek
Da lob ich mir ja dann mal Java. Wobei das bei C++ ja auch leichter ist...