Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Was will mir mein Compiler damit sagen ?? (https://www.delphipraxis.net/47591-will-mir-mein-compiler-damit-sagen.html)

Clane 13. Jun 2005 17:23


Was will mir mein Compiler damit sagen ??
 
Zitat:

[Hint] Unit1.pas(47): H2077 Value assigned to 'y' never used
[Hint] Unit1.pas(47): H2077 Value assigned to 'x' never used
[Hint] Unit1.pas(47): H2077 Value assigned to 'b' never used
[Hint] Unit1.pas(47): H2077 Value assigned to 'a' never used
hier is der qt dazu und bitte keine fragen warum ich die variable op verwende ....

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.

alcaeus 13. Jun 2005 17:24

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 13. Jun 2005 17:24

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 ;)

malo 13. Jun 2005 17:25

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 ;)

GuenterS 13. Jun 2005 17:32

Re: Was will mir mein Compiler damit sagen ??
 
Zitat:

Zitat von alcaeus
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

Versteh ich grad nicht, er verwendet doch alle seine Variablen als Parameter für eine andere Funktion? Ist das keine Verwendung im Sinne dessen was der Compiler versteht?

jfheins 13. Jun 2005 17:36

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 ...

alzaimar 13. Jun 2005 17:46

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:

Zitat von Delphi
Wozu das Ganze? Geh lieber an die frische Luft und nimm mich mit

Aber mal im Ernst: Merkwürdiges Verhalten. Ist Dein Delphi vielleicht ... rollig ? :cat:

gsh 13. Jun 2005 17:49

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:
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.
//Nachtrag: @alzaimar: Rolig??? Hast du zuviele katzen dahei es gibt meistens eine logische erklärung

Clane 13. Jun 2005 18:01

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

Robert Marquardt 13. Jun 2005 18:22

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.
Seite 1 von 2  1 2      

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