Keine Warnung bei überflüssigen Funktionen in Units.

Für Fragen rund um die Ide und zum Debugger
Antworten
Mathias
Beiträge: 7004
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Keine Warnung bei überflüssigen Funktionen in Units.

Beitrag von Mathias »

Ich habe folgende Minicode. We nich diesen kompiliere, kommt in der Main eine Warnung, weil Test2 nicht gebraucht wird. Aber wieso kommt in der Unit keine Warnung bei Test1 ?
Auch aufräumen und neu kompilieren bringt das gleiche Resultat.

Code: Alles auswählen

unit Unit1;

interface

implementation

procedure Test1;  // Keine Warnung
begin

end;

end.
            
.............................

program Project1;

uses
  Unit1;

  procedure Test2; // Warnung
  begin
  end;

begin
end.        
Kann man das irgendwo umstellen, das überall eine Warnung kommt ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1670
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Keine Warnung bei überflüssigen Funktionen in Units.

Beitrag von fliegermichl »

Soweit ich weiß, müsste die procedure vom Linker entfernt werden.
Wenn die procedure jedoch auch im interface Teil aufgeführt wird, kann der Linker diese nicht entfernen, da die procedure ja von einem Programm benutzt werden könnte, welches die unit importiert. In dem Fall wäre auch eine Warnung falsch.

Warf
Beiträge: 2178
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Keine Warnung bei überflüssigen Funktionen in Units.

Beitrag von Warf »

Das wäre auch sehr nervig wenn mam eine Funktion hätte die man nur unter bestimmten defines (platform, debug, etc.) aufruft und dann bei manchen builds warnings wirft und bei anderen nicht

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

Re: Keine Warnung bei überflüssigen Funktionen in Units.

Beitrag von Mathias »

Wenn die procedure jedoch auch im interface Teil aufgeführt wird, kann der Linker diese nicht entfernen,
Dies ist mir bewusst, aber so wie die procedure im Beispiel ist, ist es eine Leiche, da sie nur im implementations Teil ist.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Warf
Beiträge: 2178
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Keine Warnung bei überflüssigen Funktionen in Units.

Beitrag von Warf »

Trotzdem kann ich das folgende haben

Code: Alles auswählen

unit Unit1;

interface

procedure Test2;
implementation

procedure Test1;  // Keine Warnung
begin

end;

procedure Test2;
begin
  {$ifdef DEBUG}Test1;{$ENDIF}
end;

end.
Jetzt ist Test1 auch eine Leiche wenn DEBUG nicht gesetzt ist

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

Re: Keine Warnung bei überflüssigen Funktionen in Units.

Beitrag von Mathias »

Jetzt ist Test1 auch eine Leiche wenn DEBUG nicht gesetzt ist
Das wäre auch korrekt, das dies eine Leiche ist, daher muss man die procedure test1 auch in eine $ifdef einklemmen.

Im Hauptprogramm kommt da auch eine Warnung, wen ich mit Linux kompiliere.

Code: Alles auswählen

program Project1;

procedure test;
begin
end;

begin
  {$ifdef windows}
  test;
  {$endif}
end.         
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten