German Probleme bei device.exe wegen goto-Befehl

urgott

New Member
Hallo,
ich habe mein erstes Programm geschrieben und das funktioniert auch so wie ich es will. Nur wenn ich es als device.exe compilieren möchte erscheint die Fehlermeldung: error CS0159 Die Bezeichnung startspeichern ist im Bereich der goto-Anweisung nicht vorhanden. Line: goto startspeichern.

Ich habe Buttons die Befehle ausführen und zusätzlich Pulldownmenüs (die man unten links und rechts anlegen kann) die den selben Befehl ausführen sollen. Um nicht zweimal das ganze als Code zu schreiben verwende ich den goto-Befehl um zur gleichen Sub zu gelangen.

Wenn jemand mir helfen kann oder einen anderen Vorschlag hat wie das generell benutzen kann wäre ich sehr dankbar.

Urgott
 

berndgoedecke

Active Member
Licensed User
Longtime User
Warum Goto

Hallo Urgott,
wenn ich es richtig verstanden habe möchtest du den Efekt erreichen, den das anliegende Beispiel zeigt.

Gruß

berndgoedecke
 

specci48

Well-Known Member
Licensed User
Longtime User
Der Button und das zugehörige Menu sollen identischen Code ausführen.
Hierzu kann man auch die Sub eines Events direkt aufrufen, z.B.

B4X:
Sub Button1_Click
   ' tue hier etwas sehr wichtiges ;-)
End Sub

Sub Menu1_Click
        ' tue genau das, was bei Button1 läuft
   Button1_Click
End Sub

Und noch etwas eleganter - man weist dem Standardevent vom Button und von dem Menu nicht eine eigene Sub zu, sondern direkt eine identische:

B4X:
Sub App_Start
   Form1.Show
   AddEvent("Button1", Click, "Button1_oder_Menue1")
   AddEvent("Menu1", Click, "Button1_oder_Menue1")
End Sub

Sub Button1_oder_Menue1
   ' tue hiuer etwas wichtiges für Button1 und Menue1
End Sub


Gruß
specci48
 

urgott

New Member
Halo.
Danke für deine schnelle Antwort. Habe das Programm umgeschrieben und kann jetzt auch eine device.exe erstellen. Weiß du weshalb der goto-Befehl Probleme bereitet?

Noch eine kleine Frage: Gibt es einen Befhel mit dem man eine Sub beenden kann ohne das ganze Programm zu beenden?

Nochmals danke.

Urgott
 
D

Deleted member 103

Guest
Hallo urgott,

du kannst eine Sub einfach mit ein return beenden.

PHP:
Sub Test
  ...
  ...
  if weiter=true then return
  ...
  ...
End Sub

Ciao,
Filippo
 

specci48

Well-Known Member
Licensed User
Longtime User
Weiß du weshalb der goto-Befehl Probleme bereitet?
Eine generelle Ferndiagnose ist schwer möglich, dazu müßtest Du mal den Code Deiner Sub posten.
Aber: Betrachtet man den verfügbaren Sprachumfang von Basic4ppc, so ist der Goto-Befehl eigentlich überflüssig, weil man in jeder hinsicht "eleganter" programieren kann. Für die Variante "Sprung ans Sub-Ende" zum direkten Rücksprung aus einer Sub dient Return (siehe Post von Filippo) und für den Fall "Sprung aus einer Schleife" heraus kann man den Befehl Break verwenden.

Gruß
specci48
 

klaus

Expert
Licensed User
Longtime User
Hallo specci48
Den Befehl Break kannte ich nicht aber den Befehl Exit ja.
Habe im Helpfile nachgeschaut und in der Liste führt der Name Break zu Exit.
Break scheint also ein älterer Befehl zu sein und ist durch Exit ersetzt.

Güsse
Klaus
Switzerland
 
Last edited:

specci48

Well-Known Member
Licensed User
Longtime User
Hallo Klaus,

Du hast ja recht, Exit statt Break. :signOops:

So etwas kommt halt vor, wenn man Programmiersprachen durcheinander wirft. :sign0148:

Tagsüber im Job Java, abends in der Freizeit Basi4ppc ;)


Gruß
specci48
 

klaus

Expert
Licensed User
Longtime User
Den Goto Befehle sollte man vergessen !
Der Neue Compiler hat noch mehr Einschränkungen als der vorhergehende.
Ich verwende in meinem Natural Frequency Programm eine alte Eigenwert Routine von HP mehr als 20 Jahre alt mit etlichen verschlungenen Goto's. Sie funktionnierte perfekt in HP Basic nachher in VB Basic, habe sie nach Basic4PPC übertragen, funktionierte nicht im alten Compiler. Agraham hat zwei For Next Schlaufen in zwei Do Loop Schlaufen ersetzt und dann lief es. Im Neuen Compiler funktioniert diese Routine nicht mehr.

Wenn es jemanden interessiert sich sogenannten Spagetticode anzusehen den findet Ihr in:
http://www.b4x.com/forum/showthread.php?t=1201

Man könnte sich die Frage stellen ob man den Goto Befehl in Basic4PPC nicht schlicht beseitigen sollte da er im Neuen Compiler mit den Einschränkungen wahrscheinlich mehr Verwirrung einführt als Lösungen bringt.


Grüsse
Klaus
Switzerland
 

urgott

New Member
Hallo nochmal,

wollte mich für die vielen Vorschläge bedanken. Das Problem ist gelöst.

Schöne Grüsse,
Urgott :)
 

klaus

Expert
Licensed User
Longtime User
Hallo agraham,
Yes it was a big surprise, das war wirklich eine grosse Überaschung. Die Eigenwertroutine läuft jetzt auch mit dem Neuen Compiler.

Geschwindigkeitserhöhung 8 mal !!

Die Neue Version des Programmes findet sich im Englischen Forum.
http://www.b4x.com/forum/showthread.php?t=1245

Nochmals herzlichen Dank an agraham für die Hilfe.

Dies ist wieder eine Bestätigung des Wertes dieses Forums !
Wo man Beste Unterstützung bekommt.

Grüsse
Klaus
Switzerland
 

Woinowski

Active Member
Licensed User
Longtime User
Go-to statement considered harmful


Ich verwende in meinem Natural Frequency Programm eine alte Eigenwert Routine von HP mehr als 20 Jahre alt mit etlichen verschlungenen Goto's.

...

Den Goto Befehle sollte man vergessen !

Man könnte sich die Frage stellen ob man den Goto Befehl in Basic4PPC nicht schlicht beseitigen sollte da er im Neuen Compiler mit den Einschränkungen wahrscheinlich mehr Verwirrung einführt als Lösungen bringt.

Interessant ist, dass der 20 Jahre alte HP Code (ca. 1987 also) bereits 20 Jahre hinter dem State of the Art war. Hier ein Klassiker von 1968 (Go-To statement considered harmful von Dijkstra):

http://www.cs.utexas.edu/users/EWD/ewd02xx/EWD215.PDF

Interessant auch diese Retrospektive von 2005

http://david.tribble.com/text/goto.html

Viel Spaß bei der Lektüre
 

klaus

Expert
Licensed User
Longtime User
Hallo Woinowski
Danke für die Lektüre, hab sie durchgelesen.

Die Goto Debatte kenne Ich seit Jahren, habe sie auch mit erlebt.
Meine ersten Programmierschritte habe Ich in Fortran mit Lochkarten gemacht.
Nur wenn die Programmiersprache oder der Compiler die Goto's nicht mehr korrekt verwalten kann passe Ich mich an die Programmiersprache an.
Ich finde die Strukturbefehle auch besser lesbar als die Goto's, kann ja auch Geschmacksache sein.

Mein Ratschlag war mehr unsere jüngeren 'Kollegen' gedacht Goto zu vergessen um sich eventuelle Unanehmlichkeiten zu vermeiden, und nichts Anderes.

Um auf die Eigenwertroutine zurück zu kommen. Ich habe sie vor ungefähr 20 Jahren das erste mal eingesetzt, sie ist aber bestimmt viel älter, und war ursprünglich wahrscheinlich in Fortran geschrieben und in HP Basic übersetzt.

Grüsse
Klaus
 
Last edited:
Top