Vom Quelltext zum Programm: Build und Fehlermeldungen
Wenn du auf „Build“ klickst, führt die Entwicklungsumgebung mehrere Arbeitsschritte aus. Übersetzungszeit bezeichnet die Zeit, in der aus dem Quelltext das Programm entsteht. Laufzeit ist die Zeit, in der das fertige Programm läuft.
Vom Quelltext zum Programm: Build und Fehlermeldungen#
Einführung · Lektion 6 von 60
Voraussetzungen: main. Lernziel: Du erkennst, in welchem Schritt ein Fehler entsteht.
Wenn du auf „Build“ klickst, führt die Entwicklungsumgebung mehrere Arbeitsschritte aus. Übersetzungszeit bezeichnet die Zeit, in der aus dem Quelltext das Programm entsteht. Laufzeit ist die Zeit, in der das fertige Programm läuft.
Die Schritte im Überblick#
Schritt | Aufgabe | Beispiel für ein Problem |
|---|---|---|
Präprozessierung | Verarbeitet etwa #include und bedingte Übersetzung | Headerdatei nicht gefunden |
Kompilierung | Prüft und übersetzt C++-Code | Semikolon fehlt, Typen passen nicht |
Assemblierung | Erzeugt Objektcode aus maschinennaher Darstellung | Werkzeug- oder Zielplattformproblem |
Linken | Verbindet Objektdateien und Bibliotheken | Funktion deklariert, aber Definition fehlt |
Programmstart und Ausführung | Betriebssystem lädt und führt das Ergebnis aus | Ungültige Eingabe oder Laufzeitfehler |
Eine Objektdatei enthält übersetzten Code und Informationen zum späteren Verbinden. Sie ist normalerweise noch kein eigenständig ausführbares Programm. Ein Symbol ist dabei unter anderem ein Name, unter dem der Linker eine Funktion finden soll.
Eine Fehlermeldung lesen#
Der folgende Ausschnitt ist absichtlich unvollständig und falsch:
1// Absichtlich falsch: Ausschnitt innerhalb von main2std::cout << "Hallo\n"3return 0;Ein Compiler könnte expected ';' before 'return' melden: Vor return wurde ein Semikolon erwartet. Meldungen bestehen häufig aus Dateiname, Zeile, Spalte und Beschreibung. Beginne mit dem ersten sachlichen Fehler und schaue auch in die Zeile davor. Ein fehlendes Zeichen kann viele Folgefehler verursachen, also Meldungen, die nur wegen des ersten Problems entstehen.
Warnung ist nicht gleich Erfolg#
Eine Warnung weist auf verdächtigen Code hin, obwohl eine ausführbare Datei entstehen kann. Beispiele sind eine unbenutzte Variable oder eine problematische Zahlenumwandlung. Behebe Warnungen bewusst, statt sie pauschal abzuschalten. Die genaue Warnungsmenge hängt vom Compiler und seinen Optionen ab; -Wall bedeutet bei GCC nicht „jede existierende Warnung“. Die GCC-Dokumentation zu Warnungsoptionen beschreibt die Gruppen.
Drei unterschiedliche Fehlerarten#
Ein Syntaxfehler verletzt die Sprachschreibweise. Ein Linkerfehler entsteht beim Verbinden übersetzter Teile. Ein logischer Fehler lässt gültigen Code etwas Falsches berechnen. 2 + 2 statt 2 * 2 fällt bei diesen Zahlen nicht auf; mit 2 und 3 schon. Testfälle müssen deshalb mehr als nur ein zufällig passendes Ergebnis abdecken.
Ein Laufzeitfehler tritt während der Ausführung auf. Nicht jeder Laufzeitfehler wird freundlich gemeldet. C++ kennt außerdem undefiniertes Verhalten: Bei bestimmten Regelverletzungen macht die Sprache keine Vorgabe mehr für das Ergebnis. Ein Absturz ist nur eine mögliche Folge. Darauf kommen wir bei Speicher und Zeigern zurück.
Übung#
Du änderst einen Text, der Build schlägt fehl, und beim Start erscheint die alte Ausgabe. Warum?
Lösung
Wahrscheinlich wurde die letzte erfolgreich erzeugte Programmdatei gestartet. Lies das Build-Ergebnis, behebe den Fehler und überprüfe den Pfad der gestarteten Datei.
Weiterlernen#
Zurück: int main(), void und der Rückgabewert · Kursübersicht · Weiter: Text und Zahlen mit std::cout ausgeben
Kommentare 0
Kommentare sind für diese Seite deaktiviert.