![]() |
Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
Hallo,
ich hab folgenden Codeabschnitt in meinem Quelltext:
Delphi-Quellcode:
Also.. kann mir jemand sagen was da los ist? :wall:
function TForm1.Test : string;
var xtest : real; begin with MyZQuery do try sql.Text:='SELECT * FROM Tabelle'; Active:=True; if (FieldByName(cfGesamtpreis).AsFloat>50.0)and(FieldByName(cfGesamtpreis).AsFloat <60.0) then xtest:=FieldByName(cfGesamtpreis).AsFloat;//in xtest wird hier dauernd 5,2598911262e-307 geschrieben Result:=FieldByName(cfID).AsString; finally Active:=False; end; end; Danke :) :angel: |
Re: Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
Woher weisst Du, wass in xtest geschrieben wird? So wie ich das sehe, wird xtest nicht weiter verwendet.
|
Re: Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
die Variable wird vom Compiler wegoptimiert
Delphi-Quellcode:
function TForm1.Test : string;
var xtest : real; begin with MyZQuery do try sql.Text:='SELECT * FROM Tabelle'; Active:=True; if (FieldByName(cfGesamtpreis).AsFloat>50.0)and(FieldByName(cfGesamtpreis).AsFloat <60.0) then xtest:=FieldByName(cfGesamtpreis).AsFloat;//in xtest wird hier dauernd 5,2598911262e-307 geschrieben Result:=FieldByName(cfID).AsString; finally Active:=False; end; if xtest = 0 then ; // damit sollte es gehn end; |
Re: Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
Selbst wenn xtest nicht wegoptimiiert würde, kann die Variable immer noch einen unbestimmten Inhalt haben. Es könnte ja durchaus passieren, dass die If-Bedingung nicht erfüllt ist.
|
Re: Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
ich hab da en Haltepunkt rein gemacht... auf die zuweisung..
|
Re: Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
Du musst dann aber auch noch einen Schritt weiter gehen. Ansonsten ist die Zuweisung noch nicht erfolgt und die Variable ist noch nicht gefüllt. Hat also ihren nicht-initialisierten Zustand.
Oder setze mal den Haltepunkt nach der Zuweisung. (Bei der Result-Zuweisung) |
Re: Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
wenn ich ihn danach setze besteht die möglichkeit das er nich reingegangen ist. so schalu das ich en schritt weiter muss war ich auch.. ich schu morgen mal was passiert wenn ich die Variable danach nochmal verwende...
|
Re: Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
mach also mal den Haltepunkt auf Result:=FieldByName(cfID).AsString; und normaler Weise sollte Delphi was sagen, wegen der nichtgenutzten Variable ... also versuch es auch mal mit urgendwas, was diese Variable hinterher noch verwendet (z.B. mein IF).
|
Re: Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
ok ich hab die Variable danach nochmal verwendet und jetzt funt es, scheint wirklich "nur" wegoptimiert geworden zu sein. Aber könnte man das nicht auch wenigstens dazuschreiben? Da steht zwar das der auf xtest zugewiesene Wert nie verwendet wird, aber adraus kann ich doch nicht darauf schliessen das der wegoptimiert wurde :roll:
|
Re: Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
Tja das ist genau der Grund, warum die Optimization grundsätzlich ausgeschaltet werden sollte. Der Compiler ist auch ohne Optimierung schnell genug und wenn sie an ist, macht er nur Blödsinn, wie z.B.: durchaus sinnvollen Code wegzuoptimieren oder Schindluder mit dem CallStack zu treiben.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:22 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