C / C ++ Compiler-Warnungen: tun Sie säubern den gesamten Code, sie zu entfernen oder sie in verlassen?

StackOverflow https://stackoverflow.com/questions/183788

Frage

Ich habe an vielen Projekten gearbeitet, wo ich Code von anderen gegeben habe zu aktualisieren. Mehr als oft nicht kompilieren ich es und über 1.000 + Compiler-Warnungen erhalten. Wenn ich Compiler-Warnungen sehen sie machen mich schmutzig fühlen, so meine erste Aufgabe, den Code zu bereinigen ist, und entfernen Sie sie alle. Ich finde, etwa ein Dutzend Probleme wie nicht initialisierte Variablen Typischerweise werden solche.

Ich verstehe nicht, warum die Leute sie in verlassen und müssen nicht perfekt sauber kompiliert ohne Warnungen. Bin ich etwas fehlt? Gibt es einen triftigen Grund, nur sie zu verlassen? Irgendwelche Horrorgeschichten zu teilen?

War es hilfreich?

Lösung

Ich würde jede Warnung aufzuräumen. Selbst diejenigen, die Sie kennen harmlos sind (wenn es so etwas gibt) wird einen schlechten Eindruck von Ihnen geben, wer den Code kompiliert.

Es ist eine der „stinkende“ Zeichen, die ich für aussehen würde, wenn ich auf jemand anderen Code zu arbeiten hatte.

Wenn keine echten Fehler oder mögliche zukünftige Probleme, sei es ein Zeichen von Schlamperei sein

Andere Tipps

Clean ‚em up, auch wenn sie kein wirkliches Problem hinweisen. Andernfalls, wenn eine Warnung, dass funktioniert zeigt ein echtes Problem auftaucht, werden Sie es nicht durch den Lärm sehen.

Bei meiner Arbeit, die Compiler Einstellung Warnungen als Fehler zu behandeln, wird eingeschaltet. Also, keine Warnungen, oder es wird nicht kompilieren:)

Ich bin damit einverstanden, es ist am besten, alle Warnungen zu beseitigen. Wenn Sie Tausende von Warnungen bekommen sollten Sie Ihre Korrekturen priorisieren.

sein Starten Sie Ihren Compiler auf die niedrigste Warnstufe einzustellen. Diese Warnungen sollten das wichtigste sein. Wenn diese festgelegt sind, erhöhen Sie Ihre Warnstufe und wiederholen Sie, bis Sie die höchste Warnstufe erreicht. Dann stellen Sie Ihre Kompilierungsoptionen so dass Warnungen als Fehler behandelt werden.

Wenn Sie eine Warnung, die Sie vermuten, dass sicher ist, etwas Forschung zu ignorieren, tun Sie Ihre Theorie zu überprüfen. Nur dann ist es deaktivieren und nur in minimalster Art und Weise möglich. Die meisten Compiler haben #pragma Direktiven, die nur für einen Teil einer Datei Warnungen können deaktivieren / aktivieren. Hier ist ein Visual C ++ Beispiel:

typedef struct _X * X; // from external header, not 64-bit portable

#pragma warning( push )
#pragma warning( disable: 4312 ) // 64-bit portability warning
X x = reinterpret_cast< X >( 0xDDDDDDDD ); // we know X not 64-bit portable
#pragma warning( pop )

Beachten Sie, dass dies nur die Warnung für eine einzige Zeile Code deaktiviert. auch diese Methode verwenden, können Sie einfach Textsuche Ihres Codes in der Zukunft tun, Änderungen vorzunehmen.

Alternativ können Sie in der Regel eine bestimmte Warnung für eine einzelne Datei deaktivieren oder für alle Dateien. IMHO das ist gefährlich und sollte nur das letzte Mittel sein.

Reinigen Sie sie auf wenn möglich . Auf einer Multi-Plattform / Multi-Compiler Code-Basis (ich habe auf einem gearbeitet, die mit 6 verschiedenen Compilern auf 7 verschiedene OSs kompilierten) das ist nicht immer wenn möglich. Ich habe Fälle gesehen, wo der Compiler gerade ist falsch (HP-UX auf Itanium aCC, ich bin bei dir suchen), aber das ist zugegebenermaßen selten. Wie andere beachten, können Sie die Warnung in einer solchen Situation deaktivieren.

Viele Male, was eine Warnung in dieser Version des Compilers kann ein Fehler in der nächsten Version werden (jemand von gcc 3.x auf 4.x sollte damit vertraut sein), ist es so sauber jetzt auf.

Einige Compiler wirklich nützliche Warnungen ausgeben, werden die Probleme unter bestimmten Umständen werden wird - Visual C ++ 2005 und 2008 können Sie über 64-Bit-Ausgaben warnen, die heute ein großer Vorteil ist. Wenn Sie irgendwelche Pläne müssen auf 64-Bit zu wandern, nur diese Art von Warnungen Reinigung drastisch Ihre Port Zeit reduzieren.

Es gibt einige Fälle, in denen ich Warnungen im Code verlassen, oder wo es nicht machbar ist, sie zu bereinigen (obwohl ich diejenigen, entferne ich kann). Zum Beispiel:

  • Wenn Sie etwas haben Sie gerade arbeiten, und Sie wissen, dass es mehr Arbeit / Aufmerksamkeit braucht, eine Warnung an Ort und Stelle zu verlassen, um das anzuzeigen angemessen sein kann
  • Wenn Sie C kompilieren ++ mit / clr, gibt es mehrere Warnungen über Dinge, die nativen Code verursachen erzeugt werden; es kann mühsam sein, all diese Warnungen zu unterdrücken, wenn die Code-Basis nicht funktionell geändert werden kann
  • Warnungen Aufräumen, wenn Sie nicht verstehen, was das Update tut. Ich habe das ein paar Mal mit PC-Lint Warnung getan, und am Ende Bugs einzuführen. Wenn Sie nicht wissen, was die genaue Auswirkung der Änderung ist (zB: C-Casts Warnungen zu beseitigen), tut es nicht. Herauszufinden, die Warnung, oder lassen Sie den Code allein ist mein Rat.

Wie auch immer, das sind die Instanzen aus der Spitze von meinem Kopf, wo verlassen Warnungen angemessen sein könnten.

Das Schlimmste ist, dass, wenn Sie neuen Code schreiben, ist es schwer zu wissen, ob Sie versehentlich mehr Warnungen eingeführt haben, da es so viele sind Sie ignorieren sie einfach sowieso.

Das Problem mit sich aller Reinigung, ist, dass es Zeit braucht, die Sie können oder auch nicht haben. Aber ja, in der Regel sollten Sie aufzuräumen, so viele wie möglich.

Verlassen Warnungen im Code, weil Sie sie nicht wie die Zähne putzen keine Zeit haben, zu beheben ist, weil Sie nicht genug Zeit, am Morgen verfügen. Es ist eine grundlegende Frage der Code Hygiene.

Immer Aufräumen Warnungen. Wenn Sie einen bestimmten Fall, wo Sie wissen, dass die Warnung in Ordnung ist, dann schalte es für diese Instanz nur.

Während einige Warnungen gutartig sein können, die meisten bedeuten ein echtes Problem mit dem Code.

Wenn Sie nicht alle Ihre Warnungen aufzuräumen dann die Warnliste wird weiter wachsen und die wirklichen Problemfälle werden in einem Meer von Warn Lärm verloren.

Eines der Merkmale eines wirklich guten Programmierer ist, dass schlechter Code ihr ein mulmiges Magen gibt.

Ich strebe alle meinen Code nicht nur Compiler sauber zu haben, aber auch sauber sein in meinem IDE zu einem ziemlich pingelig Pegeln eingestellt. Ich werde manchmal brauche eine Warnung Instanz zu unterdrücken, wenn ich weiß besser als das Werkzeug, aber zumindest die dazu dient, auch als Dokumentation.

ermogliche immer alle Warnungen, und mein Projekt dann den Bau zu stoppen gesetzt, wenn es irgendwelche Warnungen.

Wenn es Warnungen sind, dann müssen Sie jeden überprüfen, um sicherzustellen, dass es kein Problem ist. diese immer und immer ist eine Verschwendung von Zeit. Wird dies nicht beachtet wird führen bedeutet, um Fehler in den Code kriechen.

Es gibt Möglichkeiten, eine Warnung (z Pragma argsused) zu entfernen.

Lassen Sie die Compiler die Arbeit machen.

Ich habe mit einer Reihe von Embedded-Systemen gearbeitet, wo die Warnungen in Instabilität führen, Absturz oder Speicherkorruption. Sofern Sie die Warnung ist harmlos wissen, sollte es behandelt werden.

Warnungen und sollten als Fehler behandelt werden. Wenn Sie nicht gut genug codieren können, um Ihre Warnungen loszuwerden, dann sollten Sie wahrscheinlich nicht werden Codierung. In meiner Gruppe haben wir beschlossen, alle Warnungen zu Fehlern zu zwingen. Es endet diese ganz Diskussion und wirklich, IMHO, verbessert die Codequalität.

Ich mag nicht Warnungen. Ich entferne sie so viel wie möglich.
Manchmal, wenn sie unter Druck, um den Job zu beenden, lasse ich einige von ihnen. Ich lasse sie selten though. Ich fühle mich wie Sie, schmutzig, wenn es irgendeine links ist.

Die Codebasis arbeite ich an hat mehr als 4000 Warnungen. Einige von ihnen sind echt Probleme. Wir werden Zeit nie gegeben zu gehen und sie zu beheben, noch andere gebrochene Dinge Refactoring ... Zum Teil ist dies, weil der Code so alt ist es standardisiert C ++ zurückzudatiert. Wir können nur in VC ++ kompilieren 6.

Sie stets alle Warnungen aufzuräumen oder explizit unterdrücken, wenn nötig. Die Standardeinstellungen für Warnungen sollten höchstmögliche sein, wenn (Stufe 4 auf VS zum Beispiel) zu kompilieren.

Mein Chef, der einen Code habe ich jetzt halten. Er benutzt Compiler-Flags, um seine deprication Warnungen zu verbergen.

Wenn ich Zeit habe ich durchlaufen und aufzuräumen, was ich kann.

Ich versuche, Code zu kompilieren mit einem recht hohen Niveau von Warnungen und reinigen sie alle, mit Ausnahme von „mit / ohne Vorzeichen Vergleich“ Warnungen, die ich bin sicher, dass ich das beheben soll aber nie gestört werden.

Kurzversion. In g ++ verwende ich "-Wextra -Wno-Sign-Vergleichen" und werde alle Nachrichten befreien

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top