Modernes C++ und C-Alternativen

Templates und generische C-Techniken

Templates erzeugen typsichere Implementierungen; C verwendet Makros, void-Pointer oder C11 _Generic.

Was ist Templates und generische C-Techniken?

Templates erzeugen typsichere Implementierungen; C verwendet Makros, void-Pointer oder C11 _Generic.

Schreibe typunabhängigen Compilezeit-Code.

Wichtige Punkte

  • Verstehe zuerst den C-Mechanismus.
  • Drücke Ownership durch RAII und Wertsemantik aus.
  • Bevorzuge typsichere Abstraktionen gegenüber Makros und Casts.

Codebeispiele in C und C++

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

int max_int(int left, int right) {
    return left > right ? left : right;
}

double max_double(double left, double right) {
    return left > right ? left : right;
}

#define MAX(left, right) _Generic((left), \
    int: max_int, double: max_double)((left), (right))

int main(void) {
    printf("%d %.1f\n", MAX(3, 9), MAX(2.5, 7.0));
}
Erwartete Ausgabe
9 7.0
C++
Code ausführen →
main.cpp
#include <iostream>

template<class T>
T maximum(const T& left, const T& right) {
    return left > right ? left : right;
}

int main() {
    std::cout << maximum(3, 9) << ' '
              << maximum(2.5, 7.0) << '\n';
}
Erwartete Ausgabe
9 7

Vergleich zwischen C und C++

_Generic muss unterstützte Typen aufzählen. Ein C++-Template funktioniert mit jedem Typ, der die benötigten Operationen erfüllt.

C

C nutzt Namenskonventionen, Callbacks, Makros und Kontextstrukturen.

C++

Sprachfeatures liefern bereichsgebundene, typsichere Abstraktionen.

Übungsaufgaben

Führe beide Versionen aus und untersuche die unterschiedlichen Garantien.

  • Implementiere zuerst den C-Mechanismus.
  • Ersetze manuelles Cleanup durch RAII.
  • Prüfe zusätzliche Allokationen und virtuellen Dispatch.