keine Verwendungsmöglichkeit von Optionalen Pointern

Fragen und Bugreports zur PureBasic 4.0-Beta.
Benutzeravatar
Leonhard
Beiträge: 602
Registriert: 01.03.2006 21:25

keine Verwendungsmöglichkeit von Optionalen Pointern

Beitrag von Leonhard »

Ich glaub der Code erklärt mein Problem. Das läst sich zwar umgehen, aber mit mehr aufwand.

Code: Alles auswählen

;/ ProcedurePointer
Prototype p_Prototype(Param1)

Procedure VordefinierterCallback(Param1)
EndProcedure
Procedure proc(Callback.p_Prototype = @VordefinierterCallback()) ;<-- Hier funzt es nicht
EndProcedure

;/ LabelPointer
Procedure proc(*Buffer = ?Label) ;<-- Hier funzt es nicht

EndProcedure

DataSection
  label:
    Data.l 432, 532
EndDataSection
Edit by NicTheQuick: Threadtitel berichtigt, damit man auch weiß, was gemeint ist. :wink:
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: keine Verwendungsmöglichkeit von Optimalen Pointern

Beitrag von Kaeru Gaman »

Leonhard hat geschrieben:Ich glaub der Code erklärt mein Problem.
nein.
wo sind dort pointer in irgendeiner beziehung "optimal" :?

oder meinst du "optional"?
dann schreib das bitte auch.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Leonhard
Beiträge: 602
Registriert: 01.03.2006 21:25

Beitrag von Leonhard »

Wie man sehen kann werden Proceduren mit Parametern erstellt. Diese Parameter sollen Optimale Parameter mit der angabe von einem Pointer sein. Leider lässt PureBasic das nicht zu und sagt Syntax Error.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Dein Code ergibt nicht viel Sinn :mrgreen: (genauso wie der Titel)
Label entweder direkt verwenden, macht keinen Sinn einen Parameter draus
zu machen oder einer Variable zuordnen.

Den Rest müßtest Du mal erklären, ich bin zu doof :lol:

Code: Alles auswählen

Procedure proc(*Buffer = #PB_Any) ;<-- Hier funzt es
  If *Buffer = #PB_Any : *Buffer = ?label : EndIf

EndProcedure

DataSection
  label:
    Data.l 432, 532
EndDataSection
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

also meinst du tatsächlich "Optionale" Parameter.

es ist nicht sonderlich schlimm, wenn man mal was falsch schreibt,
aber das fällt nunmal weniger ins gewicht, wenn man eine
brauchbare erklärung dazuschreibt, was man eigentlich will.


meines Wissens muss ein Defaultwert (Vorgabewert) für einen Optionalen Parameter eine Konstante sein.
Pointer sind aber keine konstanten.


optional = wahlfrei, von lat. optio = freier wille
optimal = bestmöglich, von lat. optimus = der beste
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Hier die Lösung für den anderen optionalen Parameter:

Code: Alles auswählen

;/ ProcedurePointer
Prototype p_Prototype(Param1)

Procedure VordefinierterCallback(Param1)
EndProcedure
Procedure proc(Callback.p_Prototype = 0) ;<-- Hier funzt es
  If Callback = 0 : Callback = @VordefinierterCallback() : EndIf
EndProcedure
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

so kann es funktionieren, weil die 0 eine konstante ist, die zur kompilezeit feststeht, deshalb kann sie eingesetzt werden.
und natürlich kann man dann in der ersten zeile darauf reagieren.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Leonhard
Beiträge: 602
Registriert: 01.03.2006 21:25

Beitrag von Leonhard »

@ts-soft
ich weiß, wie ich das auch sonst machen kann. Dann verwende ich aber mehr Assembler-Befehle, und in meinem Programm ist jede Optimierung des Codes erforderlich.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Wenns anders gehen würde, wäre es trotdem keine Optimierung des Codes,
lediglich eine Optimierung des Sources auf kosten der Compilierzeit. Das
ändert aber nichts an der Ausführungsgeschwindigkeit!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Gesperrt