Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   [Lazarus]Warnung nicht verwendete Variable? (https://www.delphipraxis.net/179242-%5Blazarus%5Dwarnung-nicht-verwendete-variable.html)

TForm1 22. Feb 2014 12:15

[Lazarus]Warnung nicht verwendete Variable?
 
Hallo zusammen,
ich frage mich gerade, ob Lazarus an der Stelle einen Bug hat, oder warum meldet sich der Compiler mit der Warnung "Note: Local variable MyRecord is assigned but never used"?
Delphi-Quellcode:
procedure TMyClass.DeleteRecord(index: integer);
var MyRecord: TMyRecord;
      i: integer;
begin
    if index<0 then Exit;
    for i:= index to high(MyArray) do
    begin
        MyArray[i]:= MyArray[i+1];
        MyRecord:= MyArray[i];
    end;
end;
Der Code gehört zu einer Methode zum Löschen eines Records aus einem Array und funktioniert auch problemlos.

Klaus01 22. Feb 2014 12:28

AW: [Lazarus]Warnung nicht verwendete Variable?
 
Delphi-Quellcode:
procedure TMyClass.DeleteRecord(index: integer);
var
  //MyRecord: TMyRecord;
  i: integer;
begin
    if index<0 then Exit;
    for i:= index to high(MyArray) do
    begin
        MyArray[i]:= MyArray[i+1];
        //MyRecord:= MyArray[i];
    end;
end;
der obige Code würde auch funktionieren - oder?

Grüße
Klaus

Sir Rufo 22. Feb 2014 12:29

AW: [Lazarus]Warnung nicht verwendete Variable?
 
Du weist der Variablen zwar Werte zu, aber diese Werte werden niemals benutzt.
Also ist die Zuweisung überflüssig und der Compiler erkennt das eben.

TForm1 22. Feb 2014 12:49

AW: [Lazarus]Warnung nicht verwendete Variable?
 
Stimmt, ich hatte den Code von einer anderen Stelle in meinem Programm übernommen, da war die Zuweisung noch nötig gewesen. Hab sie jetzt rausgenommen.
Ich habe die Fehlermeldung wahrscheinlich mit "Variable xy is not used" verwechselt, die kommt dann, wenn man nur die Deklaration hinschreibt.

Helmi 22. Feb 2014 15:03

AW: [Lazarus]Warnung nicht verwendete Variable?
 
nebenbei bemerkt, auch wenns offtopic ist, aber es fällt mir grad auf:

Wenn Index = high(MyArray) ist, dann machs bei
Delphi-Quellcode:
MyArray[i]:= MyArray[i+1];
.
knirsch, da i+1 ausserhalb dem Array ist

JamesTKirk 23. Feb 2014 11:32

AW: [Lazarus]Warnung nicht verwendete Variable?
 
Zitat:

Zitat von TForm1 (Beitrag 1249079)
Ich habe die Fehlermeldung wahrscheinlich mit "Variable xy is not used" verwechselt, die kommt dann, wenn man nur die Deklaration hinschreibt.

Es ist keine Fehlermeldung, sondern nur eine Note, nichtmal eine Warnung. Fehlermeldungen führen dazu, dass am Ende die Kompilierung abbricht, wenn du nur Warnungen, Notes und Hints hast, passiert das nicht.

Gruß,
Sven

TForm1 23. Feb 2014 13:22

AW: [Lazarus]Warnung nicht verwendete Variable?
 
Zitat:

Zitat von Helmi (Beitrag 1249097)
Wenn Index = high(MyArray) ist, dann machs bei
Delphi-Quellcode:
MyArray[i]:= MyArray[i+1];
.
knirsch, da i+1 ausserhalb dem Array ist

Das habe ich mir auch gedacht, als ich das Schrieb, aber komischerweise funktioniert das trotzdem:gruebel:, ich weiß nicht warum.

Zitat:

Zitat von JamesTKirk (Beitrag 1249191)
Es ist keine Fehlermeldung, sondern nur eine Note, nichtmal eine Warnung. Fehlermeldungen führen dazu, dass am Ende die Kompilierung abbricht, wenn du nur Warnungen, Notes und Hints hast, passiert das nicht.

Das war mir schon klar, ich habe mich vielleicht nicht passend ausgedrückt.

Medium 23. Feb 2014 15:02

AW: [Lazarus]Warnung nicht verwendete Variable?
 
Zitat:

Zitat von TForm1 (Beitrag 1249202)
Zitat:

Zitat von Helmi (Beitrag 1249097)
Wenn Index = high(MyArray) ist, dann machs bei
Delphi-Quellcode:
MyArray[i]:= MyArray[i+1];
.
knirsch, da i+1 ausserhalb dem Array ist

Das habe ich mir auch gedacht, als ich das Schrieb, aber komischerweise funktioniert das trotzdem:gruebel:, ich weiß nicht warum.

Es muss nicht immer knallen, aber zumindest sollte in MyArray[High(MyArray)] nach dem Aufruf Müll stehen. Es empfiehlt sich (fast) immer beim Entwickeln die Bereichsprüfung einzuschalten. Dann werden an solchen Stellen auch Exceptions ausgelöst, so dass man nachher nicht böse Überraschungen hat.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:08 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