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:

Existenz einer Variable überprüfen

 
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: 19.05.2008, 13:49    Titel: Existenz einer Variable überprüfen Antworten mit Zitat

Gibt es überhaupt die Möglichkeit, die Existens einer Variablen zu überprüfen? Z. B. so:

[pseudocode]
If NOT exist (Zahl as Integer) then
DIM Zahl as Integer
Else
Zahl = irgendwas
EndIf
[/pseodocode]
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 19.05.2008, 14:24    Titel: Antworten mit Zitat

was für eine FB-Version benutzt du denn... Option Explicit ist schon lange standard. Dadurch gibt's keine undeklarierte Variablen mehr. mit den Augen rollen
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 19.05.2008, 15:32    Titel: Antworten mit Zitat

FB 0.82.1
Eben das ist das Problem. Einige Funktionen in meinem Prog greifen auf Variablen bzw. Pointer zu, die erst nachher deklariert werden KÖNNTEN, abhängig vom Programmverlauf. Der Compiler verweigert die Arbeit. Das will ich absichern.
Ich kann natürlich die Variable vorher deklarieren, dann wird sie aber u. U. gar nicht gebraucht- finde ich unsauber.
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 19.05.2008, 15:40    Titel: Antworten mit Zitat

geil, die compiler-version musste mir mal schicken...

dein vorhaben ist eher unsauber... wenn eine variable nur lokal benötigt wird kannst du SCOPE...END SCOPE benutzen. und eigentlich wird JEDE variable in einem programm gebraucht.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 19.05.2008, 15:48    Titel: Antworten mit Zitat

Nee, kriegste nicht, ist ne special version.Zunge rausstrecken
Meinte natürlich FB 0.18.2 happy

Nun gut, es geht um Folgendes: Ich wurschtele an einer verketteten Liste herum. Eine Funktion besorgt das Abfragen des Listeninhaltes. Die Funktion soll aber nur aufgerufen werden, wenn eine Liste bereits existiert- also mindestens ein Kopfknoten. Es muß also überprüft werden, ob ein Kopfknoten vorhanden ist. Anderenfall soll die Funktion umgangen und das Prog beendet werden.
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 19.05.2008, 16:24    Titel: Antworten mit Zitat

Dann prüf den Pointer zum Anfangsknoten doch einfach auf einen gültigen Wert, also:
Code:

Type Knoten
  Inhalt As Integer
  Naechster As Knoten Ptr
End Type

Dim As Knoten Ptr Anfang

If Anfang<>0 Then
' Mache irgendwas, weil die Liste existiert
Else
' Mache was anderes, weil es die Liste noch nicht gibt
End If

_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 19.05.2008, 16:47    Titel: Antworten mit Zitat

Ja, aber dazu müßte der Knoten erstmal existieren. Ich wollte eigentlich nicht einen globalen Knoten deklarieren, um ihn dann irgendwo zu überprüfen. Die Frage ist ja nicht, welchen Wert der Knoten hat (oder ob er 0 hat), sondern ob er überhaupt schon da ist.

Deine DIM-Zeile muß ich also in einer anderen Funktion schreiben. Ich kann das Programm aber nicht kompilieren, wenn der Knoten nicht global geDIMt ist. Genaugenommen besteht das Problem mit allen Funktionen, die auf die Liste zugreifen.
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 19.05.2008, 16:56    Titel: Antworten mit Zitat

naja 0 = er ist nicht da, alles andere = er ist da, n pointer hat nie den wert 0.. mit den Augen rollen
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 19.05.2008, 18:55    Titel: Antworten mit Zitat

Die 4 Bytes für 'nen Pointer wirste ja wohl noch haben?!
Dann übergibst du eben jeder deiner Funktionen den Pointer, oder wo ist das Problem?
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 19.05.2008, 20:55    Titel: Antworten mit Zitat

Zum Titelthema: In PHP ist exakt dies mit isset() möglich. Kommt ein Stück weit daher, dass gewisse Variablen wie $_POST[] dynamisch mit dem HTTP-Request belegt werden. Nachteil ist bekanntlich die relativ hohe Fehleranfälligkeit, wenn Variablen nicht deklariert werden müssen und artet heutzutage sogar in ein ernsthaftes Sicherheitsproblem aus, weil durch gezieltes Präparieren uninitialisierter Variablen unerwartete Werte in ein PHP-Script eingeschmuggelt werden können, was speziell bei register_globals=on (bei vielen Webhoster anscheinend immer noch aktiv!) sehr einfach möglich ist.

In FreeBasic sollte man, wenn man schon die Möglichkeit hat, immer mit
Code:
Option Explicit

wie ich sie in VBScript übrigens auch immer verwende. Aus gutem Grund hat auch seinerzeit Niklaus Wirth bei Pascal und Modula-2 Wert aufs Deklarieren sämtlicher Variablen gelegt, weil dadurch etliche Programmfehler bereits beim Compilieren erkannt werden können.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 19.05.2008, 21:07    Titel: Antworten mit Zitat

Hallo,

Code:
OPTION EXPLICIT

wurde in FreeBASIC schon vor einer ganzen Weile abgeschafft und zum Standard erklärt. Es ist also überhaupt nicht nötig, die Anweisungszeile einzubauen; der Compiler besteht von sich aus auf Deklaration aller Variablen. zwinkern

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
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: 21.05.2008, 23:25    Titel: Antworten mit Zitat

Irgendwie ist es das alles nicht. Ich werde wohl in Kauf nehmen, daß die Variablen so ungenutzt vor sich hin geistern. Trotzdem danke für Eure Hilfe. zwinkern
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
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