C++ Coding Style und Code Format mit .clang-format Dateien festlegen
Wenn man einen Texteditor wie Qt Creator verwendet, dann kann man sich das konsistente Schreiben von Quelltext durch entsprechende Editoreinstellungen erleichtern. Normalerweise ist das eine rechner-/nutzerspezifische Einstellung für den individuellen Nutzeraccount und Editor. Das bedeutet aber auch, wenn ich Quelltext aus einem git-Repository auf einem anderen Rechner klone, muss ich dort den Editor wieder genau so einstellen. Vor allem ist das wichtig, was das automatische Anpassen der Einrückung betrifft.
Problem 1 - mehrere Rechner/Nutzer mit unterschiedlichen Konfigurationen
Nichts ist nerviger als Quelltext auf einem Rechner mit Tabs zu erstellen, diesen dann auf einem anderen Rechner mit 2-Spaces-pro-Tab automatisch umgewandelt zu bekommen und auf dem ersten Rechner dann mit 4-Spaces-pro-Tab zurück konvertiert zu bekommen. Maximales Chaos ist garantiert.
Problem 2 - mehrere Bibliotheken mit unterschiedlichen Konfigurationen
Außerdem hat man in Repositories mit Teilprojekten/Sub-Modules mitunter verschiedene Bibliotheken mit unterschiedlichem Codingstil und Einrückung dabei. Und jetzt jedes Mal beim Wechsel der Quelltextdatei den Editor umzustellen ist aufwändig und nervt, und was nervt wird irgendwann nicht mehr gemacht und dann hat man schon wieder oben beschriebenes Chaos.
Die Lösung - Konfigurationsdateien
Glücklicherweise kann man, wenn man fortschrittliche Tools wie clang zur Codeformatierung benutzt, die benötigten Einstellungen in eine Datei schreiben und diese dann im Basisverzeichnis einer Bibliothek in der Datei .clang-format
ablegen. Diese Datei muss exakt so heißen. Der Editor mit clang-Unterstützung wird ausgehend vom Pfad der aktuell bearbeiteten Datei solange im Verzeichnisbaum nach oben suchen, bis eine .clang-format
-Datei gefunden wurde. So kann man also eine allgemeingültige Formatdatei im Basisverzeichnis eines Projekts ablegen und nur in den Submodulen/Bibliotheken mit anderen Standards die Formatregeln mit eigenen .clang-format
-Dateien überschreiben.
Die Datei für meinen (minimalistischen) Coding-Stil sieht so aus:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# clang-format
# See http://clang.llvm.org/docs/ClangFormatStyleOptions.html
# Tested with: clang-format version 3.7.1
#
# This is my (Andreas Nicolai's) IBK-standard format, basically Tabs (4 spaces wide)
TabWidth: 4
IndentWidth: 4
UseTab: Always
Language: Cpp
Standard: Cpp11
PointerAlignment: Middle
AccessModifierOffset: -4
AlignOperands: false
AlignTrailingComments: true
AllowShortBlocksOnASingleLine: false
eine entsprechend längere und kommentierte Version hab ich hier verlinkt: .clang-format.explained