Cppcheck

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
Cppcheck
Maintainer Daniel Marjamäki u.a.
Aktuelle Version 1.68
(3. Januar 2015)
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]

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

Verbreitung[Bearbeiten]

Das Programm wird von einigen Linux-Distributionen verteilt und mitentwickelt[4][5] 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.[9] Dazu gehören unter anderem der Linux-Kernel, OpenOffice.org[10] und LibreOffice, Debian[11] und MPlayer.

Entwicklungsgeschichte[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.[12]

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
Aktuelle Version: 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.
Legende:
Alte Version
Ältere Version; noch unterstützt
Aktuelle Version
Aktuelle Vorabversion
Zukünftige Version

Weblinks[Bearbeiten]

Einzelnachweise[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 in Debian
  5. Cppcheck in FreeBSD
  6. Cppcheclipse
  7. Cppcheck Plugin
  8. Cppcheck Plugin für Jenkins
  9. Auflistung einiger wichtiger Fehlerfunde im Cppcheck-Wiki
  10. „Hunting for vulnerabilities in large software: the OpenOffice suite“ (PDF; 130 kB)
  11. Introducing the "Debian's Automated Code Analysis" (DACA) project
  12. Überblick der Versionshistorie