Warum sauberer C++-Code nichts mit Pedanterie zu tun hat, sondern mit Respekt
Wenn Sie jemals ein Projekt geöffnet haben, das vor einem Jahr „schnell zusammengeschustert“ wurde, und nicht verstehen konnten, was eine Funktion namens doStuff() macht – dann wissen Sie, wovon die Rede ist. Sauberer C++-Code ist nicht nur Ästhetik. Es geht um Zeitersparnis, weniger Nerven und geringere Kosten. C++ ist eine mächtige, aber auch tückische Sprache: Speicher wird manuell verwaltet, Templates können Monster hervorbringen und Operatorüberladung grenzt an Zauberei. Ohne Disziplin wird der Code schnell zu „Spaghetti“.
In diesem Artikel schauen wir uns an, wie Sie sauberen C++-Code schreiben, der leicht zu lesen, zu warten und zu erweitern ist. Kein überflüssiges Wissen – nur Praxis, Beispiele und bewährte Prinzipien.
Regel Nr. 1: Namensgebung ist 50 % des Erfolgs
Namen von Variablen, Funktionen und Klassen sollten die Frage „Was ist das?“ oder „Was macht es?“ beantworten. Vergessen Sie int x und void f(). Verwenden Sie aussagekräftige Namen.
Schlechtes Beispiel
int d; // Was ist d? Distanz? Datum? Dummkopf?void p() { // Druckt es? Parst es? Weint es? // ...}Gutes Beispiel
int distanceInMeters;void printUserProfile() { // ...}Tipp: Halten Sie sich an einen einheitlichen Stil. Für C++ ist der Standard camelCase für Variablen und Funktionen, PascalCase für Klassen. Mischen Sie nicht snake_case und camelCase in einem Projekt – das beeinträchtigt die Lesbarkeit.
Regel Nr. 2: Funktionen sollten klein sein und eine Sache tun
Das Prinzip der einzigen Verantwortung (Single Responsibility) gilt nicht nur für Klassen, sondern auch für Funktionen. Eine ideale Funktion umfasst 5–20 Zeilen. Wenn eine Funktion mehr als eine Aktion ausführt – teilen Sie sie auf.
Schlecht
void processData(vector<int>& data) { // Sortierung sort(data.begin(), data.end()); // Filterung vector<int> filtered; for (int x : data) if (x > 0) filtered.push_back(x); // Ausgabe for (int x : filtered) cout << x << " ";}Gut
vector<int> filterPositive(const vector<int>& data) { vector<int> result; for (int x : data) if (x > 0) result.push_back(x); return result;}
void printData(const vector<int>& data) { for (int x : data) cout << x << " ";}
void processData(vector<int>& data) { sort(data.begin(), data.end()); auto filtered = filterPositive(data); printData(filtered);}Jetzt kann jede Funktion einzeln wiederverwendet und getestet werden. Sauberer C++-Code bedeutet Modularität.
Regel Nr. 3: Vermeiden Sie magische Zahlen und Zeichenketten
Zahlen und Zeichenketten, deren Bedeutung aus dem Kontext nicht ersichtlich ist, sind problematisch. Lagern Sie sie in Konstanten aus.
Schlecht
if (temperature > 100) { cout << "Gefahr!";}Gut
constexpr int MAX_SAFE_TEMPERATURE = 100;
if (temperature > MAX_SAFE_TEMPERATURE) { cout << "Gefahr!";}Wenn sich der Schwellenwert ändert, ändern Sie ihn jetzt nur an einer Stelle. Statt alle 100 im Code suchen zu müssen.
Regel Nr. 4: Kommentare sind keine Ausrede für schlechten Code
Der beste Kommentar ist der, der nicht nötig ist, weil der Code für sich selbst spricht. Schreiben Sie nicht „was der Code tut“ – das ist ersichtlich. Schreiben Sie „warum er es tut“.
Schlechter Kommentar
// erhöhe i um 1i++;Guter Kommentar
// Präinkrement für POD-Typen verwenden – schneller++i;Verwenden Sie // TODO: für unvollständige Abschnitte, aber übertreiben Sie es nicht. Idealer Code benötigt keine Erklärungen.
Regel Nr. 5: Verwenden Sie RAII und intelligente Zeiger
C++ ist bekannt für die manuelle Speicherverwaltung, aber modernes C++ (C++11 und neuer) bietet leistungsstarke Werkzeuge