Blog 5 Min. Lesezeit

10 wesentliche Best Practices für hochwertigen C++-Code

Diesen Artikel teilen
10 Essential Best Practices for Writing High-Quality C++ Code

Hochwertiger Code ist entscheidend für den Erfolg jedes Softwareprojekts, denn er beeinflusst Zuverlässigkeit, Leistung und Wartbarkeit. In diesem Blogbeitrag stellen wir 10 wesentliche Best Practices vor, die in CppDepend enthalten sind und Ihnen helfen, sauberen und effizienten C++-Quellcode zu schreiben. Sie decken verschiedene Aspekte ab, darunter Namenskonventionen, Fehlerbehandlung und Speicherverwaltung. Ob Einsteiger oder erfahrener Entwickler: Diese Best Practices helfen Ihnen, besseren C++-Code zu schreiben und Ihre Projekte erfolgreicher zu machen.

1- Verwenden Sie aussagekräftige und sinnvolle Variablennamen: Wählen Sie Variablennamen, die den Zweck der jeweiligen Variable klar beschreiben und für den Leser verständlich sind. Dadurch wird Ihr Code leichter lesbar und verständlicher.

#include <iostream>

int main()
{
    // GOOD EXAMPLE
    int userAge = 25;
    const int kDaysInWeek = 7;
    std::string firstName = "John";

    // BAD EXAMPLE
    int a = 25;
    int b = 7;
    std::string c = "John";
}

2 – Schreiben Sie gut lesbaren Code: Verwenden Sie sinnvolle Einrückungen, Leerzeichen und Kommentare, um den Code besser lesbar zu machen. Teilen Sie außerdem lange Codezeilen in kleinere, übersichtlichere Blöcke auf.

// GOOD EXAMPLE
for (int i = 0; i < 10; i++)
{
    cout << i << endl;
}

// BAD EXAMPLE
for(int i=0;i<10;i++)cout<<i<<endl;

3 – Nutzen Sie objektorientierte Programmierung: C++ ist eine objektorientierte Sprache. Nutzen Sie daher Funktionen wie Klassen und Objekte, um Ihren Code zu organisieren und zu strukturieren.

#include <iostream>
#include <fstream>

int main()
{
    // GOOD EXAMPLE
    std::ifstream file("data.txt");
    if (!file.is_open())
    {
        std::cerr << "Error: Failed to open file." << std::endl;
        return 1;
    }

    // Read and process file data here

    file.close();
    return 0;

    // BAD EXAMPLE
    std::ifstream file("data.txt");
    // Read and process file data here
    file.close();
    return 0;
}

4- Vermeiden Sie globale Variablen: Globale Variablen können in größeren Projekten Probleme verursachen, da sie leicht von verschiedenen Stellen im Code verändert werden können. Verwenden Sie stattdessen lokale Variablen innerhalb von Funktionen und Klassen.

// GOOD EXAMPLE
void printSum(int x, int y)
{
    int sum = x + y;
    cout << "The sum is: " << sum << endl;
}

// BAD EXAMPLE
int sum;

void printSum(int x, int y)
{
    sum = x + y;
    cout << "The sum is: " << sum << endl;
}

5- Nutzen Sie Fehlerbehandlung: Behandeln Sie Fehler und Ausnahmen in Ihrem Code, etwa Division durch null, ungültige Eingaben oder Arrayzugriffe außerhalb der Grenzen.

// GOOD EXAMPLE
int main()
{
    int dividend, divisor;
    cout << "Enter dividend: ";
    cin >> dividend;
    cout << "Enter divisor: ";
    cin >> divisor;
    try
    {
        if (divisor == 0)
        {
            throw runtime_error("Division by zero.");
        }
        cout << "Result: " << dividend / divisor << endl;
    }
    catch (runtime_error &err)
    {
        cout << err.what() << endl;
    }
    return 0;
}

// BAD EXAMPLE
int main()
{
    int dividend, divisor;
    cout << "Enter dividend: ";
    cin >> dividend;
    cout << "Enter divisor: ";
    cin >> divisor;
    if (divisor == 0)
    {
        cout << "Division by zero." << endl;
        return 1;
    }
    cout << "Result: " << dividend / divisor << endl;
    return 0;
}

6- Halten Sie Funktionen kurz und einfach: Funktionen sollten kurz, fokussiert und auf einen einzigen Zweck ausgerichtet sein. Wird eine Funktion zu komplex, teilen Sie sie in kleinere, übersichtlichere Funktionen auf.

// GOOD EXAMPLE
int add(int x, int y)
{
    return x + y;
}

// BAD EXAMPLE
int addAndMultiply(int x, int y)
{
    int sum = x + y;
    int product = x * y;
    cout << "Sum: " << sum << endl;
    cout << "Product: " << product << endl;
    return sum;
}

7- Vermeiden Sie fest codierte Werte: Statt Werte direkt im Code fest zu codieren, speichern Sie sie in Konstanten oder Variablen, die sich leicht ändern lassen. Dadurch wird der Code flexibler und wartbarer.

#include <iostream>

const int kDataSize = 100;

int main()
{
    // Good example
    int data[kDataSize];
    for (int i = 0; i < kDataSize; ++i)
        data[i] = i;

    // Bad example
    int data[100];
    for (int i = 0; i < 100; ++i)
        data[i] = i;
}

8- Nutzen Sie Standardbibliotheken: C++ bietet umfangreiche Standardbibliotheken, darunter die Standard Template Library (STL), mit denen sich viele gängige Aufgaben erledigen lassen. Ihre Verwendung kann den Code vereinfachen und die Leistung verbessern.

// GOOD EXAMPLE
#include <iostream>
#include <string>

int main()
{
    std::string name;
    std::cout << "Enter your name: ";
    std::getline(std::cin, name);
    std::cout << "Hello, " << name << "!" << std::endl;
    return 0;
}

// BAD EXAMPLE
#include <iostream>
#include <string.h>

int main()
{
    char name[100];
    std::cout << "Enter your name: ";
    std::cin.getline(name, 100);
    std::cout << "Hello, " << name << "!" << std::endl;
    return 0;
}

9 – Halten Sie den Code modular: Teilen Sie Ihren Code in kleinere, unabhängige Module auf, die sich leicht testen und wiederverwenden lassen. Das verbessert Wartbarkeit und Änderbarkeit.

// GOOD EXAMPLE
if (temperature > 30)
{
    cout << "It's hot outside." << endl;
}
else
{
    cout << "It's not hot outside." << endl;
}

// BAD EXAMPLE
if(temperature>30)cout<<"It's hot outside."<<endl;
else cout<<"It's not hot outside."<<endl;

10 – Dokumentieren Sie Ihren Code: Fügen Sie Kommentare hinzu, die Zweck, Verwendung und getroffene Annahmen erläutern. So können andere Ihren Code leichter verstehen, und auch Sie selbst können später schneller nachvollziehen, wie er funktioniert.

#include <iostream>

// Good example

/**
 * Calculates the factorial of a given number.
 *
 * @param num The number to calculate the factorial of.
 * @return The factorial of the given number.
 */
unsigned long long factorial(unsigned int num)
{
    unsigned long long result = 1;
    for (int i = 2; i <= num; ++i)
        result *= i;
    return result;
}

// Bad example

unsigned long long f(unsigned int n)
{
    unsigned long long r = 1;
    for (int i = 2; i <= n; ++i)
        r *= i;
    return r;
}

Wenn Sie diese Best Practices befolgen, können Sie hochwertigen C++-Quellcode schreiben, der leicht zu lesen, zu verstehen und zu warten ist.

Download CppDepend kostenlos herunter und prüfen Sie, ob Ihr Code gut gewartet ist!

Diesen Artikel teilen