/ / Gefährliche Methoden zum Entfernen von Compiler-Warnungen? - C ++, C, Compiler-Warnungen

Gefährliche Möglichkeiten zum Entfernen von Compiler-Warnungen? - C ++, C, Compiler-Warnungen

Ich möchte eine Politik der keine Warnungen erzwingen, wenn ichÜberprüfen Sie den Code von jemandem. Alle Warnungen müssen explizit dokumentiert werden, da es manchmal nicht einfach ist, einige Warnungen zu entfernen oder zu viele Zyklen oder Speicher usw. benötigen.

Es gibt jedoch eine Schattenseite dieser Richtlinie und das Entfernen von Warnungen in potentiell gefährlicher Weise, d. H. Die verwendete Methode versteckt das Problem tatsächlich, anstatt es zu beheben.

Dasjenige, dem ich am genauesten gewahr bin, sind explizit Umwandlungen, die einen Fehler verbergen könnten.

Auf welche anderen potenziell gefährlichen Methoden zum Entfernen von Compiler-Warnungen in C (++) sollte ich achten?

Antworten:

6 für die Antwort № 1

Korrekte Korrektheit kann ein paar Probleme für Anfänger verursachen:

// following should have been declared as f(const int & x)
void f( int & x ) {
...
}

später:

// n is only used to pass the parameter "4"
int n = 4;
// really wanted to say f(4)
f( n );

Edit1: Auf eine ähnliche Art und Weise markieren alle Mitgliedsvariablen als veränderlich, weil dein Code sie oft ändert, wenn die Korrektheit sagt, dass es wirklich nicht sollte.

Edit2: Eine andere, auf die ich gestoßen bin (möglicherweise von Java-Programmierern), ist es, throw () - Spezifikationen auf Funktionen zu übertragen, egal, ob sie tatsächlich werfen können oder nicht.


5 für die Antwort № 2

Nun, es gibt den offensichtlichen Weg, eine bestimmte Warnung für Teile des Codes zu deaktivieren:

#pragma warning( disable : 4507 34 )

BEARBEITEN: Wie in den Kommentaren erwähnt, ist es manchmal notwendig, in Fällen zu verwenden, in denen Sie wissen, dass die Warnungen in Ordnung sind (wenn es kein nützliches Merkmal wäre, hätte es keinen Grund gegeben, es in die Liste aufzunehmen). Es ist jedoch auch eine sehr einfache Möglichkeit, Warnungen in Ihrem Code zu "ignorieren" und trotzdem zu kompilieren, was die ursprüngliche Frage war.


2 für die Antwort № 3

Ich denke, es ist ein heikles Thema. Ich bin der Ansicht, dass Warnungen gründlich überprüft werden sollten, um zu sehen, ob der Code richtig ist / was beabsichtigt ist. Aber oft gibt es richtigen Code, der Warnungen erzeugt, und der Versuch, sie zu eliminieren, faltet nur den Code oder erzwingt eine Neuschreibung auf eine weniger natürliche Weise.

Ich erinnere mich an eine frühere Veröffentlichung hatte ich richtig undsolider Code, der ein paar Warnungen hervorbrachte, und Mitarbeiter begannen sich darüber zu beschweren. Der Code war viel sauberer und machte das, was er beabsichtigt hatte. Am Ende ging der Code mit den Warnungen in Produktion.

Außerdem werden verschiedene Compiler-Versionen verschiedene Warnungen erzeugen, so dass es sinnloser wird, eine "no warnings" -Richtlinie durchzusetzen, wenn das Ergebnis von der Stimmung der Compiler-Entwickler abhängt.

Ich möchte betonen, wie wichtig es ist, alle Warnungen mindestens einmal zu überprüfen.

Btw entwickle ich in C und C ++ für Embedded Systeme.


1 für die Antwort № 4

Auskommentieren (oder schlimmer, Löschen) des Codes, der die Warnung generiert. Sicher, die Warnung verschwindet, aber Sie sind mehr als nur ein wenig wahrscheinlich am Ende mit Code, der nicht tut, was Sie vorhaben.


1 für die Antwort № 5

Ich erzwinge auch eine Regel ohne Warnungen, aber Sie sindRecht, dass Sie die Warnung nicht ohne sorgfältige Überlegung entfernen können. Und um ehrlich zu sein, habe ich zeitweise Warnungen für eine Weile gelassen, weil der Code richtig war. Irgendwann räume ich es auf, denn wenn du mehr als ein Dutzend Warnungen im Bau hast, hören die Leute auf, auf sie zu achten.

Was Sie beschrieben haben, ist kein einziges ProblemWarnungen. Ich kann dir nicht sagen, wie oft ich einen Bugfix sehe, damit der Crash funktioniert. Ich habe ein paar NULL-Checks hinzugefügt. Du musst zur Grundursache gehen: Soll diese Variable NULL sein? Wenn nicht, warum? ?

Deshalb haben wir Code-Reviews.


0 für die Antwort № 6

Das größte Risiko wäre, dass jemand würdeverbringen Sie Stunden Entwicklungszeit, um eine kleine Warnung zu lösen, die keinen Einfluss auf den Code hat. Das wäre Zeitverschwendung. Manchmal ist es einfacher, eine Warnung zu speichern und eine Kommentarzeile hinzuzufügen, die erklärt, warum die Warnung auftritt. (Bis jemand Zeit hat, diese trivialen Warnungen zu lösen.)

Nach meiner Erfahrung führt die Lösung trivialer Warnungen oft zu zwei weiteren Arbeitstagen für Entwickler. Diese könnten den Unterschied zwischen der Fertigstellung vor und nach der Deadline ausmachen.