Mir war so, als wenn ich mehrmals gelesen hatte, dass Boolean-Result jetzt immer mit False initialisiert seien.
Für
Win32 ist es definitiv nicht der Fall,
aber kann sein, dass es nur Win64 betraf.
Unter Win64 scheint das auch wirklich der Fall zu sein.
Delphi-Quellcode:
function Test: Boolean;
begin
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
if Test then
Beep;
end;
Aber ich erkenne hier nicht, dass irgendwo BYTE[rbp+$0f] mit 0 initialisiert wird.
Delphi-Quellcode:
Unit1.pas.26: begin
00000000008E77C0 55 push rbp
00000000008E77C1 4883EC10 sub rsp,$10
00000000008E77C5 488BEC mov rbp,rsp
Unit1.pas.27: end;
00000000008E77C8 480FB6450F movzx rax,byte ptr [rbp+$0f]
00000000008E77CD 488D6510 lea rsp,[rbp+$10]
00000000008E77D1 5D pop rbp
00000000008E77D2 C3 ret
In
Win32 steckt auch der 1Byte-Boolean auch immer nur im AL,
während dieses Byte im Win64 auf das komplette RAX erweitert wird und "zufällig" bisher überall 0 bzw. False ergab, wenn es vergessen wurde zu setzen.
Sowohl in
Win32 und Win64 meckert aber der Compiler immernoch rum.
Zitat:
[dcc64 Warnung] Unit1.pas(27): W1035 Rückgabewert der Funktion 'Test' könnte undefiniert sein
Und da es in
Win32 definitiv nicht der Fall ist, würde ich so oder so nicht von ausgehen, dass es wirklich
immer False ist.