Einzelnen Beitrag anzeigen

Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#9

AW: Unverständliche CASE-Anweisung

  Alt 10. Mai 2012, 10:25
Mein D2007 schluckt's auch. Folgender Code
Delphi-Quellcode:
function Blah(myValue: Integer): string;
begin
  case myValue of
    1: Result := 'OK';
    2: Result := 'OK';
    else
      '666'; /// <-- wat? wer bist DU denn?
  end;
end;

function Blubb(myValue: Integer): string;
begin
  case myValue of
    1: Result := 'OK';
    2: Result := 'OK';
    else
      Result := '666'; /// <-- wat? wer bist DU denn?
  end;
end;
liefert folgenden Assembler-Code:
Code:
MainF.pas.39: case myValue of
004570E4 8B45FC          mov eax,[ebp-$04]
004570E7 48               dec eax
004570E8 7405             jz $004570ef
004570EA 48               dec eax
004570EB 7411             jz $004570fe
004570ED EB1C            jmp $0045710b
MainF.pas.40: 1: Result := 'OK';
004570EF 8B45F8           mov eax,[ebp-$08]
004570F2 BA18714500       mov edx,$00457118
004570F7 E86CD7FAFF      call @LStrAsg
004570FC EB0D            jmp $0045710b
MainF.pas.41: 2: Result := 'OK';
004570FE 8B45F8           mov eax,[ebp-$08]
00457101 BA18714500       mov edx,$00457118
00457106 E85DD7FAFF      call @LStrAsg
MainF.pas.45: end;
bzw.
Code:
MainF.pas.49: case myValue of
00457134 8B45FC          mov eax,[ebp-$04]
00457137 48               dec eax
00457138 7405             jz $0045713f
0045713A 48               dec eax
0045713B 7411             jz $0045714e
0045713D EB1E            jmp $0045715d
MainF.pas.50: 1: Result := 'OK';
0045713F 8B45F8           mov eax,[ebp-$08]
00457142 BA78714500       mov edx,$00457178
00457147 E81CD7FAFF      call @LStrAsg
0045714C EB1C            jmp $0045716a
MainF.pas.51: 2: Result := 'OK';
0045714E 8B45F8           mov eax,[ebp-$08]
00457151 BA78714500       mov edx,$00457178
00457156 E80DD7FAFF      call @LStrAsg
0045715B EB0D            jmp $0045716a
MainF.pas.53: Result := '666'; /// <-- wat? wer bist DU denn?
0045715D 8B45F8           mov eax,[ebp-$08]
00457160 BA84714500       mov edx,$00457184
00457165 E8FED6FAFF      call @LStrAsg
MainF.pas.55: end;
Scheinbar wird der ominöse else-Fall einfach ignoriert.
Uli Gerhardt
  Mit Zitat antworten Zitat