Modernes C++ und C-Alternativen

Namespaces in C++ und Namenspräfixe in C

In dieser Lektion lernst du, wie du in großen Programmen doppelte Funktionsnamen vermeidest, mit Namespaces in C++ und der Präfix-Konvention in C.

Einführung

In großen Programmen oder bei vielen Bibliotheken kommt es leicht vor, dass zwei Funktionen denselben Namen haben. C++ löst das mit Namespaces, eigenen Bereichen für Namen. C hat keine Namespaces, deshalb hängen C-Bibliotheken ihren Namen meist ein Präfix (prefix) an, etwa math_square.

Wichtige Punkte

  • Verstehe zuerst, wie es in C funktioniert, bevor du die Abstraktionen von C++ lernst.
  • Drücke den Besitz von Ressourcen mit RAII und Wertsemantik (value semantics) aus.
  • Bevorzuge die typsicheren Werkzeuge von C++ gegenüber Makros und Typumwandlungen.

Codebeispiele in C und C++

C
Code ausführen →
main.c
#include <stdio.h>

int math_square(int value) {
    return value * value;
}

int main(void) {
    printf("%d\n", math_square(7));
}
Ergebnis der Ausführung
49
C++
Code ausführen →
main.cpp
#include <iostream>

namespace math {
    int square(int value) {
        return value * value;
    }
}

int main() {
    std::cout << math::square(7) << '\n';
}
Ergebnis der Ausführung
49

C und C++ im Vergleich

In C ist das Präfix math_ nur eine Namenskonvention und hängt ganz von der Sorgfalt des Programmierers ab. In C++ liegt die Funktion square im Namespace math und wird mit dem vollständigen Namen math::square aufgerufen. Der Compiler stellt sicher, dass Namen in verschiedenen Namespaces nicht kollidieren, und erlaubt Aliasnamen (alias) für lange Namespaces.

C

C verwendet Namenskonventionen, Callbacks, Makros und structs mit Kontext.

C++

C++ bietet Abstraktionen mit klarem Gültigkeitsbereich, die typsicher sind und zur Laufzeit meist nichts zusätzlich kosten.

Übungen zur Vertiefung

Führe beide Versionen aus und ändere dann den Code, um zu beobachten, welche Sicherheit jede Sprache bietet.

  • Schreibe den Mechanismus zuerst in C und verwende erst dann die entsprechende C++-Funktion.
  • Ersetze das manuelle Freigeben von Ressourcen durch RAII.
  • Prüfe, ob die Funktion Speicherreservierungen oder Aufrufe virtueller Funktionen verursacht.