GOTO auch noch variabel möglich?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Ich hab nicht gesagt, daß man es so machen muß und ich fordere auch nichts :roll:

Aber daß es zumindest gehen müßte, ist doch auch gut zu wissen, wo ist denn das Problem? Immerhin schreibt Dieter, daß er Angst kriegt ;) also ist es doch berechtigt, es auch mit Bordmitteln zu machen, wenn es möglich ist. Und Funktions-Pointer (also nix mit GOTO) sind ebenfalls praktisch und auch in Hochsprachen noch gern gesehen.
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag von Froggerprogger »

:D

Code: Alles auswählen

Macro Goto(x)
  !JMP[v_#x]
EndMacro

var = ?mark2
Goto(var) ; mit runden Klammern indirekter Sprung zu Adresse mit Wert in 'var'
End

mark1:
Debug 1
End

mark2:
Debug 2
Goto mark1 ; ohne Klammern normaler Sprung zu Sprungmarke namens 'mark1'
End
So, nu gehts ja fast auch ohne Assembler...
!UD2
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> mit reinen PB-Sprachmitteln

Code: Alles auswählen

Procedure Dingens( Nr.l)
  Select Nr
    Case 1
      Bla
    Case 2
      Blubb
    Case 3
      Schnarch
  EndSelect
EndProcedure
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Bla, Blubb und Schnarch sind keine PB-Sprachmittel!!!!1!1!!!1111!!11.5
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Beitrag von gnasen »

ZeHa hat geschrieben:Bla, Blubb und Schnarch sind keine PB-Sprachmittel!!!!1!1!!!1111!!11.5
das sagst du jetzt erst??? und ich wunder mich, warum nie eins meiner Programme ans laufen kam ;)
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Mich beschleicht das Gefühl, das ganze hat mit dem nächsten Contest (Stichwort "Crackme") zu tun... Bei sowas muss man halt zuweilen auch mal den breitgetretenen Pfad der Hochsprachen verlassen... <)
Benutzeravatar
GreyEnt
Beiträge: 376
Registriert: 20.07.2006 19:41

Beitrag von GreyEnt »

Jungs habt euch wieder lieb.

Tut mal schön durch die Hose atmen. 8)

Es war nur so eine Frage. Nun weiss ich das es nicht geht. Jedenfalls nicht so wie ich es wolte. Also Tread löschen bevor sich PureBasic in zwei Lager teilt. :)
Ich progge PureBasic weil Jägermeister nen dicken Kopf macht.
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Dieter Platzke hat geschrieben:Also Tread löschen bevor sich PureBasic in zwei Lager teilt. :)
:lol:

:mrgreen:
1. PureBasic kann sich nicht teilen
2. das Forum hier ist schon geteilter Meinung
3. Thread löschen würde im Fall der Fälle kontraproduktiv

8)

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Vielleicht so ?

Code: Alles auswählen

PrototypeC Proc() 

proc = 3
Goto program_start

Proc1:		
	Debug "call Proc1"
	Return 

Proc2:
	Debug "call Proc2"
	Return 

Proc3:
	Debug "call Proc3"
	Return 


program_start:

Select proc
	Case 1
		Test.Proc = ?Proc1		
	Case 2
		Test.Proc = ?Proc2
	Case 3
		Test.Proc = ?Proc3
EndSelect

Test()
Statt "?Proc1" usw , kann man natuerlich auch irgendwelche
Variablen einsetzen. Hauptsache ein Zeiger auf eine Function wird
uebergeben.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Ist das böse, oder kann da nichts passieren?

Code: Alles auswählen

Prototype Jump()

Define a.l
Define Go.Jump

Go = ?mark1
Debug go()
Go = ?mark2
Debug go()
Go = ?mark3
Debug go()

End

mark1:
  Debug "Mark 1"
  !MOV Eax, 123
Return

mark2:
  Debug "Mark 2"
  !MOV Eax, 456
Return

mark3:
  Debug "Mark 3"
  !MOV Eax, 789
Return
:mrgreen:
Antworten