German Probleme bei device.exe wegen goto-Befehl

Discussion in 'German Forum' started by urgott, Jan 18, 2008.

  1. urgott

    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
     
  2. berndgoedecke

    berndgoedecke Active Member Licensed User

    Warum Goto

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

    Gruß

    berndgoedecke
     
  3. specci48

    specci48 Well-Known Member Licensed 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.

    Code:
    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:

    Code:
    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
     
  4. urgott

    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
     
  5. Filippo

    Filippo Expert Licensed User

    Hallo urgott,

    du kannst eine Sub einfach mit ein return beenden.

    PHP:
    Sub Test
      
    ...
      ...
      if 
    weiter=true then return
      ...
      ...
    End Sub
    Ciao,
    Filippo
     
  6. specci48

    specci48 Well-Known Member Licensed User

    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
     
  7. klaus

    klaus Expert Licensed 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: Jan 19, 2008
  8. specci48

    specci48 Well-Known Member Licensed 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
     
  9. klaus

    klaus Expert Licensed 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.basic4ppc.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
     
  10. agraham

    agraham Expert Licensed User

  11. urgott

    urgott New Member

    Hallo nochmal,

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

    Schöne Grüsse,
    Urgott :)
     
  12. klaus

    klaus Expert Licensed 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.basic4ppc.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
     
  13. Woinowski

    Woinowski Active Member Licensed User

    Go-to statement considered harmful

    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
     
  14. klaus

    klaus Expert Licensed 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: Feb 7, 2008
Loading...