GOTO auch noch variabel möglich?
Solange man nur innerhalb der Prozedur springt kann nix passieren. Wenn du aber von einer Prozedur in eine andere springst und dort auf lokale Variablen zugreifst, wird das unweigerlich zu schweren Fehlern führen. Da die lokalen Variablen auf dem Stack liegen.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!

Sehr schlechte Idee. Das ist kein GoTo sondern praktisch ein GoSub. Der Unterschied ist das beim GoSub (Assembler: Call) eine Rücksprungadresse auf den Stack gepusht wird. Würdest du nun CallFunctionFast missbrauchen um zu einem Label zu springen währen alle lokalen Variablen auf dem Stack um 4 Byte verschoben. Das einzige was wirklich Sinn macht ist in der tat ein echtes GoTo also Assembler: Jmp. Das geht auch ohne den Inline-Assemblersupport zu aktivieren.Christi hat geschrieben:wie wärs mit CallFunctionFast?
Code: Alles auswählen
Define.l JmpDest
JmpDest = ?Blub
!mov eax,[p.v_JmpDest]
!jmp eax
Blub:
Code: Alles auswählen
Define.l JmpDest
JmpDest = ?Blub
!push [p.v_JmpDest]
!ret
Blub:
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!

-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
@Thorium
tja, das kommt davon, wenn man aus faulheit die erste seite des topics nicht mehr liest...
http://www.purebasic.fr/german/viewtopi ... 608#169608
wie du siehst, muss man weder ein register noch den stack mißbrauchen
tja, das kommt davon, wenn man aus faulheit die erste seite des topics nicht mehr liest...

http://www.purebasic.fr/german/viewtopi ... 608#169608
Kaeru Gaman hat geschrieben:Code: Alles auswählen
!JMP [v_ziel]
wie du siehst, muss man weder ein register noch den stack mißbrauchen
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.