![]() |
Was will mir mein Compiler damit sagen ??
Zitat:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Math; type TForm1 = class(TForm) LabeledEdit1: TLabeledEdit; LabeledEdit2: TLabeledEdit; LabeledEdit3: TLabeledEdit; LabeledEdit4: TLabeledEdit; Label1: TLabel; Label2: TLabel; Button1: TButton; GroupBox1: TGroupBox; RadioButton1: TRadioButton; RadioButton2: TRadioButton; RadioButton3: TRadioButton; RadioButton4: TRadioButton; Edit1: TEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public var op: integer; //Variable für den Ergebniswert { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var a,b,x,y: real; // <-- hier sagt der compiler das o.g. begin Edit1.Clear; op := 0; //Operator = 0 // Werte von den Edit-Feldern holen und den Variablen zuweisen a := strtofloat(labelededit3.text); b := strtofloat(labelededit2.text); x := strtofloat(labelededit4.text); y := strtofloat(labelededit1.text); // RadioBox-click feststellen und Formel feststellen. if RadioButton1.checked then op := 1; if RadioButton2.checked then op := 2; if RadioButton3.checked then op := 3; if RadioButton4.checked then op := 4; // Lasset uns Rechen if op = 1 then Edit1.text := FloatToStr(b * a * Power(a,x)); if op = 2 then Edit1.text := FloatToStr(y / Power(a,x)); if op = 3 then Edit1.text := FloatToStr(power((y/b), 1/x)); if op = 4 then Edit1.text := FloatToStr(ln(y/b)/ln(a)); end; end. |
Re: Was will mir mein Compiler damit sagen ??
Hallo PBiggi,
es sind Hinweise. Du weisst einer Variablen einen Wert zu, verwendest den zugewiesenen Wert aber nicht. Die Quellcode-Zeile wurde dabei schon durch die Optimierung rausgeworfen, aber der Compiler gibt dir den Hinweis, damit du die Zeile eventuell auch entfernst. Greetz alcaeus |
DP-Maintenance
Dieses Thema wurde von "alcaeus" von "VCL / WinForms / Controls" nach "Sonstige Fragen zu Delphi" verschoben.
Hat keinen wirklichen Bezug zur VCL. Ab nach sonstiges ;) |
Re: Was will mir mein Compiler damit sagen ??
Das sind Hinweise, die besagen, dass den jeweiligen Variablen Werte zugewiesen wurden, die aber nirgendwo benutzt werden. Wie es halt in dem Hint steht ;)
|
Re: Was will mir mein Compiler damit sagen ??
Zitat:
|
Re: Was will mir mein Compiler damit sagen ??
op wird auf 0 gesetzt, also trifft keine der unteren if-Abfragen zu, ergo werden die variablen nicht gebraucht ;)
:oops: Stimmt nicht ... |
Re: Was will mir mein Compiler damit sagen ??
Vielleicht ist im Compiler/Linker auch ein Semantik-Checker eingebaut, der Programmteile, die ihm nicht gefallen, wegschmeisst.
Um zu deiner Frage zu kommen ("Was will mir mein Compiler damit sagen?"): Zitat:
|
Re: Was will mir mein Compiler damit sagen ??
Durch die Ifs ist es nicht sicher des der Code dahinter ausgeführt wird also heisst des das MÖGLICHERWEISE aus der sieht des Compielers der code nicht ausgefürht wird also ist es für ihn MÖGLICHERWEISE unötig.
Delphi-Quellcode:
if RadioButton1.checked then Edit1.text := FloatToStr(b * a * Power(a,x));
if RadioButton2.checked then Edit1.text := FloatToStr(y / Power(a,x)); if RadioButton3.checked then Edit1.text := FloatToStr(power((y/b), 1/x)); if RadioButton4.checked then Edit1.text := FloatToStr(ln(y/b)/ln(a)); Bisschen optimiert So müsste es gehen:
Delphi-Quellcode:
//Nachtrag: @alzaimar: Rolig??? Hast du zuviele katzen dahei es gibt meistens eine logische erklärung
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Math; type TForm1 = class(TForm) LabeledEdit1: TLabeledEdit; LabeledEdit2: TLabeledEdit; LabeledEdit3: TLabeledEdit; LabeledEdit4: TLabeledEdit; Label1: TLabel; Label2: TLabel; Button1: TButton; GroupBox1: TGroupBox; RadioButton1: TRadioButton; RadioButton2: TRadioButton; RadioButton3: TRadioButton; RadioButton4: TRadioButton; Edit1: TEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var a,b,x,y: real; // <-- hier sagt der compiler das o.g. begin Edit1.Clear; // Werte von den Edit-Feldern holen und den Variablen zuweisen a := strtofloat(labelededit3.text); b := strtofloat(labelededit2.text); x := strtofloat(labelededit4.text); y := strtofloat(labelededit1.text); // Lasset uns Rechen Edit1.text := FloatToStr(b * a * Power(a,x)); // Wenn nicht dann wirds einfach überschrieben if RadioButton2.checked then Edit1.text := FloatToStr(y / Power(a,x)); if RadioButton3.checked then Edit1.text := FloatToStr(power((y/b), 1/x)) if RadioButton4.checked then Edit1.text := FloatToStr(ln(y/b)/ln(a)); end; end. |
Re: Was will mir mein Compiler damit sagen ??
ja so hatte ich das schonmal hab das aber extra so mit der var op gemacht weil ich noch n paar plugins dafür machen werde die auch mit der var op abeiten werden anders bekomm ich das vom konzept her nich hin
|
Re: Was will mir mein Compiler damit sagen ??
Um mal zu zeigen wie man es effizient programmiert:
Delphi-Quellcode:
// Werte von den Edit-Feldern holen und den Variablen zuweisen
// hier fehlen noch Absicherungen gegen falsche Eingaben a := strtofloat(labelededit3.text); b := strtofloat(labelededit2.text); x := strtofloat(labelededit4.text); y := strtofloat(labelededit1.text); // mit booleschen werten kann man wunderbar rechnen op := Ord(RadioButton1.checked) + Ord(RadioButton2.checked) + Ord(RadioButton3.checked) + Ord(RadioButton4.checked); // ein case fragt op nur einmal ab // es fehlen Tests auf illegale Werte (x = 0 fuer op = 3) case op of 1: Edit1.text := FloatToStr(b * a * Power(a,x)); 2: Edit1.text := FloatToStr(y / Power(a,x)); 3: Edit1.text := FloatToStr(power((y/b), 1/x)); 4: Edit1.text := FloatToStr(ln(y/b)/ln(a)); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:51 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