Compiler-Warnungen für ungenutze Funktionen
-
Hallo @all
Visual Studio 2013 warnt mich vor Variablen welche nicht initialisiert wurden oder nicht benutzt werden. gibt es auch eine Möglichkeit, dass mich der Compiler warnt, falls ich eine Funktion( "normal" , Memberfunktion, Konstruktor ,...) nicht nutze?
Ich meine nicht, die typische, du hast deine Funktion deklariert, aber nicht definiert! - Fehlermeldung, sondern eine echte Warnung, wenn ich die Funktion einfach nicht nutze.
MfG
Hlymur
-
Und warum?
Wenn Dein Linker korrekt eingestellt ist wird der Code entfernt.
Wenn Du den Linker auf /Verbose stellst werden imho auch Ausgaben gemacht welche Funktionen entfernt werden weil diese nicht benutzt werden...Ansonsten kenne ich diesbzgl. nur kostenpflichtige Tools
Zudem: Wer kann entscheiden wo diese Funktion nicht verwendet wird. Evtl. wird die Datei ja in mehreren Projekten benutzt?
-
Martin Richter schrieb:
Und warum?
Weil eine nicht aufgerufene Funktion ein Zeichen dafür ist, dass man
a) seine Quellcodeverwaltung falsch nutzt,
b) sich bei ähnlich benannten Funktionen vertippt hat oder
c) einfach vergessen hat, einen Programmteil zu implementieren.
-
Wie soll so etwas bei einer dynamischen Bindung funktionieren? Der Compiler würde vor dem Programmaufruf überhaupt nicht wissen, ob und welche Funktion aufgerufen wird. Auch kostenpflichtige Tools können dir da nicht großartig helfen.
-
Übrigens wäre das sowieso Schwachsinn, weil du die Warnmeldung nicht enschränken könntest. Dementsprechend würdest du schon bei anlegen eines strings einen overkill an Warnmeldungen bekommen, weil du die member functions nicht benutzt.
-
@X
Muss ja nicht der Compiler selbst machen, es wäre ja schon ein eigenes Static-Code-Analysis Tool nett welches so eine Funktion bietet.
Und dann sind die genannten Punkte alle lösbar.
Bei DLLs muss das Tool einfach nur alle Projekte (=DLL + alle DLL-Benutzer) auf einmal betrachten.
Und was das Einschränken angeht...
Das könnte man mit einfachen Namespace-Filtern lösen (Inclusions + Exclusions).
Bzw. wenn das Tool schlau genug ist zu verstehen dass Zeugs was in "fremden" Headers definiert wird automatisch ausgenommen ist, wäre es vermutlich sowieso kein Problem mehr.
Und für den Rest macht man halt Suppression-Listen.
-
Und was das Einschränken angeht...
Das könnte man mit einfachen Namespace-Filtern lösen (Inclusions + Exclusions).Selbst wenn sich das Tool auf ausgewählte Klassen beziehen könnte wäre es absolut unsinnig. Wenn ich eine Klasse mit 10 Methoden erstelle und nur 2 verwende bin ich schon bei 8 warnings.
Mal abgesehen davon, dass der Aufwand für so ein Tool beträchtlich ist, erfordert es zum einen Anpassungen vom Benutzer (bezogen auf die Namespace Idee) und würde warscheinlich dafür sorgen, dass wirklich wichtige Warnungen durch den overkill überdeckt werden.
Schon allein die Vorstellung (Warning: "Die Funktion 'unwichtig()' wird nicht benutzt!") ist ja schrecklich.
-
Müsste man mal sehen ob z.B. CPPCheck so etwas leistet.
http://cppcheck.sourceforge.net/CPPDepend leistet das.
http://www.cppdepend.com/
-
@X
Wenn deine Projekte bloss aus 2-3 Klassen mit je 10 Funktionen bestehen, dann brauchst du so ein Tool natürlich nicht.Wenn du mal ein Projekt mit ein paar hundert KLOC Code warten darfst, wo du vom Grossteil nicht weisst was der eigentlich tut, dann bist du über jede Funktion oder Klasse froh die du einfach rauslöschen kannst, weil sie nirgends gebraucht wird.
Nur diese Funktionen & Klasse muss man erstmal finden.
Daher möchte man solche Tools.
-
ReSharper for C++ leistet das