Cppcheck

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
Cppcheck
Maintainer Daniel Marjamäki u.a.
Aktuelle Version 1.72
(9. Januar 2016)
Betriebssystem plattformunabhängig
Programmier­sprache C++
Lizenz GNU General Public License
deutschsprachig nur GUI
(engl. Kommandozeile)
http://cppcheck.sourceforge.net/

Cppcheck ist ein Programm zur statischen Codeanalyse für die Programmiersprachen C und C++. Es wird aktiv entwickelt[1] und unter der GNU General Public License veröffentlicht. Es unterstützt eine Vielzahl von Tests und ist in der Lage, nicht-standardisierten Code zu überprüfen.[2]

Funktionen[Bearbeiten | Quelltext bearbeiten]

Cppcheck unterstützt eine Reihe von statischen Tests, die von Compilern nicht oder nur teilweise durchgeführt werden, wie z. B.:

  • Array-Überläufe
  • Ressourcen- und Speicherlecks
  • Benutzung veralteter Funktionen[3]
  • Verwendung von Funktionen, die nicht threadsicher sind
  • falsche Benutzung der Standard Template Library
  • Ungenauigkeiten beim Aufruf von C-Standardbibliotheksfunktionen, z.B. verdächtige Formatstrings bei printf-Funktionen
  • inkorrekte Ausnahmebehandlung
  • verschiedene Geschwindigkeits- und Stiloptimierungen
  • fehlerhafte Verwendung von Zeigervariablen
  • uninitialisierte Variable
  • „verdächtige“ Ausdrücke, wie z.B. Semikolon hinter Bedingung
  • Unbenutzter oder redundanter Code[4]

Verbreitung[Bearbeiten | Quelltext bearbeiten]

Das Programm wird von einigen Linux-Distributionen verteilt und mitentwickelt[5][6] und existiert sowohl eigenständig als auch in Form von Plug-ins für verschiedene Entwicklungsumgebungen:

Außer der Version für die Kommandozeile existiert eine grafische Benutzeroberfläche basierend auf Qt.

Cppcheck wird in einigen großen Projekten eingesetzt und hat bereits geholfen, Fehler zu finden und zu beseitigen.[11] Dazu gehören unter anderem der Linux-Kernel, OpenOffice.org[12] und LibreOffice, Debian[13] und MPlayer.

Entwicklungsgeschichte[Bearbeiten | Quelltext bearbeiten]

Das Programm wird seit Mai 2007 entwickelt. Im Abstand von ein bis drei Monaten erscheinen neue Versionen mit neuen und verbesserten Tests. Folgende Tabelle gibt einen Überblick über die bisher erschienenen Versionen und deren Veröffentlichungsdaten.[14]

Version Veröffentlichung Anmerkungen
Ältere Version; nicht mehr unterstützt: 1.28 01. Februar 2009 Erste dokumentierte Version.
Ältere Version; nicht mehr unterstützt: 1.29 02. März 2009
Ältere Version; nicht mehr unterstützt: 1.31 12. April 2009 1.30 war eine Bugfix-Version für 1.29.
Ältere Version; nicht mehr unterstützt: 1.32 10. Mai 2009
Ältere Version; nicht mehr unterstützt: 1.33 07. Juni 2009
Ältere Version; nicht mehr unterstützt: 1.34 12. Juli 2009
Ältere Version; nicht mehr unterstützt: 1.35 16. August 2009
Ältere Version; nicht mehr unterstützt: 1.36 20. September 2009
Ältere Version; nicht mehr unterstützt: 1.38 25. Oktober 2009 1.37 war eine Bugfix-Version für 1.36.
Ältere Version; nicht mehr unterstützt: 1.39 06. Dezember 2009
Ältere Version; nicht mehr unterstützt: 1.40 17. Januar 2010
Ältere Version; nicht mehr unterstützt: 1.41 07. März 2010
Ältere Version; nicht mehr unterstützt: 1.43 08. Mai 2010 1.42 war eine Bugfix-Version für 1.41.
Ältere Version; nicht mehr unterstützt: 1.44 10. Juli 2010
Ältere Version; nicht mehr unterstützt: 1.45 03. Oktober 2010
Ältere Version; nicht mehr unterstützt: 1.46 12. Dezember 2010
Ältere Version; nicht mehr unterstützt: 1.47 06. Februar 2011
Ältere Version; nicht mehr unterstützt: 1.48 04. April 2011
Ältere Version; nicht mehr unterstützt: 1.49 12. Juni 2011
Ältere Version; nicht mehr unterstützt: 1.50 14. August 2011
Ältere Version; nicht mehr unterstützt: 1.51 08. Oktober 2011 Neue Tests: Initialisierungsreihenfolge in Konstruktoren, Redundante boolesche Vergleiche
Ältere Version; nicht mehr unterstützt: 1.52 10. Dezember 2011 Neue Tests: Diverse Tests auf falsche Verwendung von bestimmten Funktion, Tests auf verdächtige Semikolonverwendung
Ältere Version; nicht mehr unterstützt: 1.53 11. Februar 2012 Verbesserung vieler existierender Tests
Ältere Version; nicht mehr unterstützt: 1.54 15. April 2012 Verbesserung vieler existierender Tests, interne Überarbeitungen
Ältere Version; nicht mehr unterstützt: 1.55 30. Juni 2012 UTF-16-Dateien können analysiert werden, Geschwindigkeitsoptimierungen, Verbesserung bestehender Tests
Ältere Version; nicht mehr unterstützt: 1.56 01. September 2012
Ältere Version; nicht mehr unterstützt: 1.57 04. November 2012
Ältere Version; nicht mehr unterstützt: 1.58 12. Januar 2013
Ältere Version; nicht mehr unterstützt: 1.59 29. März 2013
Ältere Version; nicht mehr unterstützt: 1.60 01. Juni 2013
Ältere Version; nicht mehr unterstützt: 1.60.1 02. Juni 2013 Bugfix-Release für 1.60
Ältere Version; nicht mehr unterstützt: 1.61 03. August 2013 Unterstützung externer Konfigurationsdateien für Bibliotheken, neue Tests auf undefinierte Ausdrücke (Rechnen mit Unendlich, NaN, sizeof(void))
Ältere Version; nicht mehr unterstützt: 1.62 12. Oktober 2013 Neue Tests: Prüfung ob Variable gleich 0 erst nach Division durch diese Variable, Existenz von Member mit selbem Namen wie Member einer Basisklasse
Ältere Version; nicht mehr unterstützt: 1.63 04. Januar 2014 Umstellung bestehender Tests auf Syntaxbäume, neuer Test auf Addition von (nicht dereferenzierten) Pointern und Zahlen
Ältere Version; nicht mehr unterstützt: 1.64 02. März 2014 Beginn der Umstellung der bestehenden Tests auf funktionsübergreifende generische Datenflussanalyse
Ältere Version; nicht mehr unterstützt: 1.65 10. Mai 2014 Erweiterungen, Verbesserungen u.a. bei der Verarbeitung von C++11-Konstrukten
Ältere Version; nicht mehr unterstützt: 1.66 02. August 2014 Verbesserungen an Syntaxbaum- und Datenflussanalyse, Umstellung von Tests auf diese Mittel nutzen
Ältere Version; nicht mehr unterstützt: 1.67 18. Oktober 2014 Mehr Überprüfungen, Verbesserungen u.a. bei der Verarbeitung von C++11-Konstrukten
Ältere Version; nicht mehr unterstützt: 1.68 03. Januar 2015 Verbesserungen u.a. bei der Verarbeitung von überladenen Funktionen, Templates, Überläufe in Zeigerarithmetik. Unterstützung für die C++11-Features noexcept(false) und noreturn.
Ältere Version; nicht mehr unterstützt: 1.69 01. Mai 2015  ???
Ältere Version; nicht mehr unterstützt: 1.70 04. September 2015  ???
Ältere Version; nicht mehr unterstützt: 1.71 14. November 2015  ???
Aktuelle Version: 1.72 09. Januar 2016 Plattform spezifische Konfigurationen, Einstellung zur Konfiguration von integralen Variablen, neue Option -E (Code wird nur durch den Präprozessor bearbeitet), Dumpen der Konfigurationseinstellungen. Entfernung von unnötigen Prüfungen (forward declaration).
Legende:
Alte Version
Ältere Version; noch unterstützt
Aktuelle Version
Aktuelle Vorabversion
Zukünftige Version

Weblinks[Bearbeiten | Quelltext bearbeiten]

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]

  1. Cppcheck auf GitHub
  2. „A Survey of C and C++ Software Tools for Computational Science“ (PDF; 223 kB)
  3. Liste veralteter Funktionen
  4. Cppcheck - A tool for static C/C++ code analysis. In: cppcheck.sourceforge.net. Abgerufen am 29. Mai 2016.
  5. Cppcheck in Debian
  6. Cppcheck in FreeBSD
  7. Cppcheclipse
  8. Cppcheck Plugin
  9. Cppcheck Plugin für Jenkins
  10. VioletGiraffe/cppcheck-vs-addin. In: GitHub. Abgerufen am 29. Mai 2016.
  11. Auflistung einiger wichtiger Fehlerfunde im Cppcheck-Wiki
  12. „Hunting for vulnerabilities in large software: the OpenOffice suite“ (PDF; 130 kB)
  13. Introducing the "Debian's Automated Code Analysis" (DACA) project
  14. Überblick der Versionshistorie