Var Parameter erzeugt Warning

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
braunbär
Beiträge: 462
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 3.6, FPC 3.2.2
CPU-Target: 64Bit
Wohnort: Wien

Re: Var Parameter erzeugt Warning

Beitrag von braunbär »

Die Hints sind ja oft nützliche Hinweise. Aber wenn dann zu Hauf unnütze Hinweise kommen, schaut man nicht mehr wirklich drauf.

Benutzeravatar
theo
Beiträge: 10753
Registriert: Mo 11. Sep 2006, 19:01

Re: Var Parameter erzeugt Warning

Beitrag von theo »

Die Doku ist hierzu vielleicht mal ganz hilfreich:

Fatal
The compiler encountered an error, and can no longer continue compiling. It will stop at once.
Error
The compiler encountered an error, but can continue to compile (at most till the end of the current unit).
Warning
if there is a warning, it means there is probably an error, i.e. something may be wrong in your code.
Hint
Is issued if the compiler thinks the code could be better, but there is no suspicion of error.
Note
Is some noteworthy information, but again there is no error.

The difference between hints and notes is not really very clear. Both can be ignored without too much risk, but warnings should always be checked.


https://www.freepascal.org/docs-html/user/usersu13.html

alfware17
Beiträge: 191
Registriert: Di 14. Dez 2010, 23:27

Re: Var Parameter erzeugt Warning

Beitrag von alfware17 »

Hallo und nochmal danke für eine Hinweise.
Warum mich die Warnings und Hints stören - nun es sind mir zu viele und ich kann nicht mit einem Blick sehen, ob alles ok blieb oder ob ich mir mit meiner letzten Änderung etwas reingebaut habe, was so nicht sein sollte. Zumal es in der Standard-Konfiguration auch immer unterschiedlich ist, je nachdem ob ich FPC im Lazarus oder auf der Kommandozeile aufrufe.
Und ja, ich nehme Warnings und Hints oftmals ernst denn der Compiler ist immer sorgfältiger als ich und weiß schon wo mein nächster Fehler sein wird, also sind sie schon erwünscht, man müßte sie nur quasi abhaken und selektiv abstellen können. Das {HINT} geht in die Richtung, nur daß ich dann lieber in dem Fall an die "Quelle" also die Deklaration gehe.
Ich habe diese Woche gelernt, es gibt neben var und out auch noch const - und vielleicht nutze ich sowas sagr mal.

Benutzeravatar
theo
Beiträge: 10753
Registriert: Mo 11. Sep 2006, 19:01

Re: Var Parameter erzeugt Warning

Beitrag von theo »

alfware17 hat geschrieben: Do 30. Jan 2025, 13:32 Und ja, ich nehme Warnings und Hints oftmals ernst denn der Compiler ist immer sorgfältiger als ich
Hier solltest du einen Unterschied machen.
Warnungen sollte man ernst nehmen und der Grund für die Warnung sollte - falls möglich - behoben werden.
Hints und Notes hingegen kann man kurz anschauen, aber meistens getrost ignorieren. Ich sehe keinen Sinn darin, viel Zeit dafür aufzuwenden, die Ursachen dafür zu entfernen. Manchmal ist es einfach zu lösen, manchmal nicht sinnvoll möglich.
Schlimm ist es nie. Einfach ausblenden.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6661
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Var Parameter erzeugt Warning

Beitrag von af0815 »

Lazarus kann die Hints, Notes etc. leicht ausblenden, wenn man der FPC allein verwendet fallen natürlich die Filterfunktion von Lazarus weg.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

PascalDragon
Beiträge: 919
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Var Parameter erzeugt Warning

Beitrag von PascalDragon »

braunbär hat geschrieben: Mi 29. Jan 2025, 17:24 Was eine gute Sache wäre: Wenn die Out-Parameter der Free-Pascal runtime als solche und nicht als var-Parameter deklariert wären. Viele Parameter von Free Pascal Runtime.Prozeduren, die reine Ausgabe-Parameter sind, sind als var deklariert und produzieren diese Warnung, wenn man sie - völlig korrekt - uninitialisiert verwendet.
Die RTL ist TP/Delphi-kompatibel, wo diese Funktionen auch var-Parameter haben. Da Nutzer Funktionszeiger nutzen könnten. Außerdem gibt es ein leicht unterschiedliches Verhalten mit verwalteten Typen (Strings, Interfaces, etc.), da diese vor der Übergabe an einen out-Parameter freigegeben werden.
FPC Compiler Entwickler

braunbär
Beiträge: 462
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 3.6, FPC 3.2.2
CPU-Target: 64Bit
Wohnort: Wien

Re: Var Parameter erzeugt Warning

Beitrag von braunbär »

Dann könnte man ja die Parameter im Mode Delphi als var-Parameter belassen, und in den anderen Modes so deklarieren, wie es sinnvoll ist..

PascalDragon
Beiträge: 919
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Var Parameter erzeugt Warning

Beitrag von PascalDragon »

braunbär hat geschrieben: Fr 31. Jan 2025, 01:58 Dann könnte man ja die Parameter im Mode Delphi als var-Parameter belassen, und in den anderen Modes so deklarieren, wie es sinnvoll ist..
Du kannst nicht den Modus einer vorkompilierten Unit ändern.
FPC Compiler Entwickler

braunbär
Beiträge: 462
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 3.6, FPC 3.2.2
CPU-Target: 64Bit
Wohnort: Wien

Re: Var Parameter erzeugt Warning

Beitrag von braunbär »

Das gehört im Quelltext der Units geändert.
Wenn ich das selbst machen würde, hätte es aber keinen Sinn, weil es beim nächsten Lazarus-Update wieder weg wäre.

PascalDragon
Beiträge: 919
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Var Parameter erzeugt Warning

Beitrag von PascalDragon »

braunbär hat geschrieben: Mo 3. Feb 2025, 17:16 Das gehört im Quelltext der Units geändert.
Nochmal: wir wollen das nicht ändern, da dies sonst nicht mehr Delphi-kompatibel ist. Und das kann eben auch nicht Mode-spezifisch geändert werden, da die Unit prekompiliert wird und die Kern Units der RTL so oder so eh nur im Modus ObjFpc kompiliert werden.
FPC Compiler Entwickler

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 560
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon, Laz 3.8 Fpc 3.2.3 und allerlei mit FpcUpDeLuxe
Kontaktdaten:

Re: Var Parameter erzeugt Warning

Beitrag von Niesi »

theo hat geschrieben: Do 30. Jan 2025, 12:17 Die Doku ist hierzu vielleicht mal ganz hilfreich:

Fatal
The compiler encountered an error, and can no longer continue compiling. It will stop at once.
Error
The compiler encountered an error, but can continue to compile (at most till the end of the current unit).
Warning
if there is a warning, it means there is probably an error, i.e. something may be wrong in your code.
Hint
Is issued if the compiler thinks the code could be better, but there is no suspicion of error.
Note
Is some noteworthy information, but again there is no error.

The difference between hints and notes is not really very clear. Both can be ignored without too much risk, but warnings should always be checked.


https://www.freepascal.org/docs-html/user/usersu13.html
Also ich finde dieses "System" gut, mich stören hints und notes nicht. Ganz im Gegenteil, ich finde sie ganz oft sehr nützlich.

Viele habe ich allerdings nicht.

Wer sich daran stört sollte sie halt ausblenden, wie schon mehrfach vorgeschlagen wurde ...
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

Mathias
Beiträge: 6779
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Var Parameter erzeugt Warning

Beitrag von Mathias »

Also ich finde dieses "System" gut, mich stören hints und notes nicht. Ganz im Gegenteil, ich finde sie ganz oft sehr nützlich.
Dies macht schon sinn. So sieht man, wen man unnütze Variablen deklariert hat.
Bei Callprocs kann man es kaum verhindern, aber dafür gibt es {$%H-}

Wieso kommt da keine Warnung ?
Wird der Sender irgendwo intern vom Compiler abgefangen ?

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
end;  
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 10753
Registriert: Mo 11. Sep 2006, 19:01

Re: Var Parameter erzeugt Warning

Beitrag von theo »

Mathias hat geschrieben: Mi 5. Feb 2025, 08:38 Wieso kommt da keine Warnung ?
Wird der Sender irgendwo intern vom Compiler abgefangen ?

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
end;  
Bei mir kommt eine:
unit1.pas(16,28) Verbose: Parameter "Sender" not used

paweld
Beiträge: 73
Registriert: So 11. Jun 2023, 16:01
OS, Lazarus, FPC: Lazarus trunk, FPC fixes

Re: Var Parameter erzeugt Warning

Beitrag von paweld »

können Sie die IDE-Direktive verwenden: {%H-}, dann werden die Hinweise nicht angezeigt, sondern nur für die Variable, vor der diese Direktive steht. Für Variablen in einer Funktions-/Prozedurdefinition muss die Direktive sowohl im Abschnitt interface als auch im Abschnitt implementation verwendet werden.

Im folgenden Beispiel erscheint die Eingabeaufforderung nur für die Variable j:

Code: Alles auswählen

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click({%H-}Sender: TObject);
  private

  public

  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click({%H-}Sender: TObject);
var
  {%H-}i, j, {%H-}k: Integer;
begin

end;

end. 
Grüße / Pozdrawiam
paweld

Mathias
Beiträge: 6779
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Var Parameter erzeugt Warning

Beitrag von Mathias »

Bei mir kommt eine:
unit1.pas(16,28) Verbose: Parameter "Sender" not used
Stimmt, hast recht, bei den Nachrichten kommt es.
Aber im Editor selbst gibt es keine Sprechblase.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten