Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Fragen zu Static-Variablen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 13.01.2008, 15:27    Titel: Fragen zu Static-Variablen Antworten mit Zitat

Folgendes Beispiel: Ich erstelle in einer Sub oder Funktion eine STATIC-Variable. Der Wert der Variable bleibt nach Abschluß der Funktion erhalten, so daß ich sie beim nächsten Funktionsaufruf wieder abfragen kann.

Ist diese Variable dann auch im Hautprogramm gültig, wenn die Funktion schon abgeschlossen ist?

Umgekehrt: Kann ich eine Static-Variable, die im Hauptprogramm erstellt wird, auch in einer Funktion verwenden, oder muß ich sie als Parameter übergeben?
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 13.01.2008, 16:11    Titel: Re: Fragen zu Static-Variablen Antworten mit Zitat

Elektronix hat Folgendes geschrieben:
Ist diese Variable dann auch im Hautprogramm gültig, wenn die Funktion schon abgeschlossen ist?
Wenn die Variable im UP Static ist, gilt das nur für das UP, eine gleichlautende Variable im HP ist davon nicht betroffen.
Elektronix hat Folgendes geschrieben:
Umgekehrt: Kann ich eine Static-Variable, die im Hauptprogramm erstellt wird, auch in einer Funktion verwenden, oder muß ich sie als Parameter übergeben?
Wenn du sie Shared machst UND vor dem UP deklarierst, brauchst du sie nicht zu übergeben, wenn sie NICHT Shared ist, mußt du sie per Parameterliste übergeben. Zum Ausprobieren habe ich diesen
Code:
Static Shared i As Integer=17+4
Static Shared j As Integer=4711
Sub Test()
   Static j As Integer=4712
   Print "i=" &i
   Print "j=" &j
   i*=2
End Sub
Test()
Print "i=" &i
Print "j=" &j
Print "Eniki..";
Sleep
End
benutzt(und die Ref natürlich..) happy
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 13.01.2008, 23:25    Titel: Antworten mit Zitat

Danke für die Aufklärung. Ich habe jetzt folgendes Problem:
Ich habe ein Unterprogramm, in dem ein UDT erstellt wird, auf das aber im Hauptprogramm bzw. in anderen Funktionen zugegriffen werden soll. Als Zugriffsoperator soll dieses UP einen Pointer auf den UDT zurückgeben. Das kann so nicht gehen, weil nach Abschluß der Funktion der UDT ungültig wird und der Pointer dann ins Nirvana zeigt.
Ich müßte also den UDT VOR dem UP dimensionieren und dann ByVal übergeben. Das macht die ganze Sache aber wesentlich komplizierter. Welche Lösung gibt es da?

Bei der Gelegenheit: Unter Windows macht die Funktion "CreateWindow" genau das, nur daß sie ein Fensterhandle zurückgibt statt des Pointers. Wie funktioniert das?
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 14.01.2008, 00:06    Titel: Antworten mit Zitat

Wenn du den UDT im Hauptprogramm als SHARED definierst, kannst du auch im Unterprogramm darauf zugreifen.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 14.01.2008, 00:21    Titel: Antworten mit Zitat

Elektronix, hast du dir schon mal Type Forward Referencing angesehen?
Könnte sein, daß das was für dich ist..
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 14.01.2008, 10:42    Titel: Antworten mit Zitat

@ytwinky
Danke für den Tip, ist für andere Belange sicherlich hilfreich.
Das Problem hierbei ist: Die Funktion, um die es geht, soll anhand eines UDT, der innerhalb der Funktion dimensioniert und initialisiert wird, eine kleine Frafik auf den Bildschirm zeichnen. Die Funktion soll später in eine .bi ausgelagert werden. Mit dieser Grafik soll dann das Hauptprogramm oder andere Funktionen agieren. Das müßte dann also auf den UDT zugreifen. Aber da die Funktion dann schon abgeschlossen ist, ist der UDT ungültig. D. h. auch der Forward-Referenzierte Zeiger hätte kein Ziel. Oder verstehe ich etwas falsch?

Ich setze den UDT nicht gerne als Shared fest, um die Zugriffe besser zu regeln. "So global wie nötig, so lokal wie möglich."
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.


Zuletzt bearbeitet von Elektronix am 14.01.2008, 10:45, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
croco97



Anmeldungsdatum: 04.11.2005
Beiträge: 260

BeitragVerfasst am: 14.01.2008, 10:44    Titel: Antworten mit Zitat

@Elektronix:

So?

Code:


TYPE Myudt
  a as integer
END TYPE

'----------------------------------------------

Function myfunc() as Myudt ptr

dim as Myudt ptr temp

temp=allocate(Len(Myudt))
if (temp=NULL) then
  ? "Das war nix"
  end
end if

temp->a=99

Function=temp

End Function

'-----------------------------

SUB main

  dim as Myudt foo

  foo=myfunc()
  ? foo->a
 
  'Nicht vergessen!
  deallocate foo

END SUB

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz