Statisches Codeanalysetool für Multiplattform-Projekte mit guter Abdeckung der C++11-Funktionen

Ich bin ein C++-Entwickler der alten Schule und habe bis heute keine professionelle C++11 - Erfahrung. Ich vertraue dem C++-Komitee, dass sich die Sprache in die richtige Richtung bewegt, aber es scheint, dass in den Projekten, an denen ich arbeite, die Skepsis vorherrscht und viele der C++11-Features verboten werden, noch bevor sie verstanden und erforscht werden.

Wie auch immer, ich habe jetzt die Gelegenheit, an einer neuen Codebasis zu arbeiten, und ich würde gerne die ganze C++11-Power anwenden, aber ich möchte mir nicht selbst ins Knie schießen.

In der Vergangenheit fand ich einige der statischen Codeanalyse-Tools als äußerst leistungsfähiges Lehrinstrument, um mir all diese subtilen Aspekte der Sprache zu zeigen.

Für mein Projekt verwende ich Clang und portable Bibliotheken wie STL und Boost , die auf Windows, Linux, Mac und mehr aufbauen.
Ich hatte gehofft , dass clang-tidy , clang-modernize usw. gute Tools sind, mit denen ich mein Verhalten an die C++11-Funktion anpassen kann, aber sie scheinen nur sehr begrenzte Hilfe zu bieten - ich habe buchstäblich 2-3 Tage gebraucht, um mich anzupassen zu all den Vorschlägen, die sie machen ... und ich bin sicher, dass es viele Möglichkeiten gibt, die mir zum Beispiel auf der Grundlage von Rvalue- Referenzen fehlen.

Einige Features, die ich mir wünschen würde:

  • Wenn das Entfernen von Kopien nicht ausreicht und die Weiterleitungsschnittstelle eine Optimierung bietet.

  • Wenn einige der Klassenmitglieder nicht verschiebbar sind und ein automatisch generierter Bewegungskonstruktor und Bewegungszuweisungsoperator nicht möglich sind.

  • Wenn die lokale Variable verschoben werden könnte, wenn dies die letzte Referenz in ihrem Geltungsbereich ist.

  • Wann const auto&ist besser vorbei auto.

Ich habe keine Preisgrenzen.

Willkommen bei den Softwareempfehlungen! Es ist ziemlich unklar, wonach Sie fragen. Sehen Sie sich bitte Was ist erforderlich, damit eine Frage „genügend Informationen“ enthält? Bearbeiten Sie dann bitte Ihre Frage und prüfen Sie, ob Sie einige dieser Verbesserungen integrieren können.
@lzzy Ich suche: "Tool zur statischen Codeanalyse mit guter Abdeckung von c++11-Funktionen"
Das ist ein bisschen "zu breit", fürchte ich. Hast du den Link meines letzten Kommentars überprüft? In Ihrer Frage fehlen viele Details, z. B. auf welchem ​​Betriebssystem es laufen soll, wie hoch Ihr Budget ist. Möglicherweise mehr, aber wenn es um Features geht, muss ich passen, da das nicht mein Fachgebiet ist.
@lzzy - die Frage wird zurückgestellt, weil sie "unklar" ist, aber in Ihrem Kommentar ist sie zu weit gefasst - was sie ist. Ich denke, wenn ich etwas Spezifischeres gebe, muss ich die Antwort selbst geben.
@gsf Bitte geben Sie klar an, auf welchem ​​​​Betriebssystem es ausgeführt werden soll. Ein „ Tool für Multiplattform-Projekt “ kann falsch interpretiert werden. Entwickeln Sie unter Windows? Vielleicht habe ich etwas vorzuschlagen, sobald Ihre Fragen nicht mehr im Status "Zurückgestellt" sind.
@mguassa Ich verwende Clang und portable Bibliotheken als Stl und Boost, die auf Windows, Linux, Mac und mehr aufbauen.
Deine Frage gefällt mir sehr und ich hoffe auf eine Antwort. Könnten Sie bitte versuchen, uns weitere Informationen zu geben und wir werden für die Wiedereröffnung stimmen. Was ist mit einer Liste von Funktionen? Und kümmert es dich, welches o/s?
@Mawg Ich weiß nicht, welche genauen Funktionen das Tool bieten sollte. Ich gebe 3 Absätze, in denen erklärt wird, warum. Wenn ich ein Experte auf dem Gebiet werden muss, um eine Frage zu stellen - was ist der Sinn der Website -, stimmt hier etwas völlig nicht.
Bitte, kann jemand abstimmen, um die Frage erneut zu öffnen? Ich denke, es ist klar genug, damit die Leute einige Antworten geben können.

Antworten (2)

In der Vergangenheit habe ich für C/C++-Code der alten Schule PC-lint verwendet , eine kommerzielle Software, die von Gimpel Software entwickelt wurde.

Das Unternehmen entwickelt tatsächlich ein paar Tools zur statischen Analyse: PC-lint und FlexeLint .
Pc-lint ist für Windows-Systeme, während FlexeLint auf fast allen Systemen läuft, die C unterstützen, einschließlich VMS, OS-9 und so ziemlich allen Unix-Systemen.

PC-lint und FlexeLint sind leistungsstarke statische Analysetools, die Ihren C/C++-Quellcode überprüfen und Fehler, Störungen, Inkonsistenzen, nicht portierbare Konstrukte, redundanten Code und vieles mehr finden. Es sieht über mehrere Module hinweg und genießt so eine Perspektive, die Ihr Compiler nicht hat.

Bezüglich der C++11-Unterstützung haben sie eine eigene Seite dafür:
PC-lint / FlexeLint Support for C++ 11

Die vollständige Unterstützung für C++11 und C++1y ist unser Hauptaugenmerk, und obwohl wir kein Datum für die vollständige Unterstützung nennen können, rechnen wir mit einem schnelleren Veröffentlichungszyklus, wenn wir die Unterstützung für die verbleibenden Funktionen einführen.

Zum jetzigen Zeitpunkt unterstützen sie also nicht alle C++11-Funktionen, aber die meisten scheinen vorhanden zu sein. Was mir gefällt, ist, dass der Entwicklungsstatus der Funktionen auf dieser Seite klar und transparent zusammen mit einer Priorität gemeldet wird (bei anderen Tools scheinen solche Informationen nicht so klar oder leicht verfügbar zu sein).
In Ihrer Frage haben Sie beispielsweise rvalue erwähnt , das anscheinend unterstützt wird:

  • Sprachfunktion : Rvalue-Referenzen
  • C++11-Vorschlag: N2118
  • Verfügbar für PC-Lint/FlexeLint?: Lint 9.00c

Basierend auf den Informationen, die Sie auf der Website und auf dieser Seite finden, den damit verbundenen Kosten und Ihrem Projekt, können Sie beurteilen, ob es sich um ein Tool handelt, das Ihren Anforderungen entspricht. Andere kennen vielleicht andere Tools, ich schlage vor, dass Sie sich dieses ansehen.

Schließlich findet sich auf Wikipedia eine Liste weiterer Tools für die statische C/C++-Codeanalyse . Sie unterstützen nicht alle C++11.

Danke, das scheint eher ein "Wir haben keine Probleme beim Kompilieren mit diesen Funktionen" als "Wir haben eine Reihe guter Ratschläge für diese Probleme". Haben Sie diesbezüglich persönliche Beobachtungen?
@gsf Ehrlich gesagt habe ich noch nie eine der C++11-Funktionen verwendet, ich habe dieses Produkt in der Vergangenheit nur für C/C++-Code der alten Schule verwendet, und ich denke, ich kann es empfehlen. Soweit ich weiß, scheint es für das, was ich in letzter Zeit gesehen habe, und für die spezifische Anfrage, die Sie haben, nicht viel zu geben. Nachdem ich das Produkt zuvor verwendet habe und mir die Mühe ansehe, die sie jetzt für die C++ 11-Unterstützung zu treiben scheinen, scheint das, was ich vorgeschlagen habe, eine der besten verfügbaren Optionen zu sein. Beachten Sie, dass ich keine Beziehung zu dieser Firma habe.

Sie können CppDepend ausprobieren , ein ziemlich vollständiges statisches Analysetool, das eine Vielzahl von Funktionen integriert und zu 100 % in Visual Studio integriert ist.

Es sieht so aus, als ob CppDepend Clang-Modernize verwendet, was das OP bereits versucht hat. Siehe CppDepend-Modernisierer .