Kurzeinführung in C/C++ Kurzeinführung in C/C++ Informationsquellen: - Webseite zur Vorlesung, Abschnitt “Informationen zu C und C++” Datenstrukturen und Algorithmen WS2005/06 1 Universität Konstanz Kurzeinführung in C/C++ Einleitung • Vorteile von Java: – gut strukturiert mit hohem Funktionsumfang (mächtige Standardbibliothek) – weitestgehend Plattformunabhängig • Probleme: – relativ langsam – automatische Speicherverwaltung manchmal ungünstig Datenstrukturen und Algorithmen WS2005/06 Universität Konstanz 2 Kurzeinführung in C/C++ Einleitung • Vorteile von C++ – ermöglicht schnelle und maschinennahe Implementierungen – gut geeignet für Simulationen, Suchverfahren, Kompressionsverfahren, zeitkritische Anwendungen • Probleme: – Standardbibliothek weniger mächtig als bei Java • dennoch: weit verbreitet, besonders bei wissenschaftlichen Anwendungen Datenstrukturen und Algorithmen WS2005/06 Universität Konstanz 3 Kurzeinführung in C/C++ C++ Entwicklungsumgebungen Entwicklungsumgebungen: – Windows: • Microsoft Visual C++ • Borland C++ • CYGwin (Linux-artige Umgebung für Windows) – Linux/Unix: • GCC (GNU C Compiler) • G++ (GNU C++ Compiler) Datenstrukturen und Algorithmen WS2005/06 Universität Konstanz 4 Kurzeinführung in C/C++ Hello World Datenstrukturen und Algorithmen WS2005/06 5 Universität Konstanz Kurzeinführung in C/C++ Hello World in Java Kommandozeilenparapublic class Hello meter als String-Array { public static void main(String args[]) { System.out.println("Hello World!"); } } Datenstrukturen und Algorithmen WS2005/06 Universität Konstanz 6 Kurzeinführung in C/C++ Hello World in C++ #include <iostream> // Für cout using namespace std; Anzahl der Kommandozeilenparameter Kommandozeilenpara- int main(int argc, char *args[]) meter als String-Array { cout << “Hello World!” << endl; return 0; } Datenstrukturen und Algorithmen WS2005/06 Universität Konstanz 7 Kurzeinführung in C/C++ Compilierungsmodell in C++ Datenstrukturen und Algorithmen WS2005/06 Universität Konstanz 8 Kurzeinführung in C/C++ Compilierungsmodell • Präprozessor – Auflösung von Direktiven – #include, #define, #ifdef, etc. • Compiler – Konvertierung von Quellcode-Dateien in Objekt-Dateien • Linker – Erzeugung einer ausführbaren Datei Datenstrukturen und Algorithmen WS2005/06 9 Universität Konstanz Kurzeinführung in C/C++ Compilieren und Linken • Wie in Java können mehrere Quellcode-Dateien verwendet werden • Jede Quellcode-Datei ".C" muss einzeln compiliert werden, jedesmal wird eine ObjektDatei ".o" erzeugt. • Dabei können Beziehungen zwischen verschiedenen Quellcode-Dateien offen bleiben (z.B. externe Variablen). • Beim anschließenden Linken werden die ObjektDateien zu einem Binary zusammengefügt. Datenstrukturen und Algorithmen WS2005/06 Universität Konstanz 10 Kurzeinführung in C/C++ Compilierung Beispiel > ls HelloWorld.cc > g++ -c HelloWorld.cc > ls HelloWorld.cc HelloWorld.o > g++ -o HelloWorld HelloWorld.o > ls HelloWorld HelloWorld.cc HelloWorld.o > ./HelloWorld Hello World! Datenstrukturen und Algorithmen WS2005/06 Universität Konstanz 11 Kurzeinführung in C/C++ Elementare Datentypen Datenstrukturen und Algorithmen WS2005/06 Universität Konstanz 12 Kurzeinführung in C/C++ Elementare Datentypen in Java • Zahlenbereiche der Ganzzahltypen Typ Bits 8 byte short 16 32 int 64 long 16 char Minimalwert -128 -32.768 -2147483648 -9.223•1018 0 ('\u0000') Maximalwert 127 32767 2147483647 9.223•1018 65.535 ('\uffff') • Typen byte, short, int und long sind Vorzeichenbehaftet (signed) und meistens in Zweierkomplementdarstellung codiert Datenstrukturen und Algorithmen WS2005/06 Universität Konstanz 13 Kurzeinführung in C/C++ Elementare Datentypen in C++ Typ int Bits 32 unsigned int signed char unsigned char short unsigned short long long 32 8 8 16 16 64 unsigned long long 64 Datenstrukturen und Algorithmen WS2005/06 Zahlenbereich -2.147.483.648 bis 2.147.483.647 0 bis 4.294.967.295 -128 bis 127 0 bis 255 -32.768 bis 32.767 0 bis 65.635 9.223•1018 0 bis 9.223•1018 0 bis 1.845•1019 Universität Konstanz 14 Kurzeinführung in C/C++ Elementare Datentypen in C++ • Anders als in Java sind in C++ die Größen der Elementaren Datentypen maschinenabhängig • Die Größe der Datentypen lässt sich mit sizeof ermitteln: int n=sizeof(int) • In C++ gilt immer die Ungleichung sizeof(char) ≤ sizeof(short) ≤ sizeof(int) ≤ sizeof(long) Datenstrukturen und Algorithmen WS2005/06 Universität Konstanz 15 Kurzeinführung in C/C++ Klassen Datenstrukturen und Algorithmen WS2005/06 Universität Konstanz 16