C++
VeröffentlichtRevision 1

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.

C++
1export module rechnen;2 3export double addieren(double links, double rechts) {4    return links + rechts;5}
C++
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

Mitwirkende 1

Menschen, deren Änderungen in dieser Seite veröffentlicht wurden.

Kommentare 0

Kommentare sind für diese Seite deaktiviert.