AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Unverständliche CASE-Anweisung

Ein Thema von Daniel · begonnen am 10. Mai 2012 · letzter Beitrag vom 10. Mai 2012
Antwort Antwort
Seite 1 von 2  1 2      
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#1

Unverständliche CASE-Anweisung

  Alt 10. Mai 2012, 09:32
Delphi-Version: 2007
Moin,

manchmal weiß man nicht, warum es geht. Aber es geht - zumindest unter Delphi 2007:

Delphi-Quellcode:
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.
Am Ende steht else ''; 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?
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.347 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Unverständliche CASE-Anweisung

  Alt 10. Mai 2012, 09:37
Bei Delphi XE gibt es dort eine Fehlermeldung.

Vermutlich wurde das bei Delphi 2007 einfach als nop akzeptiert.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
relocate

Registriert seit: 26. Mai 2009
60 Beiträge
 
#3

AW: Unverständliche CASE-Anweisung

  Alt 10. Mai 2012, 09:38
In D5 geht es nicht mit der Meldung:

Anweisung erforderlich, aber Ausdruck vom Typ 'String' gefunden.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Unverständliche CASE-Anweisung

  Alt 10. Mai 2012, 09:39
Wie bitte??
unter D7:
[Fehler] Project2.dpr(13): Anweisung erforderlich, aber Ausdruck vom Typ 'String' gefunden

was hast Du da getrickst?
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
UliBru

Registriert seit: 10. Mai 2010
155 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Unverständliche CASE-Anweisung

  Alt 10. Mai 2012, 09:41
XE2 meldet
[DCC Error] MainUnit.pas(...): E2014 Statement expected, but expression of type 'string' found
Er wollte so richtig in Delphi einsteigen. Nun steckt er ganz tief drin ...
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Unverständliche CASE-Anweisung

  Alt 10. Mai 2012, 09:46
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?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#7

AW: Unverständliche CASE-Anweisung

  Alt 10. Mai 2012, 10:07
Hab mein 2007 grad nicht dabei.
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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Unverständliche CASE-Anweisung

  Alt 10. Mai 2012, 10:09
Was macht der Compiler denn für Code daraus?
Tja - da muss ich gestehen, dass Assembler meine schwache Seite ist. Ich kann nur sagen, dass da 'ne EXE-Datei rauskommt und dass die eher merkwürdig aussieht, wenn ich sie in Word öffne.

Vielleicht kannst Du mir in zwei, drei Stichworten sagen, wie ich hier hilfreiche Informationen erhalten kann.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
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
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#10

AW: Unverständliche CASE-Anweisung

  Alt 10. Mai 2012, 10:26
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....
Jens
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz