Seite 1 von 1

Typenkonvertierung bei ProcedureReturn?

Verfasst: 17.12.2015 22:43
von Kurzer
Kurze Frage an die Fachleute mit Internawissen:

Wenn ich innerhalb einer Prozedure z.B. mit einer Word variable hantiere und diese dann per ProcedureReturn zurückgebe, sollte der Prozedurtyp dann auch zwingend .w sein? Oder kann er auch .i sein (kleiner als .w nicht, das ist klar)?
Hat das Einfluss auf Berechnungen die diese Prozedur als Teil einer Rechnung nutzen?

Code: Alles auswählen

Procedure.w test()   ; .w oder besser .i ?
	Protected.w Value = 300
	ProcedureReturn 	Value
EndProcedure

Define.i iMeinInteger = 80000
Debug iMeinInteger + test()

Re: Typenkonvertierung bei ProcedureReturn?

Verfasst: 17.12.2015 23:20
von ts-soft
Für Variablen, die sich nicht in Strukturen oder Arrays befinden, sollte der Typ Integer (abgesehen von Quads, Strings und Floatingpoint),
der beste und schnellste sein. Das wurde auch vor kurzem von Fred im engl. Forum empfohlen.

Es gibt aber Ausnahmen, wenn zum Beispiel bei einem Longwert ein überlauf, aufgrund der Signed-Variablen, auftritt. Aber das sollte meist
vernachlässigbar sein.

Procedure.l bla() wird auch erst seit Version 5.4x berücksichtigt, ist also vorher niemanden aufgefallen :mrgreen:

Gruß
Thomas

Re: Typenkonvertierung bei ProcedureReturn?

Verfasst: 17.12.2015 23:31
von Kurzer
Hallo Thomas,

danke für die schnelle Antwort. Die generelle Verwendung von .i habe ich bereits verinnerlicht.
Ich hätte das Beispiel doch näher am wirklichen Fall anlehnen sollen.

Es geht konkret um folgende Rückgabezeile:

Code: Alles auswählen

ProcedureReturn StructurVar\wMyWordValue    ; <- Das ist ein WORD
Sollte hier der Prozedurtyp eher .w sein oder kann ich .i nutzen oder sollte ich ihn weglassen?
Es funktioniert zwar alles davon, aber ich weiß nicht was der Norm entspricht oder mit am wenigsten Casting abläuft. Am Rückgabewert selbst möchte ich nichts ändern, da ich hier Fremdcode in den händen habe, den ich im Kern nicht umschreiben möchte.

Re: Typenkonvertierung bei ProcedureReturn?

Verfasst: 18.12.2015 00:06
von ts-soft
.i haste schon verinnerlicht, dann bleib dabei. Weglassen würde ich das .i nicht, jedenfalls nicht wenn ich auch Fremdcode nutze,
weil da könnte ja irgendwo stehen Define.b oder so :mrgreen:

Früher mal, als ich ein kleiner Junge war :mrgreen: , da war das noch wichtig. Aber heutzutage spielt das im Allgemeinen keine Rolle mehr,
einen grösseren Typ zu nutzen, mal abgesehen von den Ausnahmen (z.B. Strukturen, Interfaces, Arrays).

Viele schreiben ja auch Procedure.b weil Sie #True oder #False zurückgeben wollen. Totaler Quatsch, #True ist ein Long :mrgreen:

Gruß
Thomas

Re: Typenkonvertierung bei ProcedureReturn?

Verfasst: 18.12.2015 00:39
von Kurzer
Ok, dass #True ein Long ist, muss man aber auch erstmal wissen. ;)
Wenn ich Dich jetzt richtig verstanden habe, dann mache ich mit "Procedure.i ()" nicht viel verkehrt, auch wenn eine Bytevariable zurückgegeben wird.

Re: Typenkonvertierung bei ProcedureReturn?

Verfasst: 18.12.2015 00:53
von ts-soft
Mit Procedure.i machste im allg. alles richtig.

Die WinAPI Konstanten sind meines Wissens nach, alle LONG. Kann mich da zwar auch Irren oder es gibt da Ausnahmen, aber ...