Imports und C++20-Module
Ein Modul ist eine C++20-Einheit mit einer ausdrücklich exportierten Schnittstelle. Es kann Deklarationen für andere Übersetzungseinheiten bereitstellen, ohne die klassische textuelle Headerverarbeitung in derselben Form zu verwenden.
Imports und C++20-Module#
Modernes C++ · Lektion 48 von 60
Voraussetzungen: Header, Compiler. Lernziel: Du unterscheidest #include, Namensräume und echte Modulimporte.
Ein Modul ist eine C++20-Einheit mit einer ausdrücklich exportierten Schnittstelle. Es kann Deklarationen für andere Übersetzungseinheiten bereitstellen, ohne die klassische textuelle Headerverarbeitung in derselben Form zu verwenden.
Die folgenden Blöcke gehören in zwei getrennte Dateien. Sie zeigen die Sprachstruktur; Moduldateiendung, Buildreihenfolge und Werkzeugoptionen müssen für deine Toolchain eingerichtet werden.
1export module rechnen;2 3export double addieren(double links, double rechts) {4 return links + rechts;5}1#include <iostream>2import rechnen;3 4int main() {5 std::cout << addieren(2.0, 3.0) << '\n';6}export module rechnen; benennt die Modulschnittstelleneinheit. export vor der Funktion macht diese für Importierende verfügbar. import rechnen; bindet die Modulschnittstelle ein. Es installiert keine Bibliothek und lädt nichts aus dem Internet.
Drei verschiedene Werkzeuge#
Mittel | Aufgabe |
|---|---|
#include | Header bei der Präprozessierung einbeziehen |
namespace | Namen logisch gruppieren |
import | Eine passende Modulschnittstelle verfügbar machen |
Ein Modul kann Funktionen in Namensräumen exportieren, muss das aber nicht. Ein Import bedeutet nicht automatisch, dass Namen ohne Qualifikation zu benutzen sind. Auch ein Modul kann Implementierungsteile besitzen, die nicht als öffentliche Schnittstelle exportiert werden.
Warum der Build aufwendiger ist#
Compiler erzeugen normalerweise eine aufbereitete Schnittstellendarstellung, oft BMI (Binary Module Interface) oder werkzeugspezifisch anders genannt. Ein importierender Teil braucht die richtige Schnittstelle, bevor er übersetzt wird. Die Dateien müssen zur verwendeten Werkzeugkette und Konfiguration passen.
Ein bloßes Umschalten auf C++20 reicht je nach Compiler nicht. Die GCC-Moduldokumentation beschreibt eigene Moduloptionen und Grenzen. Buildsysteme müssen Modulabhängigkeiten erkennen; mische keine zufälligen vorkompilierten Schnittstellen aus fremden Compilerinstallationen.
Standardbibliothek und Versionsgrenzen#
import std; gehört zum standardisierten Bibliotheksmodulansatz von C++23 und ist zusätzlich von passender Werkzeugunterstützung abhängig. Es ist kein allgemein gültiger Ersatz für <iostream> in einem beliebigen C++17- oder C++20-Projekt. Für die übrigen Kursbeispiele bleiben direkte Headereinbindungen der verlässliche gemeinsame Ausgangspunkt.
Übung#
Behebt import rechnen; eine nicht gebaute Datei rechnen.cppm automatisch?
Lösung
Nein. Das Buildsystem muss die Modulschnittstelle mit den passenden Einstellungen erstellen und für den Import verfügbar machen. Die C++-Anweisung ersetzt nicht die Projektkonfiguration.
Weiterlernen#
Zurück: Ranges und Views ab C++20 · Kursübersicht · Weiter: Textdateien lesen und schreiben
Kommentare 0
Kommentare sind für diese Seite deaktiviert.