Allgemeine Grundlagen Flashcards
Syntax
Syntax ist über die Struktur oder die Grammatik der Sprache.
Es beantwortet die Frage: wie gestalte ich einen gültigen Satz?
Syntaxfehler findet und moniert der Compiler.
Sematik
Semantik ist über die Bedeutung des Satzes.
Es gibt Antworten auf die Fragen: ist dieser Satz gültig? Wenn ja, was hat der Satz zu bedeuten?
Semantikfehler findet der Compiler nicht, sondern sie wirken sich zur Laufzeit durch Programmabbruch aus.
Wie kann man syntaktische Fehler vermeiden?
- separate Anweisungen mit einem Semikolon
- schließen Sie den bedingten Ausdruck eines IF-Anweisungs in Klammern
- gruppieren mehrere Anweisungen zu einer einzelnen Anweisung durch einschließen in geschweifte Klammern
- Datentypen und Variablen müssen deklariert werden (bevor die erste ausführbare Anweisung)
Beispiel einer semantische Fehler
String a = “Hallo”;
int b=a;
Syntaktisch ist das völlig in Ordnung; semantisch ist es Unsinn.
Elemente der Toolchain
- Editor
- Präprozessor
- Compiler -
- Linker
Funktion vom Editor
- Eingabe Medium
- Textverarbeitung
Mindestanforderung: Zeilennummern, da die Compiler die Position des Fehlers in Form von Zeilennummern angeben wird.
Funktion vom Compiler
- übersetzt den von Programmierer geschriebenen Quelltext in Maschinensprache.
- Es entsteht für jede Quelltextdatei eine Objektdatei. -
(Oft wird auch die Kombination aus Compiler und Linker als Compiler bezeichnet)
Funktion vom Präprozessor
- bearbeitet die Programmdatei, bevor der Compiler sie zu lesen bekommt -
- wird durch sog. “Direktiven” gesteuert
(das sind Kommandos, die mit einen # (“Gatter”) beginnen)
*wesentliche Direktive => #include (Textdatei)
Funktion vom Linker
- bindet mehrere Objektdateien und Libraries zu einem Programm zusammen
Funktion und Bedeutung des Debuggers
- Hilfsmittel zum Aufspüren von Fehlern
- Werte kontrolle während der Laufzeit
- findet selbst keine Fehlern; hilft semantische Fehler aufzufinden -
- Debug-Information wird in dem Pgm-code eingebaut - Beim Debuggen wird ein Zusatzcode eingefügt, welches das Programm langsamer macht. => Haltepunkt
Entstehungsprozess eines Programms: Pflichtenheft
Fragestellung: “Wie sollen die Anforderungen technisch umgesetzt werden?”
- technische Rahmenbedingungen (Netze, Satellitensystem)
- kaufmännische Bedingungen (kosten, personal, Betrieb) Das Pflichtenheft beschreibt, wie und womit der Auftragnehmer das Gesamtvorhaben umsetzen wird.
Kriterien für ein gut strukturiertes Programm
- Whitespaces (Leerzeichen, Tabs, Zeilenschaltung) um Lesbarkeit zu erhöhen und Fehler leichter aufzufinden
- Gliederung durch Einrücken
- Ein Anweisung pro Zeile
- Schließende Klammern auf gleiche höhe wie öffnende Klammern
- Innerhalb der Klammern eine Ebene rücken
Manipulatoren im Output-Strom und ihre Bedeutung
Ein-und Ausgabe sind in C++ über sogenannte „streams“ realisiert.
Diese „Ströme“ sind eine fortlaufende Folge von Zeichen, welche von links nach rechts abgearbeitet werden.
Die Zeichenfolge kann Steuerkommandos, sogenannte „Manipulatoren“, enthalten, welche die Ausgabe beeinflussen.
Die Ausgabe wird durch << auf das cout Objekt „umgeleitet“.Das cout Objekt ist selbst ein Programmcode.
cout ist bereits zu einer Objektdatei umgewandelt und Teil der Bibliothek iostream(„Ein-/Ausgabe-Strom“).
Der Linker muss also später den ausführbaren Code dafür mit unserem Programm verbinden, damit die Ausgabe genutzt werden kann.
Dafür müssen wir dem Compiler die Informationen bereitstellen: #include // Ein-/Ausgabestrom Code bereitstellen
Was ist ein “gutes” Programm?
- günstig (Anschaffung; Betrieb)
- performant (Resourcen ; Struktur)
- pflegbar / wartbar
- erweitbar
- korrekt (syntaktisch;semantisch;algorithmisch)
- (daten-)sicher