Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
10. Feb 2022
Weil ich's grad nochmal sehe.
Ja, die Rückgabe ist in Delphi in EAX bzw. RAX, wenn der Typ kleiner/gleich einem Register ist, also maximal Integer SizeOf(Pointer).
Aber gemangte Typen, also jene mit einer zwangsweisen Speicherverwalung/Initialisierung/Finalisierung, betrifft es nicht.
Die werden vom Ausrufer verwaltet und daher kommt dort das Result als impliziter VAR-Parameter hinten dran....
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
19. Sep 2014
Jupp, gibt es nicht.
Du kannst dir aber einen RecordHelper schreiben und für die ungewollten Typen einen Class Operator implementieren, welcher als deprecated markiert wird. :stupid:
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
19. Sep 2014
Nja, bestimmte Typen im Delphi werden automatisch verwaltet und da scheitert dann diese Prüfung, weil sie ja "im Prinzip" initialisiert sind.
Mit einem kleinen Problem, welcher aber erst auffällt, wenn man die Interna kennt. (drum wird auch bei einem Integer gewarnt, aber nicht bei einem String)
function Test1: Integer;
var
i: Integer;
begin
if i = 0 then ;
end;
function Test2:...
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
19. Sep 2014
Sehr viele deklarieren ihre Variablen einfach nur blind als Integer, tun aber dann aber nur kleine Werte da rein, welche auch in ein Byte/Bit passen würden.
Dann würde der Cast zu 100% fuktionieren. :stupid:
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
19. Sep 2014
Der Compiler weiß doch nicht, ob da nicht zufällig später (zur Laufzeit) mal ein Wert drin ist, der da reinpassen könnte. :zwinker:
{$OVERFLOWCHECKS ON} oder in den Projektoptionen aktivieren.
Der Delphi-Compiler merkt sich nicht den Inhalt von Variablen (aus Konstanten) und kann dann später auch nicht wissen ob es passt.
Drum kann der Compiler auch nicht Bescheid geben, wenn man vergißt...