Einführung in C EDV1 - 03C-Einführung Literatur EDV1 - 03C-Einführung 2 • Helmut Erlenkötter C Programmieren von Anfang an Rowohlt Taschenbuch Verlag ISBN 3-499-60074-9 19,90 DM http://www.erlenkoetter.de • Walter Herglotz Das Einsteigerseminar C++ bhv Verlags GmbH ISBN 3-89360-622-X 19,80 DM EDV1 - 03C-Einführung 3 • C ist genau so wie JAVA - nur ein wenig anders. • JAVA ist von ehemaligen C-Entwicklern mit dem Ziel entwickelt worden, eine strukturiertere und sicherere Sprache als C zu schaffen. • Sinngemäßes Zitat: „Von vielen (vorrangig Pascal-) Programmierern wird gesagt die, Sprache C sei chaotisch und unstrukturiert. Das ist auch wahr. Aber! Dadurch werden die Programmierer dazu gezwungen, ordentlich und strukturiert zu programmieren.“ Ähnlichkeiten zwischen JAVA und C EDV1 - 03C-Einführung 4 • Ausdrücke sind sehr ähnlich, gleiche Operatoren mit gleicher Wirkung, in C gibt es zusätzliche Operatoren • Der Gebrauch von Klammern und Trennzeichen ist sehr ähnlich. • /* ... */ Kommentare • Kompliziertere Objekte (Felder, Strukturen, Objekte in C++) werden über Referenzen (Zeiger, Pointer) adressiert. • Parameter werden „by value“ übergeben. Unterschiede zwischen JAVA und C EDV1 - 03C-Einführung 5 • • • • • Ein- und Ausgabe ist völlig anders. Zeiger müssen explizit genutzt werde. Dynamische Speicherverwaltung muss selbst realisiert werden. C beinhaltet eine Präprozessor. Der C-Compiler erzeugt ausführbare Programme, d.h. sie sind nicht portabel. Hardware-, Betriebssystem- oder Compileränderungen erfordern mindestens die Neuübersetzung des Programms, ggf. sogar Neuentwicklungen. • C enthält keine Standardbibliotheken für komplexe Funktionalitäten, wie z.B.: GUIs, Datenbankzugriffe, Graphikfunktionen u.s.w. Diese Funktionalitäten werden durch zusätzliche, oft kommerzielle Pakete realisiert. Diese sind selten Hardware- und Betriebssystemunabhängig. Erstes Beispiel - JAVA public class hello { EDV1 - 03C-Einführung public static void main (String args []) { System.out.println("Hello, world!\nDas ist"+ " unser erstes JAVA-Programm.\nAnzahl der"+ "Parameter : "+args.length); for (int i=0; i<args.length; i++) System.out.println("Parameter["+i+ "] = "+args[i]); } } 6 Erstes Beispiel - C int main (int argc, int* argv []) { EDV1 - 03C-Einführung int i; printf("Hello, world!\nDas ist unser erstes" "C-Programm.\nAnzahl der Parameter : %i\n", argc); for (i=0; i<argc; i++) printf("Parameter[%i] = %s\n",i,argv[i]); } 7 Primitive Datentypen EDV1 - 03C-Einführung 8 • • • • • char : ein byte langes Zeichen int : einfach genaue Festkommazahl float : einfach genaue Gleitkommazahl double : doppelt genaue Gleitkommazahl void : kein Wert, 0 byte lang • Modifikatoren: – signed : vorzeichenbehaftet (Standard) – unsigned : vorzeichenfrei – long : lange Version des Typs – short : kurze Version des Typs (Standard) Datentypen unter Windows EDV1 - 03C-Einführung 9 Typ Bytes Minimalwert Maximalwert char 1 -128 127 unsigned char 1 0 255 short int 2 -32768 32767 unsigned short int 2 0 65535 int 4 -2147483648 2147483647 unsigned int 4 0 4294967295 float 4 1.17549E-38 3.40282E+38 double 8 2.22507E-308 1.79769E+308 Unterschiede zu JAVA EDV1 - 03C-Einführung 10 • Die Länge und interne Darstellung der Datentypen hängt vom Compiler, vom Prozessor, vom Betriebssystem und von Einstellungen ab! • Alle Typen sind standardmäßig vorzeichenbehaftet auch char! • Es existiert kein boolean-Typ. • Variablen müssen immer am Anfang einer Prozedur (Methode) vereinbart werden. In C++ können Variable auch im Programmtext vereinbart werden. Logische Ausdrücke EDV1 - 03C-Einführung 11 • Es existiert kein boolean-Typ! logische Ausdrücke ergeben int-Wert. 0 : false != 0 : true • Für alle Werte gilt: Null wird als false und alle anderen Werte werden als true interpretiert. • Alle Ausdrücke, auch Zuweisungen liefern einen Wert (wie in JAVA). Alle Ausdrücke sind in Vergleichen zulässig. Z.B.: – if (i==1) { ... } else { ... } – if (i =1) { ... } else { ... } Verzweigungen, Zyklen EDV1 - 03C-Einführung 12 • Die Verwendung von folgender Konstrukte ist genau so wie in JAVA: – if – then – else – for – while – do-while – switch • Achtung! Es dürfen keine Variablen in der for – Anweisung definiert werden. Z.B.: int i; ... for (i=0; i<n; i++) ...