local variable zu global
-
Wenn du die Variable auch in anderen Funktionen benutzen willst, musst du sie wohl oder übel gleich global deklarieren. Nachträglich kann man das (glücklicherweise) nicht mehr ändern.
Wenn du die globale Variable vermeiden wilst, lässt sich da vielleicht auch was mit Zeigern machen.Oder bezog sich deine Frage darauf, wie man überhaupt globale Variablen deklariert? Einfach die Variable außerhalb einer Funktion deklarieren.
-
Brauchst du die Variable überhaupt global?
Ich meine, wenn du sie eh nur in der einen Funktion benutzt dann kannst du das ganze Ding doch dann einfach so einbinden?!
-
hermes schrieb:
Nein, das meine ich nicht.
Die Variable kann ja nur in der Funktion benutzt werden, also Local.
Ich möchte das diese Variable auch in anderen Funktionen gelesen/beschrieben
werden kann, also sollte sie irgendwie zu global werden, wenn soetwas
überhaupt geht.Sorry Hermes, den Beitrag hatte ich nicht gelesen...
-
ich glaube, da wäre es am besten einen pointer auf die variable zurückzugeben (return), dann müßtestese auch überall benutzen können...
-
@D-U-D-E: Aber das wird doch auch nicht ganz funktionieren. Wenn er da einen Pointer zurück gibt auf eine lokale Variable...Nach dem beenden der Funktion werden die lokalen Variablen doch zerstört oder hab ich gerade einen Black-Out??
-
#include <stdio.h> #include <conio.h> int *add(int *z1, int *z2) { int erg = *z1 + *z2; return &erg; } int main() { int a, b, *c; a = 5; b = 34; c = add(&a, &b); printf("%d + %d macht %d", a, b, *c); getch(); return 0; }
hier wird erg zwar zerstört, "lebt" aber in c quasi weiter...zumindest hab ich das richtige ergebnis. vielleicht ist das aber auch schlechter stil, oder was weiß ich, aber soweit bin ich noch nicht, ich hab selber erst vor kurzem mit c angefangen. :p
-
Na spontan würde ich halt sagen, dass das Ergebnis zwar noch an der Speicherstelle von erg steht. Deswegen kannst du über die zurück gelieferte Adresse den Wert mit dem c-Pointer abrufen. Aber wenn du Pech hast und noch andere Sachen zwischendurch im Speicher ablegst könnte der Wert (je nach Compiler) wieder überschrieben werden...
-
@Maquis
Richtig!@DUDE
Was hat es bitte für einen Sinn den Zeiger zurückzugeben? Wenn du was mit Zeigern machst, dann sollten diese in den Parametern stehen (den Parameter kannst du dann natürlich schon als Rückgabewert hernehmen). In deinem Beispiel müsstest du ganz normal einen Integer zurückgeben.@hermes
Ich vermute mal deine Funktion soll genau das bewirken, dass sie den Wert deiner Variable zurückliefert, oder? Also sollte deine Funktion folgendermaßen aussehen:unsigned long get_time_date(void) { unsigned lond time_date; ... return(time_date); }
-
Je nach Einstellung gibt der Compiler auch eine Warnung aus, in etwa so:
falsch.c:7: warning: function returns address of local variable
-
Also ich hab nochmal drüber nach gedacht. Ich glaube es ist am besten du benutzt eine globale Variable. Du sagst ja, dass du das ganze Dinge später auslagern möchtest. Ich glaube, das würde zuviel Umstand geben da jetzt mit Pointern anzufangen und wäre, glaube ich, wirklich sinnlos.
Aber wenn dir das alles nicht hilft kannst du ja dein Problem vielleicht nochmal etwas genauer beschreiben, bzw. deinen bisherigen Code zur Verfügung stellen...Vielleicht versteh ich ja auch irgendwas nicht richtig