Blog 3 Min. Lesezeit

Erkennen Sie einfach, an welchen Stellen Sie Ihre C++-Codebasis modernisieren können.

Diesen Artikel teilen
Easily detect where you can modernize your C++ codebase.

C++11, C++14 und C++17 erweitern sowohl die Kernsprache als auch die C++-Standardbibliothek um zahlreiche Funktionen. Einige dieser neuen Features sind sehr einfach einzusetzen und bieten C++-Projekten einen erheblichen Mehrwert.

Es kann sehr hilfreich sein, automatisch die Stellen zu erkennen, an denen sich einige der neuen C++11-Features einsetzen lassen. Zu diesem Zweck ist clang-tidy ein eigenständiges Tool, das nach älteren Standards geschriebenen C++-Code automatisch dort auf Features des neuesten C++-Standards umstellt, wo dies sinnvoll ist.

Entwickler, die Clang verwenden, können clang-tidy problemlos nutzen. Für Visual-C++-Entwickler und Nutzer anderer Compiler ist es dagegen weniger einfach, von den Ergebnissen dieses nützlichen Tools zu profitieren.

Damit alle C++-Entwickler dieses Tool nutzen können, integriert CppDepend es nun in der Windows-Version 2018.1, um Stellen zu erkennen, an denen die folgenden Features eingesetzt werden könnten:

  • Override: Erkennt Memberfunktionen, die eine virtuelle Funktion einer Basisklasse überschreiben, aber noch nicht mit dem Spezifizierer override versehen sind.
  • Loop Convert: Erkennt Schleifen wie for(…; …; …), die durch die mit C++11 eingeführten bereichsbasierten Schleifen ersetzt werden können, und liefert den entsprechenden Ausdruck für die bereichsbasierte Schleife.
  • Pass-By-Value: Erkennt const-ref-Parameter, bei denen die Verwendung des Pass-by-Value-Idioms.
  • auto_ptr: Erkennt die Verwendung des veralteten std::auto_ptr und ersetzt ihn durch std::unique_ptr.
  • auto-Spezifizierer: Erkennt Stellen, an denen der Typspezifizierer auto in Variablendeklarationen verwendet werden kann.
  • nullptr: Erkennt Null-Literale, die gegebenenfalls durch nullptr ersetzt werden können.
  • std::bind: Diese Prüfung findet Verwendungen von std::bind und ersetzt einfache Verwendungen durch Lambdas. Wo erforderlich, verwenden die Lambdas Value-Capture.
  • Veraltete Header: Einige aus der C-Bibliothek übernommene Header wurden in C++ als veraltet eingestuft und werden für C++-Codebasen nicht mehr empfohlen. Manche haben in C++ keinerlei Wirkung. Weitere Einzelheiten finden Sie im Abschnitt [depr.c.headers] des C++14-Standards.
  • std::shared_ptr: Diese Prüfung erkennt die Erzeugung von std::shared_ptr Objekten durch einen expliziten Konstruktoraufruf und einen new Ausdruck und ersetzt sie durch einen Aufruf von std::make_shared.
  • std::unique_ptr: Diese Prüfung erkennt die Erzeugung von std::unique_ptr Objekten durch einen expliziten Konstruktoraufruf und einen new Ausdruck und ersetzt sie durch einen Aufruf von std::make_unique, das mit C++14 eingeführt wurde.
  • Raw-String-Literale: Diese Prüfung ersetzt gezielt String-Literale mit Escape-Zeichen durch Raw-String-Literale.

Wie verwende ich dieses Feature?

Dieses Feature ist standardmäßig nicht aktiviert. Sie können es unter „Project properties“ => Analysis => Modernize C++ Code einschalten. Die Aktivierung verlängert jedoch die für die Analyse Ihrer Codebasis benötigte Zeit. Wir empfehlen daher, es wieder zu deaktivieren, sobald Sie die Ergebnisse nicht mehr benötigen.

Nach der Analyse finden Sie die CQLinq-Abfragen mit den C++11-Empfehlungen in der Gruppe „Modernize C++ Code“:

Für jede Abfrage sehen Sie die Stellen, an denen Ihr Code modernisiert werden kann. Mit einem Doppelklick auf ein Ergebnis gelangen Sie direkt zu der Quellcodestelle, an der die Verbesserung angewendet werden kann.

Besonders nützlich an den Empfehlungen des Clang-Modernizer-Tools ist, dass sie einige der wertvollsten C++11-Features abdecken. Diese lassen sich leicht in bestehenden Quellcode integrieren und können C++-Projekten einen erheblichen Mehrwert bieten.

Diesen Artikel teilen