Seite 1 von 1

keine Verwendungsmöglichkeit von Optionalen Pointern

Verfasst: 15.12.2006 14:55
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:

Re: keine Verwendungsmöglichkeit von Optimalen Pointern

Verfasst: 15.12.2006 15:06
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.

Verfasst: 15.12.2006 15:09
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.

Verfasst: 15.12.2006 15:09
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

Verfasst: 15.12.2006 15:18
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

Verfasst: 15.12.2006 15:22
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

Verfasst: 15.12.2006 15:24
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.

Verfasst: 16.12.2006 07:11
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.

Verfasst: 16.12.2006 12:19
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!