Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 19.05.2008, 13:49 Titel: Existenz einer Variable überprüfen |
|
|
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 19.05.2008, 14:24 Titel: |
|
|
was für eine FB-Version benutzt du denn... Option Explicit ist schon lange standard. Dadurch gibt's keine undeklarierte Variablen mehr.  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 19.05.2008, 15:32 Titel: |
|
|
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 19.05.2008, 15:40 Titel: |
|
|
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 |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 19.05.2008, 15:48 Titel: |
|
|
Nee, kriegste nicht, ist ne special version.
Meinte natürlich FB 0.18.2
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 |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 19.05.2008, 16:24 Titel: |
|
|
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 |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 19.05.2008, 16:47 Titel: |
|
|
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 |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 19.05.2008, 16:56 Titel: |
|
|
naja 0 = er ist nicht da, alles andere = er ist da, n pointer hat nie den wert 0..  _________________ "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 |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 19.05.2008, 18:55 Titel: |
|
|
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 |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 19.05.2008, 20:55 Titel: |
|
|
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
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 |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 21.05.2008, 23:25 Titel: |
|
|
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.  _________________ Und die Grundgebihr is aa scho drin- DOS is jo nett. |
|
Nach oben |
|
 |
|