![]() |
Delphi-Version: 2007
Unverständliche CASE-Anweisung
Moin,
manchmal weiß man nicht, warum es geht. Aber es geht - zumindest unter Delphi 2007:
Delphi-Quellcode:
Am Ende steht
program Project4;
{$APPTYPE CONSOLE} uses SysUtils; var myValue : integer; myText : string; begin myValue:= 0; case myValue of 1 : myText:= FormatFloat( '0.00', 4711.123 / 100 ); 2 : myText:= FormatFloat( '0.00', 4711.456 / 60 ); else ''; /// <-- wat? wer bist DU denn? end; end.
Delphi-Quellcode:
Keine Zuweisung - nichts. Und Delphi übersetzt den Code traumhaft schön und ist glücklich wie ein Schaf im Klee. Das sollte ich zwar auch sein, solange es geht - aber da stellt sich doch die Frage, was das da am Ende ist. Jemand eine Ahnung, aus welcher Ecke das kommen mag?
else '';
|
AW: Unverständliche CASE-Anweisung
Bei Delphi XE gibt es dort eine Fehlermeldung.
Vermutlich wurde das bei Delphi 2007 einfach als nop akzeptiert. :mrgreen: |
AW: Unverständliche CASE-Anweisung
In D5 geht es nicht mit der Meldung:
Anweisung erforderlich, aber Ausdruck vom Typ 'String' gefunden. |
AW: Unverständliche CASE-Anweisung
Wie bitte??
unter D7: [Fehler] Project2.dpr(13): Anweisung erforderlich, aber Ausdruck vom Typ 'String' gefunden was hast Du da getrickst? Gruß K-H |
AW: Unverständliche CASE-Anweisung
XE2 meldet
[DCC Error] MainUnit.pas(...): E2014 Statement expected, but expression of type 'string' found |
AW: Unverständliche CASE-Anweisung
XE meckert, aber Delphi 2007 nimmt das tatsächlich (übrigens auch andere Konstanten wie true, 1 oder Pi). Was sagt denn Dein XE3 Architect dazu? :mrgreen:
|
AW: Unverständliche CASE-Anweisung
Hab mein 2007 grad nicht dabei. :cry:
Was macht der Compiler denn für Code daraus? Eventuell wird dieser String wie eine Funktion behandelt? Deren Ergebnis muß man ja auch nicht unbedingt irgendwo zuweisen. (außer dieses Verhalten wurde deaktiviert) |
AW: Unverständliche CASE-Anweisung
Zitat:
Vielleicht kannst Du mir in zwei, drei Stichworten sagen, wie ich hier hilfreiche Informationen erhalten kann. :-) |
AW: Unverständliche CASE-Anweisung
Mein D2007 schluckt's auch. Folgender Code
Delphi-Quellcode:
liefert folgenden Assembler-Code:
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;
Code:
bzw.
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;
Code:
Scheinbar wird der ominöse else-Fall einfach ignoriert.
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; |
AW: Unverständliche CASE-Anweisung
Sowas ist mir letztens aus passiert mit D2010. Hat der Compiler ohne zu meckern gefressen und ich wunder mich, warum das Programm nicht das mach, was ich will.... :stupid:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz