Blog 3 Min. Lesezeit

C++11-/C++14-/C++17-Features in WinObjC erkennen: Eine Studie

Diesen Artikel teilen
Spotting C++11/C++14/C++17 Features in WinObjC: A Study

In einem früheren Beitrag haben wir das Tool clang-modernize vorgestellt, mit dem sich Stellen erkennen lassen, an denen neue C++11-Features zur Modernisierung des C++-Quellcodes eingesetzt werden könnten. Doch wie lässt sich einfach feststellen, wo die neuen C++-Features in einem Projekt tatsächlich verwendet werden?

Facebook und Google setzen C++11 in ihrem Quellcode intensiv ein. Wie wir in einem früheren Beitrag, nutzt nahezu alle C++11-Features, und ich wollte wissen, ob Microsoft den neuen C++11-Standard ebenfalls in seinem Open-Source-Code eingesetzt hat.

Die Open-Source-Projekte von Microsoft finden Sie in deren GitHub Repository. Einige sind Forks anderer Projekte, die Microsoft an die eigenen Anforderungen angepasst hat, darunter LLVM, Clang und OpenCV; andere wurden direkt von Microsoft entwickelt. Sehen wir uns eines dieser Projekte an und prüfen wir, ob es C++11 verwendet. Eine gute Wahl ist eines der neueren Open-Source-C/C++-Projekte von Microsoft: WinObjC.

Windows Bridge for iOS (auch WinObjC genannt) ist ein Open-Source-Projekt von Microsoft, das eine Objective-C-Entwicklungsumgebung für Visual Studio/Windows bereitstellt. Darüber hinaus bietet WinObjC Unterstützung für die Kompatibilität mit iOS-APIs.

Eine Möglichkeit, die Verwendung von C++11 zu prüfen, besteht darin, jede Quelldatei einzeln zu untersuchen. Je nach Projektgröße kann das Stunden oder sogar Tage dauern. Eine andere Lösung ist der Einsatz von Clang.

Clang und seine leistungsfähige Diagnose-Engine helfen weiter.

Das Clang-Team möchte Fehlermeldungen so klar und aussagekräftig wie möglich gestalten. Für einen Kommandozeilen-Compiler soll Clang möglichst benutzerfreundlich sein. Deshalb zeigt Clang sehr präzise, was im Code nicht stimmt. Eine Diagnose-Engine wandelt dazu Fehlerinformationen in verständliche Meldungen um.

Clang erzeugt zahlreiche Arten von Diagnosen. Für unseren Zweck sind insbesondere Meldungen mit Beschreibungen wie „XXX incompatible with C++98“ interessant.

Doch wie erhalten wir die Clang-Diagnosen für eine Visual-Studio-Solution?

Die erste Möglichkeit besteht darin, die Projekte mit Clang zu kompilieren. Das ist jedoch nicht ganz einfach, denn dafür muss der Build-Prozess so angepasst werden, dass Clang anstelle des Microsoft-Compilers verwendet wird.

Die zweite Möglichkeit besteht darin, Ihre Visual-Studio-Projekte mit CppDepend, which uses Clang as its front-end parser and reports all its diagnostics. CppDepend is für die Open-Source-Community kostenlos.

Hier sehen Sie alle Clang-Diagnosen für die WinObjC-Solution:

win1

In unserem Fall benötigen wir jedoch nur Diagnosen vom Typ „incompatible with C++98“. Die vorherige Abfrage lässt sich leicht so filtern, dass ausschließlich diese Diagnosen angezeigt werden:

win2

Wie zu erkennen ist, werden die Sprachfeatures nullptr und auto an vielen Stellen im Quellcode eingesetzt. Anders als bei den Projekten von Facebook und Google sind C++11-Features insgesamt jedoch nicht weit verbreitet. Bei der Untersuchung der C++-Quelldateien von WinObjC zeigt sich außerdem, dass C++/CX-Erweiterungen deutlich häufiger verwendet werden.

Zusammenfassung:

Manchmal ist es hilfreich zu wissen, ob ein C++-Projekt Features neuerer Standards verwendet und an welchen Stellen sie eingesetzt werden. Clang ist ein leistungsfähiges Werkzeug, um diese Informationen zu ermitteln.

Diesen Artikel teilen