C und C++ (CPP) 0. Einführung Prof. Dr. Marc Rennhard Institut für angewandte Informationstechnologie InIT ZHAW Zürcher Hochschule für Angewandte Wissenschaften marc.rennhard@zhaw.ch Marc Rennhard, 05.01.2010, CPP_Einfuehrung.ppt 1 1
Überblick Modul: CPP (C und C++) Technisches Pflichtmodul im 2. Semester des Studiengangs SI ECTS: 4 Dozent: Marc Rennhard (rema) Web: https://dublin.zhaw.ch/it/cpp Erste Informationsquelle, enthält alle Infos und Unterlagen zur Vorlesung E-Mail: marc.rennhard@zhaw.ch Organisation, Unterlagen, Prüfungen, Ablauf... Web Marc Rennhard, 05.01.2010, CPP_Einfuehrung.ppt 2 2
Ziele Sie kennen den gesamten Umfang der Sprachen C und C++, sowie die wichtigsten Elemente der C und C++ Standard Libraries Sie können selbst kleinere C und C++ Programme entwickeln Sie können bestehende C und C++ Programme verstehen und erweitern Sie haben die Voraussetzungen, um auch grössere Programme zu entwickeln Marc Rennhard, 05.01.2010, CPP_Einfuehrung.ppt 3 3
Geschichtliche Entwicklung 1970: Dennis Ritchie entwickelt bei den Bell Labs eine Programmiersprache für die Entwicklung des Betriebssystems Unix C 1978: Brian Kerningham und Ritchie publizieren C 1983: Bjarne Stroustrup definiert C++ als Erweiterung von C 1983-1989: Standardisierung von C ANSI C (C89) 1990: ANSI C wird fast unverändert von der ISO übernommen (C90) Thema dieser Vorlesung (1. Hälfte) 1995: Java 1.0 von Sun 1998: Standardisierung von C++ ANSI/ISO C++ Thema dieser Vorlesung (2. Hälfte) 1999: Erweiterungen (z.b. neue Datentypen) zu C ISO C99 Standard Wird nicht von allen Compilern vollständig unterstützt 2000: C# von Microsoft, Neuentwicklung für.net-architektur (verwendet viele Konzepte aus C++ und Java) Marc Rennhard, 05.01.2010, CPP_Einfuehrung.ppt 4 4
Wieso eigentlich C/C++? (1) Erlaubt es, sehr effizienten Code zu schreiben Der Programmierer hat sehr grosse Kontrolle über das, was der Code genau macht Effizienz hinsichtlich Memory-Footprint und Ausführungsgeschwindigkeit Mit grossem Abstand die wichtigste Systemsprache: General Purpose Betriebssysteme sind in C/C++ geschrieben (Unix, Linux, Windows...) Spezielle Betriebssysteme sind oft in C/C++ geschrieben (zb CISCO Router, Datenbanken) Virtual Machines (zb für Java) sind in C/C++ geschrieben Grosse Relevanz im Bereich Software für Embedded Systems Viele Applikationen sind in C/C++ geschrieben Zum Beispiel der grösste Teil der Open Source Software: Mozilla, Apache... Marc Rennhard, 05.01.2010, CPP_Einfuehrung.ppt 5 5
Wieso eigentlich C/C++? (2) Fördert (und bedingt!) das Verständnis für das unterliegende System Beispiel: Kontrolle über das Speichermanagement (allozieren von Speicher auf dem Stack oder dem Heap) ist beim Programmierer Berücksichtigung der Architektur ist notwendig Grosser Umfang von verfügbaren Bibliotheken (nebst der Standard Library) zb GNU C Library (glibc) Unzählige weitere, aber oft nicht standardisierte Libraries Fach Betriebssysteme (BSy) im 2. Studienjahr verwendet C/C++ im Praktikum Hinweis: wir werden hier keine GUI-Applikationen entwickeln, sondern fokussieren uns auf die spezifischen Eigenheiten von Standard C/C++ Keine Applets, kein Appletviewer GUI-Bibliotheken (wie in Visual C++) sind nicht Teil von Standard C/C++! Marc Rennhard, 05.01.2010, CPP_Einfuehrung.ppt 6 6
C/C++ und Java (1) Viele Ähnlichkeiten betreffend der Syntax und Semantik Java hat ganz bewusst auf C/C++ aufgebaut Java hat einige Details weggelassen (zb Operator Overloading, kein Einfluss auf Memory Management) Interessanterweise verwendet C# viele der weggelassenen Details wieder C/C++ Code ist fehleranfälliger als Java, Java ist einfacher zu lernen Keine automatische Garbage-Collection in C/C++ Pointer in C/C++ Sämtliche Variablen können in C/C++ wahlweise auf dem Stack oder auf dem Heap alloziert werden, nur eine Möglichkeit in Java Keine Überprüfung von Array-Grenzen in C/C++ Marc Rennhard, 05.01.2010, CPP_Einfuehrung.ppt 7 7
C/C++ und Java (2) Der Java-Compiler generiert Bytecode; der C/C++-Compiler erzeugt Maschinencode C/C++ Maschinencode ist nicht plattformunabhängig (es gibt kein Äquivalent zu der Java Virtual Machine) Ein Java Programm läuft im Allgemeinen langsamer als ein äquivalentes C/C++ Programm (Ausnahme: JIT-Compiler für Java Programme) Generell: Java nimmt dem Programmierer bewusst einige Aufgaben ab und vereinfacht diesem das Leben und ist dadurch dafür weniger flexibel und weniger effizient als C/C++ Es geht hier nicht darum, C/C++ und Java gegeneinander auszuspielen; beide haben ihre klaren Stärken und Einsatzgebiete Marc Rennhard, 05.01.2010, CPP_Einfuehrung.ppt 8 8
Literatur zur Vertiefung (1) Es gibt kein Buch, dass genau auf das Fach CPP passt Es gibt aber Unmengen von Büchern zu C/C++ Ich gebe hier ein paar Beispiele, es gibt aber kein offizielles Textbuch Brian Kernighan, Dennis Ritchie, The C Programming Language, Prentice Hall, 1988 Der absolute Klassiker zu C (aber eben nur C) Ausgezeichnetes Buch, sowohl zur Einführung als auch als Referenz Auch auf Deutsch erhältlich Marc Rennhard, 05.01.2010, CPP_Einfuehrung.ppt 9 9
Literatur zur Vertiefung (2) Bjarne Stroustrup, The C++ Programming Language (Special Edition), Addison-Wesley, 2000 Gutes, sehr umfassendes Buch vom Erfinder von C++ Unterscheidet aber nicht zwischen C und C++ Einführung und Referenz Auch auf Deutsch erhältlich Timothy Budd, C++ for Java Programmers, Addison-Wesley, 1999 Für Leser mit Java-Background geschrieben Wird auch ihre Java-Kenntnisse vertiefen Nur auf English verfügbar Marc Rennhard, 05.01.2010, CPP_Einfuehrung.ppt 10 10