Typenkonvertierung bei ProcedureReturn?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Kurzer
Beiträge: 1621
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Typenkonvertierung bei ProcedureReturn?

Beitrag 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()
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
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

Re: Typenkonvertierung bei ProcedureReturn?

Beitrag 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
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
Benutzeravatar
Kurzer
Beiträge: 1621
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Typenkonvertierung bei ProcedureReturn?

Beitrag 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.
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
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

Re: Typenkonvertierung bei ProcedureReturn?

Beitrag 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
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
Benutzeravatar
Kurzer
Beiträge: 1621
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Typenkonvertierung bei ProcedureReturn?

Beitrag 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.
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
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

Re: Typenkonvertierung bei ProcedureReturn?

Beitrag 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 ...
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
Antworten