/analyze
kann nicht garantiert werden, dass relevante und korrekte Warnungen ausgegeben werden. Es kann und wird eine Menge von Problemen vermissen, und es gibt auch eine Anzahl von falsch positiven (Dinge, die es als Warnungen identifiziert, aber die vollkommen sicher sind und nie tatsächlich auftreten werden)
Es ist unrealistisch zu erwarten, dass Null Warnungen mit/analysieren.
Es hat eine Situation aufgezeigt, in der Sie einen Zeiger dereferenzieren, der es nicht überprüfen kann, ist immer gültig. Soweit PREfast es beurteilen kann, gibt es keine Garantie, dass es nie NULL sein wird.
Aber das heißt nicht kann NULL sein. Nur dass die Analyse, die erforderlich ist, um zu beweisen, dass es sicher ist, für PREfast zu komplex ist.
Möglicherweise können Sie die Microsoft-spezifische Erweiterung __assume
verwenden, um dem Compiler mitzuteilen, dass diese Warnung nicht ausgegeben werden soll, aber eine bessere Lösung besteht darin, die Warnung zu verlassen. Jedes Mal, wenn Sie mit/compile kompilieren (was nicht bei jeder Kompilierung erforderlich sein muss), sollten Sie sicherstellen, dass die Warnungen, die auftauchen, immer noch falsch sind.
Wenn Sie verwenden behaupten richtig (logische Fehler bei der Programmierung zu fangen, gegen Situationen Bewachung dass nicht passieren, dann habe ich kein Problem mit Ihrem Code zu sehen, oder die Warnung mit verlassen. Code Hinzufügen ein Problem zu handhaben, dass nie auftreten ist nur sinnlos.Sie fügen mehr Code und mehr Komplexität ohne Grund (wenn es nie auftreten kann, dann haben Sie keine Möglichkeit, davon zu erholen, weil Sie absolut keine Ahnung haben, in welchem Zustand das Programm sein wird Alles, was Sie wissen, ist, dass es einen Codepfad eingegeben hat, den Sie für unmöglich hielten.
Wenn Sie jedoch Ihre Assert als tatsächliche Fehlerbehandlung verwenden (der Wert kann in Ausnahmefällen NULL sein, Sie erwarten nur, dass es nicht passieren wird), dann ist es ein Fehler in Ihrem Code. Dann ist eine ordnungsgemäße Fehlerbehandlung (normalerweise Ausnahmen) erforderlich.
Niemals jemals für Probleme, die möglich sind. Verwenden Sie sie, um zu verifizieren, dass die unmöglich nicht geschieht. Und wenn/analyse dir Warnungen gibt, sieh sie dir an. Wenn es falsch positiv ist, ignoriere es (unterdrücke es nicht, denn während es heute falsch positiv ist, kann der Code, den du morgen eincheckst, möglicherweise ein echtes Problem werden).
Können Sie einige der Warnmeldungen anzeigen? –
Können Sie auch Ihre Implementierung von 'ASSERT' zeigen? –
'/ analyze' beschwert sich nicht über' ASSERT' auf meinem Rechner. –