Mit GOTO aus verschachtelten Funktionen springen
Übersicht

Kernel32Betreff: Mit GOTO aus verschachtelten Funktionen springen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mal eine Verständnisfrage: wenn ich eine Funktion A aufrufe und in dieser zu Funktion B springe (also eine Ebene tiefer) dann springt Blitz bei einem "Return" ja wieder eine Ebene nach oben, also zurück nach Funktion A.
Wenn ich mich jetzt aber tief in verschachtelten Funktionen befinde und mich nicht von einer Funktion zur anderen "zurückarbeiten" möchte, sondern irgendwo von der 30. verschachtelten Funktion aus SOFORT zurück ins Hauptprogramm möchte (ohne das Blitz erst wieder alle vorherigen Funktionen rückwärts durchläuft), könnte man doch GOTO benutzen. Also meine Frage ist wohl genauer: löscht GOTO sauber den Stack für den Funktionsaufrufe? Oder gibt es irgendwann einen Stack Overflow, wenn ich "hart" aus verschachtelten Funktionen rausspringe? |
||
-------------
Wollte neulich Herrn Brot anrufen, aber da war belegt. Dann hab ich bei Wheight Watcher's angerufen, aber niemand hat abgenommen. Schliesslich hab ich im Irak angerufen, aber dort war besetzt o.O |
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die direkte Antwort auf deine Frage hab ich nicht. Aber ich hab einen Workaround:
Und zwar einen festgelegten Return (in diesem Fall 0), der alle Functions dazu veranlasst, abzubrechen. Code: [AUSKLAPPEN] I()
WaitKey End Function I() Print "I" If dont() = 0 Then Return 0 End Function Function dont() Print "dont" If need() = 0 Then Return 0 End Function Function need() Print "need" If goto_() = 0 Then Return 0 End Function Function goto_() Print "goto" Return 0 End Function |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
Kernel32 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das wollte ich eigentlich vermeiden, weil das den Code aufbläht und unübersichtlicher macht. Ausserdem ist das recht umständlich wenn man eine Funktion in mehrmals aus einer anderen Funktion aufruft.
Aber etwas anderes wird mir wohl nicht übrig bleiben, da mir gerade wieder eingefallen ist, daß man in Blitz von einer Funktion aus nicht mit GOTO zu einem Label ausserhalb der Funktion springen kann ("Undefined Label...") ![]() |
||
-------------
Wollte neulich Herrn Brot anrufen, aber da war belegt. Dann hab ich bei Wheight Watcher's angerufen, aber niemand hat abgenommen. Schliesslich hab ich im Irak angerufen, aber dort war besetzt o.O |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Man sollte sowieso keine Schleifen mit einem Goto vorzeitig verlassen, da es eben zu einem Stack -overflow kommt. Was deine Codestruktur angeht, so bin ich mir sicher, dass dir da etwas sinnvolles einfällt. Ich hatte auch grad vor weniger Tagen das Problem, und habe durch etwas überlegen meine Struktur komplett verbessern können. | ||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Matthias |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mh mann könnte vieleicht einen Functionsmanager benutzen.
Also so. Code: [AUSKLAPPEN] Graphics 800,600,32,2 Global FuncLink$="Autos" SetBuffer BackBuffer() Repeat: UpdateFuncLink() Flip Until KeyDown(1) End Function UpdateFuncLink() Select FuncLink Case "Autos" Autos() Case "Bäume" Baume() Case "Häuser" Hauser() End Select End Function Function Autos() If KeyHit(57)=1 Then FuncLink="Bäume":Return Print "Autos" End Function Function Baume() Print "Bäume" End Function Function Hauser() Print "Häuser" End Function |
||
DreamoraBetreff: Re: Mit GOTO aus verschachtelten Funktionen springen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Kernel32 hat Folgendes geschrieben: Mal eine Verständnisfrage: wenn ich eine Funktion A aufrufe und in dieser zu Funktion B springe (also eine Ebene tiefer) dann springt Blitz bei einem "Return" ja wieder eine Ebene nach oben, also zurück nach Funktion A.
Wenn ich mich jetzt aber tief in verschachtelten Funktionen befinde und mich nicht von einer Funktion zur anderen "zurückarbeiten" möchte, sondern irgendwo von der 30. verschachtelten Funktion aus SOFORT zurück ins Hauptprogramm möchte (ohne das Blitz erst wieder alle vorherigen Funktionen rückwärts durchläuft), könnte man doch GOTO benutzen. die einfache lösung ist es einfach nicht blödsinnig mit funktionen zu verschachteln. Blitz hat nicht aus Jux support für Gosub ![]() Aber ich würd sagen ein richtig strukturierter Code hilft da bedeutend mehr ... würd sagen du hast es mit "funktionen draus bauen" einfach massiv übertrieben. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group