Zusammenfassung
Diese Lektion schließt die erste Einheit des Kurses ab, die den ersten Schritten beim Programmieren in C++ gewidmet ist. Sie rekonstruiert die Kette der Begriffe, die vom spezifizierten Problem bis zum nach seinem Zeitpunkt eingeordneten Fehler reicht, über den Algorithmus, den Quellcode, die Kompilierung und das Linken, die ausführbare Datei und die Kommunikation des Programms mit der Außenwelt; sie trennt, was davon in jeder Sprache gilt, von dem, was C++ eigen ist; sie fasst das undefinierte Verhalten zusammen, das die Einheit gezeigt hat, und die Regel des Kurses, die daraus folgt, immer mit Warnungen und während der Entwicklung mit Sanitizern zu kompilieren; sie wiederholt in ihrem Abschlusstest die Fertigkeiten des Eingangstests; und sie endet mit sechs Herausforderungen, die die ganze Einheit verbinden: das Wechselgeld mit den wenigsten Münzen, eine ausgerichtete Tabelle ohne Schleifen, ein Programm mit fünf Defekten fünf verschiedener Arten, ein Experiment zum Ausgabepuffer, ein Datum mit festem Format und der Compiler, erklärt für jemanden, der nur eine interpretierte Sprache kennt.
Lernziele
- Ohne Hilfe den Weg von der Aufgabenstellung bis zum ausgeführten Programm gehen: spezifizieren, den Algorithmus schreiben, ihn von Hand nachvollziehen, ihn in C++ schreiben, ihn mit den Optionen des Kurses kompilieren, ihn ausführen und sein Ergebnis prüfen.
- Erklären, welches Werkzeug bei jedem Schritt dieses Weges wirkt (Editor, Präprozessor, Compiler, Linker, Sanitizer) und was jedes empfängt und liefert.
- Die Art eines Fehlers (Kompilier-, Linker-, Laufzeit- oder Logikfehler) an seinem Erscheinungsbild erkennen und mehrere Fehler in der Reihenfolge beheben, in der sie sich zeigen.
- An einem Beispiel erklären, was undefiniertes Verhalten ist und warum der Kurs mit Warnungen und Sanitizern kompiliert.
- In dem, was in der Einheit gelernt wurde, trennen, was in jeder Sprache gilt, von dem, was C++ eigen ist.
Was die Einheit erreicht hat
Die Einheit hat sich vorgenommen, jemanden, der noch nie programmiert hat, von einem in Alltagssprache gestellten Problem zu einem Programm zu führen, das kompiliert, läuft, Daten liest und Ergebnisse schreibt, im Wissen darum, was jedes Werkzeug unterwegs getan hat. Das ist ihr gelungen, gestützt allein auf das, was die Einführung als bekannt vorausgesetzt hat: die Schularithmetik, die Gewohnheit, schriftlichen Anweisungen zu folgen, und den Umgang mit Dateien und Ordnern.
Vom Problem zum Algorithmus
Die Lektion Vom Problem zum Algorithmus hat festgestellt, dass ein Problem durch seine Spezifikation festgelegt wird, einen Vertrag, der jeder Eingabe, die die Vorbedingung erfüllt, die Nachbedingung verspricht und außerhalb davon nichts. Ein Algorithmus ist ein endliches, eindeutiges und allgemeines Verfahren, das in nummerierten Schritten geschrieben, mit einer Ablauftabelle von Hand nachvollzogen und aus Sequenz, Entscheidung und Wiederholung zusammengesetzt wird; jede Wiederholung wird von einer Variante begleitet, einer natürlichen Größe, die bei jedem Durchlauf abnimmt und garantiert, dass sie terminiert.
Programme, Compiler und C++
Die Lektion Programme, Compiler und C++ hat gezeigt, dass der Text eines C++-Programms nicht so, wie er ist, ausgeführt wird: Präprozessor, Compiler und Linker verwandeln ihn in eine ausführbare Datei. Daraus folgte die Unterscheidung, die die Einheit durchzieht: Was nur vom Text abhängt, zeigt sich beim Kompilieren oder Linken, und was von den Daten abhängt, erst beim Ausführen. Die Lektion hat das kompilierte Modell mit dem interpretierten verglichen und begründet, warum der Kurs C++23 verwendet und diesen Standard mit -std=c++23 anfordert.
Die Umgebung installieren
Die Lektion Die Umgebung unter Windows, macOS und Linux installieren hat einen C++23-fähigen Compiler und Visual Studio Code mit seiner C++-Erweiterung installiert. Ihre methodische Lehre ist, dass der Editor nicht kompiliert, sondern einen Compiler aufruft, den das Terminal finden muss, und dass der genaue Text einer Meldung den Installationsfehler vom Aufruffehler unterscheidet.
Kompilieren, Ausführen und Konfigurieren
Die Lektion Kompilieren, Ausführen und Konfigurieren hat den Zyklus aus Bearbeiten, Speichern, Kompilieren, Ausführen und Lesen festgelegt, dazu den Kursbefehl. Sie hat den Fehler, der die ausführbare Datei verhindert, von der Warnung unterschieden, die sie zulässt, aber auf verdächtigen Code hinweist; sie hat die Sanitizer aktiviert (den für Speicherfehler, AddressSanitizer, und den für undefiniertes Verhalten, UndefinedBehaviorSanitizer), die die Ausführung überwachen, und ihre Grenzen gezeigt; und sie hat erklärt, dass Datei, Compiler und Konsole in UTF-8 übereinstimmen müssen.
Anatomie eines Programms
Die Lektion Anatomie eines Programms hat das minimale Programm zerlegt: die Header, die jede Abhängigkeit deklarieren; main, den Einstiegspunkt, dessen Wert der Exit-Code ist; den Namensraum std; die Anweisungen, die Blöcke und die Kommentare. Sie hat gelehrt, die Meldungen von der ersten an zu lesen, und die Stilrichtlinie des Kurses festgelegt.
Eingabe, Ausgabe und Fehler
Die Lektion Eingabe, Ausgabe und Fehler hat das Programm mit der Außenwelt in Kontakt gebracht: std::println schreibt genau das Verlangte, mit Formatangaben, und std::cin liest und hält beim ersten Zeichen an, das nicht passt. Ein Lesevorgang, der auf ein Zeichen stößt, das die Zahl nicht bilden kann, setzt die Variable auf null und lässt den Stream im Fehlerzustand, stillschweigend (eine Zahl, die nicht in den Typ passt, oder eine erschöpfte Eingabe hinterlassen in der Variablen einen anderen Wert, und die Lektion zählt diese Fälle auf); deshalb wird das Lesen geprüft. Die Lektion hat die Einheit abgeschlossen, indem sie die Fehler nach ihrem Zeitpunkt eingeteilt hat: Kompilier-, Linker-, Laufzeit- und Logikfehler.
Inhalt wird geladen…
Abgeschlossen
Melde dich an, um deinen Fortschritt zu speichern