Home
Einführung in C/C++ - alex
Contents
1. 19 2 19 3 Bedingte Kompilation fifdef 1 9 4 Memo Pr prozessor eee lll 1 9 5 bung Pr prozessor 110 Dokumentation 000 1101 Zweck ed 28 wow 9 LAG Bi da aaa 1 10 2 Anforderungen DIN 6280 1 10 3 Erstellen einer man Seite 111 Weitere C Programme 2 eee LILI Name as a dde ae 1 112 Aufbau 2 d to LILI Fehlersuche ee SS SS AR hee ae A 1 11 4 Optimierung 1 11 5 curses Fluch oder Gegen 1 11 6 Mehr oder weniger zuf llig 2 2 222222220 1 11 7 Ein Herz f r Pointer 1 11 7 1 Nullpointer 1 11 7 2 Pointer auf Typ void 1 11 7 3 Arrays und Pointer 1 11 7 4 Arrays von Funktionspointern 1 11 8 Verarbeitung von Strings nen 1 11 9 Dynamische Speicherverwaltung malloc 1 11 10 X Window System 111 11 1 6 1 12 Obf scated C ar ae Se 1 13 Portieren von 3 KIT Regeln sororia e we sa ee dee es 1 13 2 bertragen von ALGOL nachC
2. else XDestroySubwindows mydisplay mywinl 166 KAPITEL 1 PROGRAMMIEREN IN C C win win break repaint window on expose event x case Expose if myevent xexpose count 0 XDrawlImageString mydisplay mywinl mygcl 50 50 WIN1 strlen WIN1 XDrawlImageString mydisplay mywin2 mygcl2 270 50 WIN2 strlen WIN2 XSetFont mydisplay mygcl XLoadFont mydisplay fgb 13 XDrawlmageString mydisplay mywinl mygcl 240 400 SUBWIN strlen SUBWIN XDrawlmageString mydisplay mywinl mygcl 240 420 CLEAR strlen CLEAR XDrawlImageString mydisplay mywinl mygcl 240 440 QUIT strlen QUIT XSetFont mydisplay mygcl XLoadFont mydisplay vrb 25 XDrawlImageString mydisplay mywin2 mygcl2 300 180 DELETE strlen DELETE XDrawLine mydisplay mywinl mygcl 100 100 300 300 XDrawSegments mydisplay mywinl mygcl segments num XDrawArc mydisplay mywinl mygcl 200 160 200 200 0 23040 XFillArc mydisplay mywinl mygc12 60 200 120 120 0 23040 XDrawRectangle mydisplay mywinl mygcl 60 200 120 120 break process mouse button presses case ButtonPress XSetFont mydisplay mygcl XLoadFont mydisplay vxms 37 XDrawlImageString myevent xbutton display myevent xbutton window mygcl myevent xbutton x myevent xbutton y hi strlen hi XSet
3. Das Aussehen des Textes wird durch den ANSI C Standard bestimmt letzten Endes durch die Leute die die Sprache C entwickelt haben Diese Form des Programmes wird von ge bten Programmierern verstanden und Programmquelle source genannt Die Maschine kann nichts damit anfangen Damit das Programm von einer Maschine ausgef hrt werden kann muss es bersetzt werden Hierzu wird ein weiteres Programm ein Compiler herangezogen Im Fall von C l uft der bersetzungsvorgang in mehreren Schritten ab ohne dass der Benutzer etwas davon merkt Wir verwenden hier den GNU C Compiler unter MS DOS auf einem PC Im ersten Schritt Pr prozessor werden der f r die Maschine unbedeutende Kommentar ent fernt und die mit einem Doppelkreuz beginnenden Pr prozessor Anweisungen ausgef hrt Das Ergebnis sieht leicht gek rzt so aus 1 hallo c 1 c djgpp include stdio h 1 3 1 c djgpp include sys djtypes h 1 3 12 c djgpp include stdio h 2 3 typedef void list typedef long unsigned int size t typedef struct int cnt char ptr char base int _bufsiz int _flag int fate char _name_to_remove FILE extern FILE dj_stdin __dj_stdout __dj_stderr void clearerr FILE x stream int fclose FILE x stream int feof FILE x stream int printf const char x format int vsprintf char s const char format va list ap extern FILE dj stdprn dj stdaux
4. c c statische Initialisierung eines externen Arrays ASCII Tafel Die Zahlen stellen die Nummer des Zeichens dar angefuegt HP ROMAN EXTENSION optional 7 char wert 256 Steuerzeichen Qs pue Sy 4595s 59 9 L0 2 Ey 44 5 6 IJ I8 19 20 21 22 235 24 729 206 2i 7 29 129 30 237 Space Sonder und Satzzeichen x 32 34 35 36 S97 385 39 40 41 42 43 44 45 46 47 Ziffern 65 66 67 68 69 70 71 72 73 74 Sonder und Satzzeichen x d 49 50 51 52 53 989 Grossbuchstaben 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 905 92 93 945 95 Gop 97 O99 1 00 Sonder und Satzzeichen x T5342 897 957 58 59 60 x Kleinbuchstaben x 7155 TT L8 719 80 81 892 83 84 85 86 87 88 589 90 91 92 94 35 96 97 998 99 100 Sonder und Satzzeichen x J55 895 95 93 DEL x ROMAN EXTENSION undefinierte Zeichen 0 0 0 0 O 0 0 0 0 0 0 0 O 0 0 0 0 0 O 0 0 Buchstaben an Gb 19 49 83 83 160 KAPITEL 1 PROGRAMMIEREN IN C C Zeichen x Dee 0 x Buchstaben 93 93 Zeichen x Ds Buchstaben TO 8S8 88 Zeichen Oze Oi
5. 1 13 3 bertragen von FORTRAN nach C 1 14 Exkurs ber A Zahlensysteme B Zeichens tze B 1 EBCDIC ASCII Roman8 IBM PC B2 8 B 3 ASCII Steuerzeichen BA Latin 1 ISO 8859 1 C UNIX Systemaufrufe INHALT ix D C Lexikon 198 DI Schl sselw rter 198 Di2 Oper t ren 2S Ser va nee RE 200 D 3 Standardfunktionen 201 D4 printf3 scant J Aa arten 204 D 5 Include Dateien 204 D 6 Pr prozessor Anweisungen 2 0 ee a 205 E Karlsruher Test 206 F GNU Lizenzen 214 FI GNU General Public License a 214 F2 GNU Free Documentation License eee 218 G Zeittafel 225 H Zum Weiterlesen 234 Abbildungen 11 Flussdiagramm 12 Nassi Shneiderman Diagramm 13 Syntax Diagramm Tabellen 1 1 L nge von Datentypen xi Programme und andere Quellen 1 25 1 26 1 27 1 28 1 29 1 30 1 31 1 32 1 33 1 34 1 35 1 36 1 37 1 38 1 39 1 40 1 41 1 42 1 43 1 44 1 45 1 46 1 47 1 48 1 49 1 50 LISP Programm 2 662 Sr N RS sake A 6 SCHEME Programm 6 PROLOG Programm 6 Programm 22 55 Adm Suus ES VS m RUNS 7 COBOL Programm ns a 8 JAVA Programm
6. int i for i 0 i lt MAX i printf d n zufallszahl int MOD return 0 Funktion zufallszahl x int zufallszahl int m 146 KAPITEL 1 PROGRAMMIEREN IN C C static int r 0 unsigned s if r S unsigned time time t 0 srand s r 1 rand m return r Quelle 1 85 C Programm zur Erzeugung von MAX Zufallszahlen im Bereich von 1 bis MOD mit Funktion Um die Funktion zu allszahl allgemein verwendbar zu gestalten bergeben wir den Modulus bei jedem Aufruf als Argument Da der Generator nur beim ersten Aufruf gestar tet werden soll deklarieren wir die Variable r als static initialisieren sie mit null und mi brauchen sie als Flag f r den Generatorstart mittels srand Die Initialisierung wird nur einmal beim Programmaufruf ausgef hrt Danach hat r immer den jeweils j ngsten Zufallswert der minimal 1 ist und negiert stets a1se liefert Im wirklichen Leben verlangte die Aufgabe eine C Funktion f r ein PASCAL Programm Hierzu m ssen Funktion und Hauptprogramm in getrennten Dateien vorliegen da es kei ne zweisprachigen Compiler gibt Also wurden die C Funktion isoliert und ein Rahmenpro gramm zum Testen in PASCAL geschrieben Funktion zufallszahl c zur Erzeugung von Zufallszahlen MAX Zufallszahlen von 1 bis MOD include time h include lt stdlib h gt int zufallszahl int m static int r 0 unsigned
7. define PI 3 14159 int main printf Die Zahl PI ist f n PI schreibt wie erhofft auf den Bildschirm Die Zahl PI ist 3 141590 Bei arithmetischen Makros mu man aufpassen damit sie nicht infolge von Vorrangregeln in unbeabsichtigter Weise ausgef hrt werden am besten setzt man deutliche Klammern define DELTA a b a b Hier k nnen die Ausdr cke a und b aussehen wie sie wollen und in eine beliebige Umgebung eingebettet sein das Makro wird immer als Differenz der beiden Ausdr cke aufgefa t Im Gegensatz dazu w rde eine Definition ohne Klammern wie PROD a b ax b in einem Zusammenhang wie xX n PROD r s t u zu folgender Ersetzung f hren E e S3 wie man durch manuelles Einsetzen leicht nachvollzieht und das ist vermutlich nicht das Gew nschte Mittels der undef Anweisung widerruft man eine vorhergehende define Anweisung Das kommt selten vor Hat man ein Makro und eine Funktion desselben Namens und will unbedingt die Funktion haben so undefiniert man das Makro 1 9 2 include Anweisungen Die include Anweisung f hrt dazu dass der Pr prozessor die anschlie end genannte Datei Include Datei Header Datei Definitionsdatei mit zu dem Programmtext l dt bevor dieser zum eigentlichen Compiler gelangt Die Include Dateien ihrerseits enthalten symbolische Konstanten und Makros Grunds tzlich jedoch d rfen sie alles enthalten was nicht gegen di
8. 175 1 102 FORTRAN Programm Quadratische Gleichung 176 1 103 C Programm Quadratische Gleichung 178 xiv Programme und andere Quellen Zum Gebrauch Hervorhebungen im Text werden kursiv dargestellt Titel von Ver ffentlichungen oder Abschnitten kurze Zitate oder w rtliche Rede werden im Text kursiv markiert In Aussagen ber W rter werden diese kursiv abgesetzt Stichw rter f r einen Vortrag oder eine Vorlesung erscheinen fett Namen von Personen stehen in KAPIT LCHEN Eingaben von der Tastatur und Ausgaben auf den Bildschirm werden in Schreibmaschinenschrift wiedergegeben Hinsichtlich der deutschen Rechtschreibung befindet sich das Manuskript in einem Ubergangsstadium Hinter Linux UNIX Kommandos folgt manchmal in Klammern die Nummer der betrof fenen Sektion des Referenz Handbuchs z B vi 1 Diese Nummer samt Klammern ist beim Aufruf des Kommandos nicht einzugeben Suchen Sie die englische oder franz sische bersetzung eines deutschen Fachwortes so finden Sie diese bei der erstmaligen Erl uterung des deutschen Wortes Suchen Sie die deutsche bersetzung eines englischen oder franz sischen Fachwortes so finden Sie einen Verweis im Sach und Namensverzeichnis UNIX wird hier immer als die Gattung der aus dem bei AT amp T um 1970 entwickel ten Unix hnlichen Betriebssysteme verstanden nicht als gesch tzter Name eines be stimmten Produktes Ich gebe m glichst g
9. h ngt ab von derselben include Datei und dem Modul im Quell code b c Es entsteht durch den Compileraufruf cc c b c Ein makefile ist hnlich aufgebaut wie ein Backrezept erst werden die Zutaten aufgelistet dann folgen die Anweisungen Zu beachten ist da man am Ziel startet und r ckw rts bis zu den Quellen geht Kommentar beginnt mit einem Doppelkreuz und reicht bis zum Zeilenende Leerzeilen werden ignoriert make 1 verwaltet auch verschiedene Versionen der Programmodule und pa t auf da eine neue Version in alle betroffenen Programmteile eingebunden wird Umgekehrt wird eine aktuelle Version eines Moduls nicht unn tigerweise kompiliert Warum wird im obigen Bei spiel die include Datei incl h ausdr cklich genannt Der Compiler wei doch auf Grund einer entsprechenden Zeile im Quelltext da diese Datei einzubinden ist Richtig aber make 1 mu das auch wissen denn die include Datei k nnte sich ndern und dann m s sen alle von ihm abh ngigen Programmteile neu bersetzt werden make 1 schaut nicht in die Quellen hinein sondern nur auf die Zeitstempel mt ime der Zutaten Unver nderliche include Dateien wie stdio h brauchen nicht im make ile aufgef hrt zu werden Nun ein etwas umfangreicheres Beispiel das aber l ngst noch nicht alle F higkeiten von make 1 ausreizt Kommentar wie ueblich CC bin cc CFLAGS FC usr bin f 77 LDFLAGS lcl all csumme fsumme clean 22 KAPITEL 1 PROGRAMM
10. exit 1 Textfile zurueckschreiben if fps fopen strcat argv 1 EXT w printf File s s kann nicht geoeffnet w exit 1 ter J jg tz JFE while a ap j 2 n fputc a fps fputc n fps fclose fps Ende Hauptprogramm x x Sortierfunktion Bubblesort stabil int sort int imax nt flag 0 ab i 0 J 0 k 0 char pl e p2 xtern char xap while flag 0 flag 1 k i p2 aplimax for j imax j gt k j pl aplj 1 if vergleich pl p2 lt 0 ap j p2 p2 pl else ap j pl 1 Jr flag 0 ap j p2 return 0 162 KAPITEL 1 PROGRAMMIEREN IN C C Vergleich zweier Strings bis zum ersten Whitespace x Returnwert 0 falls Strings gleich Returnwert lt 0 falls Stringl lt String2 Returnwert gt 0 falls Stringl gt String2 int vergleich char xl x2 int flag 0 while wert xx1 wert xx2 0 if NOWHITE x1 if SCHARF xx1 x2 scharfes s if SCHARF xx2 xl flag 1 xl x2 else if KOMMA x1 1 x weiteres Wort while NOCHAR xx1 Xx b while NOCHAR xx2 flag vergleich xl x2 return flag return wert x1 wert xx2 Quelle 1 94 C Programm zum Sortieren eines Textes nach den Regeln des Duden
11. ia RR anna nen a a 10 Makefile uos geo eee d dodo ob EUR E ILLOS DDR de He e ttd 21 Erweitertes Makefile 22 C Programm mit Funktionsbibliothek 26 C Funktion Mittelwert 27 G Funktion Varianz un see ae Et KR DI dete e enter 27 Makefile zum Sortierprogramm 2 2 30 Include Datei zum Sortierprogramm 30 C Programm Sortieren 31 C Funktion Bubblesort 32 C Programm Systemzeit 36 FORTRAN Programm Systemzeit 2 2 CC 36 C Programm Datei Informationen 40 C Programm Fork Bombe ee ee ene 41 C Programm mit Fehlen 43 C Programm 48 C Programm character und 1 660 53 C Programm 60 C Programm Bitweise Negation 22 2 eee 67 C Programm 68 C Programm Ausgabe per Systemaufruf lll 70 C Programm Ausgabe per Standardfunktion 71 C Programm einfachefor Schleife e 76 C Programm zusammengesetzte for Schleife 76 C Programm mit goto 78 C Programm v
12. if g ende 10 printf nZ muss durch 10 teilbar sein lu n n n ende ende Algorithmus time amp zeitl xp Pow die ersten Primzahlen ende 3 while z lt ende z 4 ttest z 2 ttest Da z pro Durchlauf um 6 erhoeht wird kann eine Primzahl zuviel berechnet werden gegebenenfalls loeschen if x p n gt ende ende 3 n 1 Berechnung der Haeufigkeit in den Klassen g ende 10 h 1 h 1 0 j 1 k 0 for i 0 i lt n itt if p i gt g h j h 1 5 k 152 KAPITEL 1 PROGRAMMIEREN IN C C j g ende 10 h 1 j i k Berechnung der Differenz benachbarter Primzahlen for i 1 i lt n itt dp x p i p i Lye d dp if dp gt dmax dmax dp dl p i d2 p i 1 time amp zeit2 achtspaltige Ausgabe auf stdout x printf NtPrimzahlen bis lu n n ende j n r n 1 8 q p for i 0 i lt j i 8 printf t 361lu t 6lu t36lu t36lu ts6lu t 6lu t 6lu ts lu n qtl q t2 q 3 qt4 qt5 qt6 qt7 q t 8 if r 0 printf Nt for i fe i f LITE letzte Zeile x printf 61uNt qti purse Ss printf n tGesamtzahl u n
13. 64 100 space 65 101 A A A 66 102 a B B B 67 103 a 68 104 D D D 69 105 E E E 70 106 F F F 71 107 G G G 72 110 H 73 111 D I I I 74 112 J J J 75 113 K K K 76 114 L L L 77 115 M M M 78 116 N N N 79 117 O 80 120 amp P P P 81 121 Q Q Q 82 122 R R R 83 123 S S S 84 124 T T T 85 125 i U U U 86 126 1 V V V 87 127 i W W W 88 130 i X X X 89 131 B Y Y Y 90 132 Z Z Z 91 133 92 134 93 135 94 136 A 95 137 s 96 140 97 141 a a a 98 142 b b b 99 143 A c c c B 1 EBCDIC ASCII ROMANS IBM PC 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 144 145 146 147 150 151 152 153 154 155 156 157 160 161 162 163 164 165 166 167 170 171 172 173 174 175 176 177 200 201 202 203 204 205 206 207 210 211 212 213 214 215 216 217 220 221 222 223 224 225 226 227 230 231 232 AO ppp ER o 55 ke D I PI Pi Pi e V O Ga vm mm D e vum ep B ow Pe aN KM em o m 5 H Frau DIR o del Pe aN KM 5 e DIR mo del 187 Q m 5 KIN 5 ad H au
14. Annahmen ber die Anordnung der Daten im Arbeitsspeicher Annahmen ber die Anzahl der signifikanten Zeichen von Namen Annahmen ber die automatische Initialisierung von Variablen den Gebrauch von stillschweigenden automatischen Typumwandlungen zum Beispiel von long nach int unter der Annahme daf die beiden Typen gleich lang sind das Mischen von vorzeichenlosen und vorzeichenbehafteten Werten die Dereferenzierung von Nullpointern Null ist keine Adresse Annahmen ber die Darstellung von Pointern Pointer sind keine Ganzzahlen Zuwei sungen von Pointerwerten an int oder 1ong Variable die Annahme einen Pointer dereferenzieren zu k nnen der nicht richtig auf eine Da tengrenze ausgerichtet ist Alignment die Annahme da Gro und Kleinbuchstaben unterschieden werden die Annahme da der Typ char vorzeichenbehaftet oder vorzeichenlos ist EOF 1 Bitoperationen mit vorzeichenbehafteten Ganzzahlen die Verwendung von Bitfeldern mit anderen Typen als unsigned Annahmen ber das Vorzeichen des Divisionsrestes bei der ganzzahligen Division die Annahme da eine extern Deklaration in einem Block auch au erhalb des Blockes gilt Diese und noch einige Dinge werden von unterschiedlichen Betriebssystemen und Compilern unterschiedlich gehandhabt und man weif nie was einem begegnet Dagegen soll man den Syntax Pr fer lint 1 befragen Pr prozessor Anweisungen und t ypedef
15. Die Variable flag die auch anders hei en kann ist ein Flag oder eine Schaltvariable d h eine Variable die in Abh ngigkeit von bestimmten Bedingungen einen Wert 0 oder nicht 0 annimmt und ihrerseits wieder in anderen Bedingungen auftritt Ein g ngiger ein wandfreier Programmiertrick 1 11 10 X Window System Das folgende Beispiel zeigt wie man unter Benutzung von X1ib Funktionen ein Programm schreibt das unter dem X Window System l uft xwindows c this program demonstrates how to use X s base window system through the Xlib interface Compiler cc xwindows c 1X11 7 include stdio h include X11 Xlib h include lt X11 Xutil h gt define QUIT Press q to quit define CLEAR Press c to clear this window define DELETE Press d to delete this window define SUBWIN Press n to create subwindow define DELSUB Press n again to delete window define WIN1 WINDOW 1 define WIN2 WINDOW 2 define WIN3 WINDOW 3 1 11 WEITERE C PROGRAMME char hallo Hallo World char hil Hi int main int argc char xxargv Display xmydisplay d structure x Window mywinl mywin2 newwin w structure x Pixmap mypixmap pixmap GC mygcl mygcl2 newgc x graphic context x XEvent myevent event to send KeySym mykey keyboard key x XSizeHints myhint window info Colormap cmap color map XColor yellow exact colorl color2 color
16. Oktalzahl Subroutine 209 altgriechisches Epos 0 alttestamentarischer Prophet 0 Zweitname 2 Busfahrer 0 Busschaffner 0 Programm zur Steuerung eines Datenbusses 2 was zum Trinken 0 Doppelstern 1 Programmiersprache 2 Stadt in Italien 1 schwedisch f r Rum 1 Read only memory 2 Dynamic random access memory 2 d nisch f r Schnaps 1 Stra enbahn 0 M dchen das oft in Discos geht 0 weiblicher Diskjockey 0 Massenspeicher 2 oberste Etage einer Firma 0 Inhaltsverzeichnis 2 Kunststil zur Zeit der Franz Revolution 0 was die Verdauung brig l t 0 Anordnung von oben 0 Wert um den ein Z hler verringert wird 2 Vorkommnis w hrend Ihres Wehrdienstes 0 Kommando im Pferdesport 0 Anweisung in einem Programm 2 Ma f r die Klopffestigkeit 0 Zahl zur Basis 8 2 Anzahl der Oktaven einer Orgel 0 Kleidungsst ck eines Priesters 0 was im Unterbewuften 0 Unterprogramm 2 210 Spoiler virtuell Klammeraffe ESC Monitor Unix Joystick Maus Icon Pascal Wysiwyg ANHANG E KARLSRUHER TEST Was zum Essen 0 Posting in den Netnews 2 Was am Auto 1 tugendhaft 0 die Augen betreffend 0 nicht wirklich vorhanden scheinbar 2 ASCII Zeichen 2 B roger t 1 Affenart in S damerika 0 Eisenbahner Spar und Creditverein 0 Eishockeyclub 0 escape Fluchtsymbol 2 Karlsruher Brauerei 0 Fernsehsendung 4 Bil
17. abgel konkr Klasse public Wuerfel a 0 Constructor void lesen cout Laenge cin a f flaeche a a a v volumen a a a protected private double a D I Hauptprogramm int main int x 0 char figur 32 cout nFlaechen und Koerperberechnung n n cout Welche Figur cin figur cout nFigur figur endl Stringvergleiche erforderlich weil in der switch Anweisung nur eine int Variable stehen kann if stremp figur Kreis x 21 if stremp figur Rechteck x 22 if stremp figur Quadrat x 23 if stremp figur Kugel x 31 if strcmp figur Quader x 32 if stremp figur Wuerfel x 33 Erzeugen des passenden Objektes f Gilt wie jede Deklaration nur innerhalb des Blockes weshalb die Methoden lesen und schreiben in jedem Block vorkommen muessen switch x case 21 Kreis f Erzeugen des Objektes f 1 6 KLASSEN 115 f lesen f schreiben break case 22 Rechteck f f lesen f schreiben break case 23 Quadrat f f lesen f schreiben break case 31 Kugel f f lesen f schreiben break case 32 Quader f f lesen f schreiben break case 33 Wuerfel f f lesen f schreiben break default cout Keine gueltige Figur endl ex
18. f 3 hallo c 2 int main printf Hallo Welt n return 0 Wir erkennen dass der Pr prozessor eine Reihe von Zeilen hinzugef gt hat Im Prinzip k nn te das auch der Programmierer machen doch so erspart man sich viel routinem ige Arbeit Im zweiten Schritt wird das C Programm in ein Assembler Programm bersetzt file hallo c 4 KAPITEL 1 PROGRAMMIEREN IN C C gcc2_compiled gnu compiled c text LCO ascii Hallo Welt 12 0 align 2 globl _main main pushl ebp vl esp ebp ll main shl LCO call printf d e 1 94 5655 l eax eax jmp L1 align 2 0x90 Li leave ret Selbst diese bereits schwerer verst ndliche Form k nnte ein erfahrener Programmierer noch von Hand schreiben Fr her gab es nichts anderes Im Gro en und Ganzen entspricht eine Anweisung in C oder FORTRAN vier Assembler Anweisungen Die Assembler Befehle wer den zu einem wesentlichen Teil durch den Hersteller der CPU bestimmt hier also durch Intel Das Assembler Programm ist an die Hardware und das Betriebssystem gebunden Nun folgt als dritter Schritt die bersetzung des Assemblerprogramms in ein Maschinen programm hier gek rzt und mit Hexadezimalzahlen anstelle der Nullen und Einsen wieder gegeben 4c01 0300 66da 7d31 da00 0000 0d00 0000 0000 0401 2e74 6578 7400 0000 0000 0000 0000 0000 3000 0000 8c00 0000 bc00 0000 0000 0000 0300 0000 2000 0000 2e64 6174 6100 0000 3000 0000 3000 0000 00
19. 0 0 Buchstaben ES T9389 95 7195 88 95 715 T9 89 O5 75 89 95 757 3 89 89 Y5 L T55 83 899 75 1833 89 95 79 93 93 99 755 19 X9 8 983 8983 99 89 93 93 95 99 99 1012 Berg x Zeichen und undefinierte Zeichen 0 0 0 20 0 D I char xap MAX P auf Zeilenanfaenge x s Hauptprogramm x int main int argc char argv int flag 0 i 0 j char a FILE fp xfps struct stat buf extern char xap l extern char xstrcat void exit Pruefung des Programmaufrufs if argc 2 printf Aufruf duden FILENAME n exit 1 Arbeitsspeicher allokieren stat argv 1 amp buf if mp malloc unsigned buf st size NULL printf Kein Speicher frei n exit 1 ap 0 mp Za Textfil inlesen fuehrende NOCHARs loeschen if fp fopen argv 1 r NULL printf File s kann nicht goeffnet werden n argv 1 exit 1 while a fgetc fp EOF if flag 0 amp amp NOCHAR a else flag 1 1 11 WEITERE C PROGRAMME xmp a if flag 0 ap t i mp else fclose fp Zeilenpointer sortieren 161 NULL rden n argv 1 if sort i 1 0 printf Sortieren ging daneben n
20. 000600 CONFIGURATION SECTION 000700 SOURCE COMPUTER RM COBOL 000800 OBJECT COMPUTER RM COBOL 000900 001000 DATA DIVISION 001100 FILE SECTION 001200 100000 PROCEDURE DIVISION 100100 100200 MAIN LOGIC SECTION 100300 BEGIN 100400 DISPLAY LINE 1 POSITION 1 ERASE EOS 100500 DISPLAY HELLO WORLD LINE 15 POSITION 10 100600 STOP RUN 100700 MAIN LOGIC EXIT 100800 EXIT Quelle 1 5 COBOL Programm Hello World Als die Computer in die Reichweite gew hnlicher Studenten kamen entstand das Bed rf nis nach einer einfachen Programmiersprache f r das Gr bste kurzum nach einem Begin ners All Purpose Symbolic Instruction Code JOHN KEMENY und THOMAS KURTZ vom Dart mouth College in den USA erf llten 1964 mit BASIC diesen Bedarf Der Gebrauch von BA SIC gilt in ernsthaften Programmiererkreisen als anr chig Richtig ist dass es unz hlige miteinander unvertr gliche BASIC Dialekte gibt dass BASIC die Unterschiede zwischen Be triebssystem und Programmiersprache verwischt und dass die meisten BASIC Dialekte kei ne ordentliche Programmstruktur erm glichen und daher nur f r kurze Programme brauch bar sind Richtig ist aber auch dass moderne BASIC Dialekte wie HP BASIC oder Quick BASIC von Microsoft ber alle Hilfsmittel zur Strukturierung verf gen und dass in keiner anderen g ngigen Programmiersprache die Bearbeitung von Strings so einfach ist wie in BA SIC In der Messwerterfassung ist es bel
21. 247 The C C Users Journal Miller Freeman Inc USA monatlich http www cuj com Dr Dobb s Journal Miller Freeman Inc USA monatlich http www ddj com Software Tools for the Professional Programmer viel C und C Und noch einige Verlage Addison Wesley Bonn http www addison wesley de Addison Wesley Longman USA http www awl com Computer und Literaturverlag Vaterstetten http www cul de Carl Hanser Verlag M nchen http www hanser de Verlag Heinz Heise Hannover http www heise de International Thomson Publishing Stamford http www thomson com Klett Verlag Stuttgart http www klett de MITP Verlag Bonn http www mitp de R Oldenbourg Verlag M nchen http www oldenbourg de O Reilly Deutschland http www ora de O Reilly Frankreich http www editions oreilly fr e O Reilly USA http www ora com Osborne McGraw Hill USA http www osborne com Prentice Hall USA http www prenhall com Sams Publishing Macmillan Computer Publishing USA http www mcp com Springer Verlag Berlin Heidelberg New York usw http www springer de Wrox Press Chicago Birmingham Paris http www wrox com 248 ANHANG H ZUM WEITERLESEN Und ber allem mein Sohn la dich warnen denn des vielen B chermachens ist kein Ende und viel Studieren macht den Leib m de Prediger 12 12
22. B13 Bringe den Inhalt von Register 13 in den Akku X Multipliziere Akku mit Register 6 CGKU30 1 Kopiere den Akku nach der Adresse die in Register 30 steht inkrementiere Register 30 0 leere Operation Quelle 1 4 Ausschnitt aus einem Programm f r die ZUSE Z 22 Man musste dem Computer in aller Ausf hrlichkeit sagen was er zu tun hatte Das war auch m hsam aber diese Art der Programmierung gibt es heute noch unter dem Namen Assemblerprogrammierung Man braucht sie wenn man die Hardware fest im Griff ha ben will also an den Grenzen Software Hardware Treiberprogramme Dar ber hinaus sind gute Assemblerprogramme schnell weil sie nichts Unn tiges tun Programmieren in Assembler setzt vertiefte Kenntnisse der Hardware voraus F r PCs gibt es von Microsoft eine Kombination von Quick C mit Assembler die es gestattet das gro e Programm in der h heren Sprache C und einzelne kritische Teile in Assembler zu programmieren Wer unbe dingt den herben Reiz der Assemblerprogrammierung kennenlernen will hat es mit dieser Kombination einfach Die meisten Programmierer wollen jedoch nicht Speicherinhalte verschieben sondern Gleichungen l sen oder W rter suchen Schon Mitte der f nfziger Jahre entstand daher bei der Firma IBM die erste h here Programmiersprache und zwar zum Bearbeiten mathe matischer Aufgaben Die Sprache war daher stark an die Ausdrucksweise der Mathematik angelehnt und zumindest f r die mathematisch gebildete Welt eini
23. Quelle 1 91 C Funktion bilder c zum Programm schiff c Die Funktionen rufen im wesentlichen weitere Funktionen auf Das Unterverzeichnis ent h lt eine eigene Include Datei und ein eigenes Makefile In gleicher Weise sind die brigen Funktionen organisiert Das Makefile des Hauptprogramms ruft Makefiles in den Unterverzeichnissen auf Wir haben also eine Hierarchie von Makefiles 4 makefile fuer schiff c include make h 4 Compiler Auswahl make include 4 Unterverzeichnisse assem bilder feuer kontur schall text 101 D gt ll t Weitere Makros OBJS schiff obj titel obj bilder obj text obj feuer obj schall obj kontur obj sound obj nosound obj delay obj Anweisungen all schiff exe install clean schiff exe schiff obj titel obj bilder_o text_o feuer_o kontur_o schall_o assem_o LD S LDFLAGS 9 OBJS wa schiff obj schiff c schiff h CC S CFLAGS schiff c titel obj titel c CC S CFLAGS titel c bilder o cd B S MAKE all ed text_o cd T 1 11 WEITERE C PROGRAMME 157 S MAKE 811 feuer o cd F MAKE GG all kontur o cd MAKI ed xx DI AA all schall_o cd S S MAKE E s all assem o cd A MAKE Gd s all install S CP schiff exe s exe clean RM bak RM obj Xn Quelle 1 92 Makefile zu schiff c Dieses Projekt ob
24. The purpose of this license is to make a manual textbook or other functional and useful document free in the sense of freedom to assure everyone the effective freedom to copy and redistribute it with or without modifying it either commercially or noncommercially Secon darily this license preserves for the author and publisher a way to get credit for their work while not being considered responsible for modifications made by others This license is a kind of copyleft which means that derivative works of the document must themselves be free in the same sense It complements the GNU General Public License which is a copyleft license designed for free software We have designed this license in order to use it for manuals for free software because free software needs free documentation a free program should come with manuals providing the same freedoms that the software does But this license is not limited to software manuals it can be used for any textual work regardless of subject matter or whether it is published as a printed book We recommend this license principally for works whose purpose is instruction or reference 1 APPLICABILITY AND DEFINITIONS This license applies to any manual or other work in any medium that contains a notice placed by the copyright holder saying it can be distributed under the terms of this license Such a notice grants a world wide royalty free license unlimited in duration to use that work under the
25. begin write Hello World newline hello world Quelle 1 2 SCHEME Programm Hello World Die gro z gige Verwendung runder Klammern f llt ins Auge aber ansonsten sind die Programme zu einfach um die Eigenheiten der Sprachen zu erkennen Die Sprache C ist trotz der Verwendung des Funktionsbegriffes keine funktionale Programmiersprache da ihr Konzept nicht anders als in FORTRAN oder PASCAL auf der sequentiellen Ausf hrung von Anweisungen beruht Programmen in logischen oder pr dikativen Sprachen wie PROLOG werden Fakten und Regeln zum Folgern mitgegeben sie beantworten dann die Anfrage ob eine Behauptung mit den Fakten und Regeln vertr glich wahr ist oder nicht Viele Denksportaufgaben legen eine solche Sprache nahe Hier das Hello World Programm in PROLOG HELLO WORLD Works with Sbp prolog hello s printstring HELLO WORLD printstring printstring H T put H printstring T Quelle 1 3 PROLOG Programm Hello World Die Umgew hnung von einem Paradigma auf ein anderes geht ber das Erlernen einer neuen Sprache hinaus und beeinflusst die Denkweise die Sicht auf ein Problem Es gibt ein zweite von der ersten unabh ngige Einteilung die zugleich die historische Entwicklung spiegelt 1 1 GRUNDBEGRIFFE 7 maschinenorientierte Sprachen Maschinensprache Assembler problemorientierte Sprachen h here Sprachen In der Fr hzeit gab es nur die v llig auf die H
26. cb fehler c gt fehler b rm fehler c mv fehler b fehler c Schlie lich l schen wir das nicht mehr ben tigte Corefile und untersuchen das Programm noch mit einigen Werkzeugen time fehler cflow fehler c cxref fehler c strings fehler nm fehler size fehler 15 1 fehler strip fehler 15 1 fehler strings 1 ist ein ziemlich dummes Werkzeug das aus einer ausf hrbaren Datei alles her aussucht was nach String aussieht Das Werkzeug nm 1 gibt eine Liste aller Symbole aus die lang werden kann strip 1 wirft aus einer ausf hrbaren Datei die nur f r den Debug ger nicht aber f r die Ausf hrung wichtigen Informationen heraus und verk rzt dadurch die Datei Abmelden mit exit Schreiben Sie in einer Programmiersprache Ihrer Wahl ich empfehle C ein Programm das eine Datei mittels creat 2 erzeugt dessen Zugriffsrechte mittels chmod 2 und seine Zeitstempel mittels ut ime 2 setzt die verwendeten Werte mittels fprintf 3 als Text in die Datei schreibt fprintf 3 finden Sie unter printf 3 Schreiben Sie ein Programm hnlich who 1 Sie brauchen dazu getut 3 und utmp 4 1 2 18 Fragen Programmer s Workbench Wozu braucht man einen Compiler Einen Linker Wasist lint Was macht make Wie sieht ein einfaches Makefile aus Wozu braucht man Debugger Was ist eine Funktionsbibliothek Vorteil Wozu braucht man eine Versionsverwaltung Wie benutzt man RCS Was
27. i 0 sscanf argv 1 slf amp c sscanf argv 1 slf amp c a 0 b ct 1 Iteration while b a gt EPS m a b 2 if m m lt 0 a m else b m Begrenzung der Anzahl der Iterationen if i gt MAX puts Zuviele Iterationen Ungenau break Ausgabe und Ende x printf Die Wurzel aus 1f ist 1f n c m printf Anzahl der Iterationen d n i exit 0 Quelle 1 54 C Programm zur iterativen Berechnung der Quadratwurzel Die Funktion die iterativ aufgerufen wird ist die Mittelwertbildung von a und b es lohnt sich nicht sie auch programmtechnisch als selbst ndige Funktion zu definieren aber das kann in anderen Aufgaben anders sein 96 KAPITEL 1 PROGRAMMIEREN IN C C 1 4 7 Rekursiver Aufruf einer Funktion Bei einer Rekursion ruft eine Funktion sich selbst auf Das ist etwas schwierig vorzustel len und nicht in allen Programmiersprachen erlaubt Die N he zum Zirkelschlu ist nicht geheuer Es gibt aber Probleme die urspr nglich rekursiv sind und sich durch eine Rekursi on elegant programmieren lassen Eine Zirkeldefinition ist eine Definition eines Begriffes die diesen selbst in der Definition enth lt damit es nicht sofort auff llt gegebenenfalls um einige Ecken herum Ein Zirkelschluss ist eine Folgerung die Teile der zu beweisenden Aussage bereits zur Voraussetzung hat Bei einer Rekursion hingegen wiederholt si
28. ndert Besitzer eines Files chroot ndert Root Verzeichnis close schlie t einen File Deskriptor creat ffnet File ordnet Deskriptor zu dup dupliziert File Deskriptor errno Fehlervariable der Systemaufrufe exec f hrt ein Programm aus exit beendet einen Prozess fcntl Filesteuerung fork erzeugt einen neuen Prozess fsctl liest Information aus File System fsync schreibt File aus Arbeitsspeicher auf Platte getaccess ermittelt Zugriffsrechte getacl ermittelt Zugriffsrechte getcontext ermittelt Kontext eines Prozesses getdirentries ermittelt Verzeichnis Eintr ge getgroups ermittelt Gruppenrechte eines Prozesses gethostname ermittelt Namen des Systems getitimer setzt oder liest Intervall Uhr getpid liest Prozess ID gettimeofday ermittelt Zeit getuid liest User ID des aufrufenden Prozesses ioctl I O Steuerung kill schickt Signal an einen Prozess link linkt ein File lockf setzt Semaphore und Record Sperren lseek bewegt Schreiblesezeiger in einem File mkdir erzeugt Verzeichnis mknod erzeugt File mount h ngt File System in File Hierarchie ein msgctl Interprozess Kommunikation nice ndert die Priorit t eines Prozesses open ffnet File zum Lesen oder Schreiben pause suspendiert Prozess bis zum Empfang eines Signals pipe erzeugt eine Pipe prealloc reserviert Arbeitsspeicher 196 profil read readlink rename rmdir rtprio semctl setgrp setuid signal stat statfs symlink sync szsconf time times truncate um
29. quitButton new QPushButton Quit this quitButton move 0 80 quitButton gt resize 200 20 und verbunden mit unserem Slot tschuess connect quitButton SIGNAL clicked this SLOT tschuess unser Slot tschuess der mit quitButton verbunden ist void HelloWidget tschuess Signal neuerText aussenden an helloLabel emit neuerText Tschuess einen Timer einrichten und starten Laufzeit 1500 ms quitTimer new QTimer this quitTimer gt start 1500 bei Ablauf des Timers wird Slot quit der Haupt applikation ausgefuehrt der das Programm beendet connect quitTimer SIGNAL timeout qApp SLOT quit 0 Hauptprogramm int main int argc char xxargv QApplication ist die Klasse fuer die Hauptapplikation argc und argv muessen uebergeben werden um z B geometry Informationen auszuwerten OApplication MeineAnwendung argc argv unser Hauptwidget HelloWidget MeinWidget setzen als MainWidget der Applikation MeineAnwendung setMainWidget amp MeinWidget und darstellen MeinWidget show hiermit wird die Hauptapplikation ausgefuehrt return MeineAnwendung exec Quelle 1 72 C Programm ghello cpp mit Verwendung des t Toolkit 1 8 BERLADEN VON OPERATOREN 127 F r das Hauptfenster werden ein neues Widget von der Widget Oberklasse QWidget abgeleitet das Beschrift
30. shift f s shift x f s for k 0 k lt i 4 k laadd f s f r flag 0 x 1 anzeigen printf n n t 4d 1 for j e 1 j gt 0 j 8 DELIS else if flag printf 91lu f s J flag 1 else printf 091u f s J r r gt 0 0 e 1 wird das naechste f 0 x s s gt 0 20 e Ende Weitermachen Anzahl der Stellen von max 100 KAPITEL 1 PROGRAMMIEREN IN C C else J GRP 1 flag 0 for J gt 0 1 if f ende j amp amp flag else if flag unsigned long z 10 flag 1 for i 1 i lt 9 itt if f ende j z flagtt z x 10 else break else flag 9 time amp z3 x Zeit holen printf n n tZahl 4d hat 4d Stellen n max flag if max gt END printf tRechnung tAusgabe brauchten 41d s n z3 z1 else printf tDie Rechnung brauchte 41d s n z2 z1 printf tDie Ausgabe brauchte 41d s n z3 22 return 0 Quelle 1 58 C Programm zur Berechnung von Fakult ten Das vorstehende Beispiel mit Microsoft Quick C und Quick Assembler f r den IBM PC bietet einen einfachen Einstieg in die Assemblerprogrammierung da das gro e Programm nach wie vor in einer h heren Sprache abgefa t ist Das Beispiel ist in einer zweiten Hinsicht
31. 12 KAPITEL 1 PROGRAMMIEREN IN C C blicherweise erzeugt ein Compiler Maschinencode f r die Maschine auf der er selbst l uft Cross Compiler hingegen erzeugen Maschinencode f r andere Systeme Das ist gele gentlich n tzlich Der Name des Programms im C Quellcode hat die Kennung c in FORTRAN und PAS CAL entsprechend f und p Das kompilierte aber noch nicht gelinkte Programm wird als Objektcode oder relozierbar relocatable bezeichnet der Dateiname hat die Kennung o oder obj Das lauff hige Programm hei t ausf hrbar executable sein Name hat keine Kennung Unter PC DOS sind die Namen ausf hrbarer Programme durch com oder exe gekennzeichnet Ein kompiliertes Programm wird auch Binary genannt im Gegensatz zum Quelltext Ein Programm ist bin r kompatibel zu einem anderen System wenn es in seiner ausf hrbaren Form unter beiden l uft Hat sich ein Programm anstandslos kompilieren lassen und erzeugt beim Aufruf die Feh lermeldung File not found dann liegt das fast immer daran dass das Arbeitsverzeichnis nicht im Befehlspfad enthalten ist Man ruft dann das neue Programm mit einem Punkt als Pfadangabe auf myprogram und veranlasst so die Shell das Programm im Arbeitsverzeichnis zu suchen Alternativ k nn te man auch den Punkt in den Pfad aufnehmen Bei den Operanden spielt es eine Rolle ob ihre Eigenschaften vom bersetzer bestimmt werden oder von Programm und bersetzer gemeinsam zur bersetzungszeit ode
32. 201 202 203 204 205 206 207 208 209 210 10011010 10011011 10011100 10011101 10011110 10011111 10100000 10100001 10100010 10100011 10100100 10100101 10100110 10100111 10101000 10101001 10101010 10101011 10101100 10101101 10101110 10101111 10110000 10110001 10110010 10110011 10110100 10110101 10110110 10110111 10111000 10111001 10111010 10111011 10111100 10111101 10111110 10111111 11000000 11000001 11000010 11000011 11000100 11000101 11000110 11000111 11001000 11001001 11001010 11001011 11001100 11001101 11001110 11001111 11010000 11010001 11010010 232 233 234 235 236 237 240 241 242 243 244 245 246 247 250 251 252 253 254 255 256 257 260 261 262 263 264 265 266 267 270 271 272 273 274 275 276 277 300 901 902 303 304 305 306 307 310 911 912 313 314 315 316 317 320 321 322 1 101 100 1 101 101 1 101 110 1 101 111 1 101 1000 1 101 1001 1 110 0 1 110 1 1 110 10 1 110 11 1 110 100 1 110 101 1 110 110 1 110 111 1 110 1000 1 110 1001 1 111 0 1 111 1 1 111 10 1 111 11 1 111 100 1 111 101 1 111 110 1 111 111 1 111 1000 1 111 1001 1 1000 0 1 1000 1 1 1000 10 1 1000 11 1 1000 100 1 1000 101 1 1000 110 1 1000 111 1 1000 1000 1 1000 1001 1 1001 0 1 1001 1 1 1001 10 1 1001 11 1 1001 100 1 1001 101 1 1001 110 1 1001 111 1 1001 1000 1 1001 1001 10 0 0 10 0 1 10 0 10 10 0 11 10 0 100 10 0 101 10 0 110 10 0 111 1
33. 249 Personenverzeichnis Aiken H 225 Andreessen M 231 Atanasoff J V 225 Babbage C 225 Backus J 47 Bardeen J 225 Berners Lee T 225 Berry C 225 Boole G 225 Brattain W H 225 Bricklin D 225 Cailliau R 225 Cerf V G 229 Codd E F 229 Crocker S 225 Diffie W 229 Eckert J P 225 Engelbart D C 225 Fibonacci 225 Frankston B 225 Gibson W 225 Heilig M 225 Hellmann M E 229 Hewlett W 225 Hollerith H 225 Hopper G 225 Hopper G M 7 Jacquard J M 225 Jobs S P 229 Kahn R E 229 Kemeny J 8 Kernighan B 9 15 Kernighan B W 236 Kilby J St C 225 Knuth D E 225 235 Kurtz T 8 Lamport L 238 Leibniz G W 225 Licklider J C R 225 Link E 225 Mauchly J W 225 Metcalfe R 225 250 Mill H 225 Minsky M L 225 Morse S F B 225 Murdock I 231 Napier J 225 Nassi I 16 Naur P 47 Nelson T 225 Neumann J von 225 Nickel K 227 228 Oikarinen J 230 Packard D 225 Pascal B 225 Pisa L von 225 Plauger P J 15 Postel J B 225 Poulsen W 225 Reis J P 225 Remington E 225 Ritchie D 9 Sanger L M 232 Schickard W 225 Shannon C E 225 232 Shneiderman B 16 Shockley W B 225 Shugart A 229 Stallman R M 225 Steinbuch K 225 232 246 Stroustrup B 9 225 242 Sutherland I E 225 Tanenbaum A S 236 243 Thompson K 9 Tichy W F 28 Torvalds L B 225 T
34. Break permitted here bph No break here nbh Index ind Next line nel Start of selected area ssa End of selected area esa Character tabulation set hts 193 Character tabulation with justification htj Line tabulation set vts Partial line forward pld Partial line backward plu Reverse line feed ri Single shift two ss2 Single shift three ss3 Device control string dcs Private use one pul Private use two pu2 Set transmit state sts Cancel character cch Message waiting mw Start of guarded area spa End of guarded area epa Start of string sos 194 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 231 232 233 234 235 236 237 240 241 242 243 244 245 246 247 250 251 252 253 254 255 256 257 260 261 262 263 264 265 266 267 270 271 272 273 274 275 276 277 300 901 902 303 304 305 306 307 310 911 912 313 314 315 316 317 gc SC ci st pm ac ns e AE o Dh o Mu gt Sa m m Pk Eh Ez EO D De De De ES ANHANG B ZEICHENS TZE Single graphic character introducer sgci Single character introducer sci Control sequence introducer csi String terminator st Opera
35. Dann k nnen wir schreiben STRING fehler Falsche Eingabe Der Compiler wei die L nge der Strings aufgrund der Zuweisung der Stringkonstanten Hingegen ist die nachstehende Deklaration fehlerhaft wie man durch Einsetzen erkennt STRING abc 16 Die Typdefinition eingesetzt ergibt char xabc 16 und das ist kein String sondern ein Array von Strings Erst zweimaliges Dereferenzieren f hrt auf den Typ char Die Schreibweise typedef char 16 STRING STRING abc die dieses Problem l sen w rde haben wir zwar in einem Buch gefunden wurde aber nicht von unserem Compiler angenommen Ist man darauf angewiesen dass ein Datentyp eine bestimmte Anzahl von Bytes um fasst erleichtert man das Portieren indem man einen eigenen Typnamen deklariert und im weiteren Verlauf nur diesen verwendet Bei einer Portierung ist dann nur die Typdefinition anzupassen Es werde eine Ganzzahl von vier Byte L nge verlangt Dann deklariert man typedef int INT4 Ganzzahl von 4 Bytes INTS i j k und ndert bei Bedarf nur die typedef Zeile Zweckm ig packt man die Typendefinition in eine private include Datei die man f r mehrere Programme verwenden kann 1 3 6 9 Speicherklassen In C gibt es vier Speicherklassen storage classes auto extern register static Die Speicherklasse geht dem Typ in der Deklaration voraus static int x Die Klasse auto ist die Defaultklasse f r lokale Variable und braucht nicht eigens an
36. Federal Criteria for Information Technology Security ftp ftp ciw uni karlsruhe de pub docs net secur fcvoll ps gz ftp ftp ciw uni karlsruhe de pub docs net secur fcvol2 ps gz 1992 2 B nde mit zusammen 500 S Postscript Die amtlichen amerikanischen Sicherheitsvorschriften Linux Hacker s Guide Markt Technik M nchen 1999 816 S F L Bauer Kryptologie Springer Berlin Heidelberg 1994 369 S R L Brand Coping with the Threat of Computer Security Incidents A Primer from Prevention through Recovery ftp ftp ciw uni karlsruhe de pub docs net secur primer ps gz 1990 44 S Postscript D A Curry Improving the Security of Your UNIX System ftp ftp ciw uni karlsruhe de pub docs net secur secdoc ps gz 1990 50 S Postscript Hilfe f r UNIX System Verwalter mit Checkliste S Garfinkel G Spafford Practical Unix Internet Security O Reilly Sebastopol 1996 971 S Breit angelegte verst ndliche Einf hrung in Sicherheitsthemen B Schneier Angewandte Kryptographie Addison Wesley Bonn 1996 844 S M Schumacher U Roedig M L Moschgath Hacker Contest Springer Berlin Heidelberg 2003 300 S 16 Computerrecht Newsgruppen comp society privacy comp privacy comp patents alt privacy de soc recht de soc datenschutz World Intellectual Property Organization WIPO http www wipo int Juristisches Internetprojekt Saarbr cken http www jura uni sb de Netlaw Library Universit t M nster http
37. Im Beispiel a b c wird der Wert c der Variablen b zugewiesen und dann das Ergebnis dieser Zuweisung der Wert b der Variablen a Die Reihenfolge einer Auswertung wird also zuerst durch den Rang und dann durch die Assoziativit t der Operatoren bestimmt Im Anhang in Abschnitt D 2 Operatoren auf Seite 200 sind alle Operatoren von C C mit Rang und Assoziativit t aufge listet Bei Funktionsaufrufen ist ungewiss in welcher Reihenfolge etwaige Argumente ausge wertet werden Im Beispiel int n 5 printf d Sd n n n n 1 3 BAUSTEINE EINES QUELLTEXTES 73 ist unsicher ob n erst inkrementiert und dann quadriert wird oder umgekehrt Das Ergebnis ist entweder 6 25 oder 6 36 Die Argumente von printf arbeitet der eine Compiler von rechts ab der andere von links Nur durch eine eindeutige Schreibweise int n 5 ttn printf d Sd n n n n l sst sich ein eindeutiges Ergebnis erreichen hier 6 36 In der Mathematik gibt es nur eine Leserichtung n mlich von links nach rechts ber die Reihenfolge der Rechenschritte besagt die Leserichtung nichts Die obige mehrfache Zuwei sung w re als Gleichung unzul ssig bei der Addition spielt die Reihenfolge keine Rolle f r das Ergebnis Mi achtung von Rang und Assoziativit t f hrt zu schwierig aufzudeckenden logischen Fehlern im Programm Syntaktisch ist das Programm richtig es tut nur etwas anderes als sich der Programmierer vorgestellt hat Deshalb ist dringen
38. Java Applets von Webseiten die auf dem Computer des Benutzers ausgef hrt werden 168 KAPITEL 1 PROGRAMMIEREN IN C C define MAX_QUERY_LEN 4095 gegen Missbrauch struct list item struct list item next char xkey xvalue D I struct array_item char xkey value void unescape str char eigene Funktionen char xget query struct list item parse_list char struct array item parse_array char Quelle 1 97 Include Datei cgi h zum Programm cgi test c x cgi_test c Hauptprogramm Teil einer Implementation der CGI Schnittstelle in C normalerweis ntweder linked list oder array verwenden finclude stdio h finclude string h include cgi h int main char list_query array_query struct list item param_list struct array item param array hiermit beginnt die Ausgabe x printf Content Type text plain 015 012 015 012 query string ermitteln und duplizieren list query get query if list query NULL printf Keine Parameter Mn return 0 array_query strdup list_query linked list erzeugen 7 param list parse list list query printf Parameter per Linked List n while param list NULL printf s s n param list key param list value param list param list next array erzeugen param array parse_array array_query printf nParameter per A
39. Name C 46 48 173 Operanden N 49 Programm N 137 Nassi Shneiderman Diagramm 16 Nebenwirkung 78 Negation 172 Newton Verfahren 123 nm 45 nroff 1 136 NULL 58 148 Nullpointer 58 145 148 173 Obfuscated C 171 Objective C 10 Objekt C 109 Objekt Variable 49 Objektcode 4 11 12 Oktalsystem 180 open 38 69 open 2 104 Operand 49 Operation arithmetische O 65 Bit O 68 173 Grund O 16 logische O 66 Modulo O 51 Pointer O 68 Relations O 67 zul ssige O 50 SACHVERZEICHNIS Operator Zeichen 46 64 200 Optimierung 140 Parameter aktueller P 82 formaler P 82 bergabe 82 PASCAL 8 Patch 12 pc 19 Pflichtenheft 15 Platzhalter 82 Pointer dangling P 147 Darstellung 173 far P 108 huge P 108 near P 108 Nullpointer 58 148 173 P Arithmetik 58 P auf Funktion 82 153 P auf void 53 148 Pointer 49 56 68 147 portieren 173 POSIX 34 post HTML 167 Pr prozessor 3 11 46 Pr prozessor C 129 205 Primzahl 127 150 printf 70 72 printf 3 104 204 Private Member 110 Problem Management 33 prof 25 Profiler 24 Programm Aufgabenstellung 13 14 benutzerfreundliches P 13 Bottom up Entwurf 16 Codierung 10 13 15 Dokumentation 134 Effizienz 13 Entwurf 13 fehlerfreies P 12 Grund Operation 16 Hauptprogramm 137 P ndern 12 Patch 12 Pflege 13 Programm 137 programmiererfreundliches P 13 Prototyp 16 robustes P 12 Struktur 15 16 Test 13 Top down Entwurf 15 Version 12
40. ajl 7 a 2 e 1 a4 2 a 2 21 a 4 3 e 2 a 3 a 3 2 Der Pfeil ist zu lesen als zeigt auf oder ist die Adresse von Der Wert des Pointers a die Adresse also unter der die Zahl 4 abgelegt ist ist irgendeine kaum verst ndliche und v llig belanglose Hexadezimalzahl Der Wert der Variablen a 0 hingegen ist 4 und das aus Gr n den die im wirklichen Leben zu suchen sind Ein Zugriff auf das nicht deklarierte Element 4 f hrt sp testens zur Laufzeit auf einen Fehler Bei der Deklaration des Arrays muss seine L nge bekannt sein Sp ter wenn es nur um den Typ geht wie bei der Parameter bergabe reicht die Angabe int xa Ein String ist ein Array von Zeichen characters abgeschlossen mit dem unsichtbaren ASCII Zeichen Nr 0 hier dargestellt durch amp Infolgedessen muss das Array immer ein Ele ment l nger sein als der String Zeichen enth lt Wir deklarieren einen ausreichend langen String und belegen ihn gleichzeitig mit dem Wort UNIX char s 6 UNIX Die L ngenangabe 6 k nnte entfallen da der Compiler aufgrund der Zuweisung der String konstanten die L nge wei Der String ist unn tig lang aber vielleicht wollen wir sp ter ein anderes Wort darin unterbringen Das Array sieht dann so aus 1 3 BAUSTEINE EINES QUELLTEXTES 59 Pointer Adresse Speicher Wert Variable 8 m U xs s 0 U 8 1 o N s 1 s 1 N s 2 I s 2 s 2 I s 3 o
41. das diese Klasse aussendet Pointer fuer verwendet private QLabel xhelloLabel Widgets QPushButton quitButton QTimer xquitTimer ein Slot private slots void tschuess 1 Quelle 1 71 der spaeter mit quitButton verbunden wird Include Datei zu qhello cpp qhello cpp Beispiel fuer include qapplication h include lt qwidget h gt include lt qlabel h gt finclude qpushbutton h include lt qtimer h gt an dieser Stelle wird das moc Fil es enthaelt die Prototypen die Programmierung mit Qt benoetigt jedes Qt Programm fuer unser Hauptfenster fuer die Beschriftung fuer den Quit Button fuer zeitverzoegertes Beend n ingebunden fuer unsere Klasse include qhello moc 126 KAPITEL 1 PROGRAMMIEREN IN C C die Konstruktorfunktion unserer Klasse HelloWidget HelloWidget OWidget parent const char name QWidget parent name die Groesse des Hauptfensters setzen resize 200 100 eine Beschriftung wird erzeugt und plaziert helloLabel new QLabel hello world this helloLabel gt move 60 30 Signal neuerText dieses Objekts wird mit helloLabel verbunden setText ist Slot zum Setzen des Beschriftungstextes connect this SIGNAL neuerText const char helloLabel SLOT setText const char quitButton wird erzeugt und plaziert
42. gegeben zu werden Variablen dieser Klasse leben nur innerhalb des Bereiches in dem sie deklariert wurden und sterben beim Verlassen des Bereiches der von ihnen belegte Speicher wird freigegeben Eine globale Variable darf in einem Programm nur einmal deklariert werden Erstreckt sich ein Programm ber mehrere getrennt zu kompilierende Dateien so darf sie nur in einer der Dateien deklariert werden Da aber der Compiler auch in den brigen Dateien den Typ der Variablen kennen muss wird die Variable hier als extern deklariert Globale Variable sind per Default extern Funktionen geh ren stets der Speicherklasse extern an 1 3 BAUSTEINE EINES QUELLTEXTES 63 register Variable werden nach M glichkeit in Registern nahe dem Rechenwerk gehal ten und sind damit schnell verf gbar Ansonsten verhalten sie sich wie auto Variable Sie m ssen vom Typ int oder char sein Eine typische Anwendung sind Schleifenz hler Optimie rende Compiler ordnen von sich aus einige Variable dieser Speicherklasse zu Auf register Variable kann der Referenzierungs Operator amp nicht angewendet werden Es ist auch unsi cher ob das System der register Anweisung folgt Am besten verzichtet man auf diese Speicherklasse Lokale Operanden gelten und leben nur innerhalb des Blockes in dem sie deklariert wur den Durch die Zuordnung zur Speicherklasse static verl ngert man ihre Lebensdauer nicht ihren Geltungsbereich ber das Ende des Blockes hinaus Bei einem
43. hrliche deutsche oder englische Anleitungen zu finden sind Unter den Namen WinCVS und MacCVS liegen Fassungen f r weitere Betriebssysteme im Netz Der Oberbegriff des ganzen Gebietes lautet Software Configuration Management SCM oder allgemeiner Configuration Management CM Lassen Sie einmal eine Suchmaschine darauf los es gibt mehrere freie oder kommerzielle Produkte sowie bersichten Einf hrun gen und Tutorials dazu Ist die Entwicklung einer Software oder eines Manuskriptes vorl ufig abgeschlossen geht es an die Pflege Dazu geh rt unter anderem das Management der im Betrieb der Software auftauchenden Probleme Auch hierf r gibt es Werkzeuge beispielsweise gnats aus dem GNU Projekt Aber das sprengt den Rahmen dieses Buches CASE bedeutet Computer Aided Software Engineering An sich ist das nichts Neues beim Programmieren hat man schon immer Computer eingesetzt Das Neue bei CASE Tools wie SoftBench von Hewlett Packard besteht darin da die einzelnen Programmierwerkzeuge wie syntaxgesteuerte Editoren Compiler Linker Builder make 1 Analysewerkzeuge Debug ger Versionskontrollsysteme sowie die Dokumentation unter einer einheitlichen heutzutage grafischen Oberfl che hier das X Window System und Motif zusammengefa t werden Allgemein hei t das Ganze Programmier oder Entwicklungsumgebung Integrated develop ment environment IDE Damit zu arbeiten ist die moderne Form des Programmierens und kann effektiv sein
44. nach jeder Teilstrecke die Zwischenergebnisse auf dem Bildschirm ausgibt in der Endversion nur das Gesamtergebnis Schreiben Sie ferner alle Stringkonstanten in eine Include Datei von der Sie eine deut sche und eine englische oder franz sische Fassung herstellen Beim Compiler Aufruf soll mit tels einer Option die Sprache ausgew hlt werden 1 10 Dokumentation 1 10 1 Zweck Die Dokumentation dient dazu ein Programm im Quellcode einem menschlichen Leser verst ndlich zu machen L ngere undokumentierte Programme sind nicht nachzuvollziehen 1 10 DOKUMENTATION 135 Eine Dokumentation geh rt zu jedem Programm das l nger als eine Seite ist und l nger als einen Tag benutzt werden soll Andererseits z hlt das Schreiben von Dokumentationen nicht zu den Lieblingsbesch f tigungen der Programmierer das Erfolgserlebnis fehlt Wir stellen hier einige Regeln auf die f r Programme zum Eigengebrauch gelten bei kommerziellen Programmen gehen die Forderungen weiter Die erste Gelegenheit zum Dokumentieren ist der Kommentar im Programm Man soll reichlich kommentieren aber keine nichtssagenden Bemerkungen einflechten Wenn der Kommentar etwa die H lfte des ganzen Programms ausmacht ist das noch nicht bertrie ben 1 10 2 Anforderungen DIN 66 230 Zur Dokumentation legt die Norm DIN 66 230 Programmdokumentation Begriffe und Regeln fest Eine weitere Norm ist der ANSVIEEE Std 1063 1987 Standard for Software User Docu mentation in
45. nglich und die Wahrscheinlichkeit etwas zu vergessen steigt Hier hilft make 1 Man schreibt einmal alle Angaben f r den Compi ler in ein makefile auch Makefile und ruft dann zum Kompilieren nur noch make 1 auf F r Manuskripte ist make 1 ebenfalls zu gebrauchen Statt Makefiles lie en sich auch Shellskripte einsetzen die St rke von make 1 liegt jedoch im Umgang mit Dateien unter Beachtung des Zeitstempels mt ime j ngster schreibender Zugriff Werkzeuge wie make 1 werden als Builder bezeichnet Man lege f r das Projekt ein eigenes Unterverzeichnis an denn make 1 sucht zun chst im Arbeits Verzeichnis Das makefile beschreibt die Abh ngigkeiten dependencies der Programmteile voneinander und enth lt die Kommandozeilen zu ihrer Erzeugung Ein ein faches makefile sieht so aus Zeilen mit Kommandos m ssen durch einen Tabulatorstop nicht durch Spaces einger ckt sein Dom a o b o cc a o b o o pgm 2 0 Bnel hs ac CC RE ud Boos iner h bec GG bcG Quelle 1 7 Einfaches Makefile und ist folgenderma en zu verstehen Das ausf hrbare Programm Ziel Target namens pgm h ngt ab von den Modulen im Objektcode a o und b Es entsteht durch den Compileraufruf cc a o b o o pgm Das Programmodul a o h ngt ab von der include Datei incl h und dem Modul im Quellcode a c Es entsteht durch den Aufruf des Compilers mit cc c a c Die Option cunterbindet das Linken Das Programmodul
46. ware berholt Es galt umfangreiche Programme schnell und preiswert herzustellen und da bei noch deren Zuverl ssigkeit sicherzustellen hnlich wie heutzutage Autos produziert wer 6Das vergleichsweise schlanke Buch von K amp R ist die erste Lekt re sobald man ein fache C Programme schreiben kann ber die Beschreibung von C hinaus birgt es wert volle allgemeine Hinweise zum Programmieren Anmerkungen hat STEVE SUMMIT unter http www eskimo com Scs cclass knotes top html ver ffenlicht Den Standard kann man sich bei www ansi org gegen 18 US Dollar im pdf Format her unterladen rund 500 Seiten Auf der Titelseite steht Printed in the United States of America auf dem R cktitel Printed in Switzerland Die Wahrheit in meinem Fall Printed in Karlsru he Hoffentlich geht das nicht so weiter 8 Es gibt einen International Obfuscated C Code Contest einen Wettbewerb um das un bersichtlichste C Programm siehe Abschnitt 1 12 Obfuscated C auf Seite 171 10 KAPITEL 1 PROGRAMMIEREN IN C C den Zwei Schlagw rter kamen auf Objektorientierung und Software Engineering Ent kleidet man sie der merkantilen bertreibungen bleibt immer noch ein brauchbarer Kern von Ideen brig Der Typbegriff wurde zur Klasse erweitert Eine Klasse enth lt Variable und zugeh rige Funktionen die nun Methoden genannt werden Klassen k nnen im Gegensatz zum Typ vom Programmierer definiert werden Sie bilden eine Hierarchie wobei h here Klassen
47. write 6 102 a b E call by reference s psr a b write 6 105 s write 6 102 a b 100 format Bitte die beiden Summanden eingeben 102 format Die Summanden sind 216 103 format Die Summe direkt ist I8 104 format Die Summe ist I8 105 format Die Summe ist I8 end Quelle 1 44 FORTRAN Programm das Parameter by value und by reference an PASCAL Funktionen bergibt Die FORTRAN Compiler Anweisung SALIAS veranla t den Compiler der jeweiligen Funktion die Parameter entgegen seiner Gewohnheit by value zu bergeben Zum guten Schlu die PASCAL Hauptprogramme PASCAL Programm das C Funktionen aufruft Compiler pc psummec psummec p csv o csr o program psummec input output var a b s integer function csv x y integer integer call by value external C 88 KAPITEL 1 PROGRAMMIEREN IN C C function csr var x y integer integer call by ref external C begin writeln Bitte die beiden Summanden eingeben readin a readin b write Die Summanden sind write a writeln b s a b write Die Sum s csv a b write Die Summe ist writeln s write Die Summanden sind write a writeln b m m me direkt ist writeln s S csr a b write Die Su write Die Su end me ist writeln s manden sind write a writeln b Quelle 1 45 PASCAL Programm das
48. 0 ver ffentlicht 9 GB Festplatten kosten 500 DM Gigabit Ethernet Standard IEEE 802 3z verabschiedet JONATHAN B POSTEL einer der Apostel des Internet und Autor vieler RFCs gestorben Siehe RFC 2441 Working with Jon und RFC 2468 I Remember IANA Das Y2K Problem die Jahrtausendwende besch ftigt die Gem ter weil die Programmierer fr herer Jahrzehnte mit den Bits knauserten Der RFC 2550 l st auch gleich das Y10K Problem Debian GNU Linux Version 2 1 slink kommt heraus Betreiber gro er Suchmaschinen sch tzen die Anzahl der Web Seiten weltweit auf 1 Milliarde LINUS B TORVALDS wird Ehrendoktor der Universit t Stockholm Das Y2K Problem hat sich praktisch nicht ausgewirkt Den 29 Februar 2000 haben wir auch gut berstanden einen Schalttag nach einer Regel die nur alle 400 Jahre angewendet wird Debian GNU Linux Version 2 2 potato kommt heraus 6500 Pakete Microsoft Windows 2000 ist erh ltlich Ein Macro Virus namens Love Letter sorgt f r Aufregung au erhalb der Linux UNIX Welt Der Intel Pentium kommt bei einer Taktfrequenz von 1 5 GHz an Zum Jahresende 2 Mio Internet Hosts in Deutschland Quelle RIPE CLAUDE ELWOOD SHANNON gestorben gilt als Erfinder des Bits und Begr nder der Informationstheorie In den USA starten JIMMY DONAL WALES und LAWRENCE MARK SANGER die Wikipedia eine internationale Online Enzyklop die auf der Grundlage eines Wikis Die Einf hrung der Euro W hrung f hrt zu einem neu
49. 120 double 52 einfacher Typ 50 erkl ren cdec1 50 externer T 63 float 52 ganze Zahl 51 Gleitkommazahl 52 idotprecision 120 imatrix 119 int 51 interval 118 ivector 119 long 51 long double 52 Pointer 56 real 118 rmatrix 119 rvector 119 short 51 Struktur 54 T eines Operanden 49 50 Typumwandlung 64 71 140 Union 56 unsigned 51 void 53 volatile 50 zusammengesetzter T 53 typedef C 61 types h 38 berladung 65 bersichtlichkeit 12 130 140 Jhr 35 Jmgehung 12 nion C 56 nsigned C 51 nterprogramm 34 utime 45 utmp 45 EE E E c varargs 92 Variable globale V 62 lokale V 62 63 register V 62 Vereinbarung 49 Vererbung Klassen 111 Vergleich 67 Version 12 Versionskontrolle 28 Verzweigung C 74 void C 53 volatile C 50 SACHVERZEICHNIS Vorrang C 72 Waterfall approach 13 Wert 49 Wertebereich 50 Wert bergabe 82 while Schleife C 75 who 45 Widget 107 124 Windows Microsoft 124 woody 232 Wort reserviertes 48 Wortsymbol 48 write 69 write 2 104 xdb 23 44 Xlib 107 xstr 28 Xt 107 X Window System 124 Zahl ganze Z 51 Gleitkommazahl 52 komplexe Z 10 177 Primzahl 127 150 Pseudo Zufallszahl 147 Zufallszahl 144 Zahlensystem 180 Zeichensatz ASCII 185 EBCDIC 185 IBM PC 185 Latin 1 191 ROMANS 185 Zeilenkommentar C 48 Ziel make 21 Zirkeldefinition 96 Zirkelschluss 96 Zufallszahl 144 ZUSE 222 7 ZUSE Z 22 225 Zuweisung 64 73 Zweierkomp
50. 34 KAPITEL 1 PROGRAMMIEREN IN C C 1 2 9 Systemaufrufe 1 2 9 1 Was sind Systemaufrufe Dem Programmierer stehen zwei Hilfsmittel zur Verf gung um seine W nsche auszu dr cken die Schl sselw rter Wortsymbole der Programmiersprache die Systemaufrufe des Betriebssystems Die Schl sselw rter keyword mot cl der Programmiersprache C C FORTRAN oder PASCAL sind auch unter verschiedenen Betriebssystemen PC DOS OS 2 oder UNIX die selben Sie geh ren zur Programmiersprache das hei t zum Compiler Die Systemaufrufe system call system primitive fonction syst me eines Betriebssystems UNIX sind f r al le Programmiersprachen C FORTRAN PASCAL COBOL dieselben Sie geh ren zum Be triebssystem Man findet auch die Bezeichnung Kernschnittstellenfunktion die besagt dass ein solcher Aufruf sich unmittelbar an den Kern des Betriebssystems richtet Der Kreis der Systemaufrufe liegt fest und kann nicht ohne Eingriffe in den Kern des Betriebssystems ver ndert werden Da UNIX zum gro en Teil in C geschrieben ist sind die Systemaufrufe von UNIX C Funktionen die sich in ihrer Syntax nicht von eigenen oder fremden C Funktionen unterscheiden Deshalb m ssen auch FORTRAN oder PASCAL Programmierer etwas von der Programmiersprache C verstehen Im Handbuch werden die Systemaufrufe in Sektion 2 beschrieben Bei POSIX konformen Betriebssystemen spricht man statt von Systemaufrufen besser von POSIX Funktionen da de
51. 350 951 352 353 354 355 356 357 360 361 362 363 364 365 366 367 370 371 372 373 374 375 376 377 oe aes e NKM Sim 0 5 e QOO QO OQ C C CC e wO EE O p 8 c PH Li C ux Tor QO Or ey m 189 Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik ll 2m amp 8 Ae o Ma IA IV H Haken jam 50 D eo Q Secws lt K Falls das Ein oder Ausgabeger t einen deutschen 7 Bit ASCII Zeichensatz enth lt sind fol gende Ersetzungen der amerikanischen Zeichen durch deutsche Sonderzeichen blich Nr 91 92 US Zeichen linke eckige Klammer Backslash US ASCII German A ASCII 190 ANHANG B ZEICHENS TZE 93 rechte eckige Klammer 123 linke geschweifte Klammer 124 senkrechter Strich 125 rechte geschweifte Klammer 126 Tilde fj Achtung Der IBM PC und Ausgabeger te von Hewlett Packard verwenden keinen 7 Bit ASCII Zeichensatz sondern eigene 8 Bit Zeichens tze die die Sonderzeichen unter Num mern h her 127 enthalten siehe vorhergehende Tabelle B 3 ASCII Steuerzeichen Die Steuerzeichen der Zeichens tze dienen der bermittlung von Befehlen und Informatio nen an das empfangende Ger t und nicht der Ausgabe eines sicht oder druckbaren Zeichens Die Ausgabeger te kennen in der Regel jedoch einen Modus tr
52. 8 aus zumindest auf Maschinen die den 7 bit ASCII Zeichensatz verwenden Der Zweck der bitweisen Operation ist der Umgang mit Informatio nen die nicht in einem Wert als Ganzem sondern in einzelnen Bits stecken Das kommt bei der Systemprogrammierung vor Beispielsweise l sst sich die Information ob ein Ger t ein oder ausgeschaltet ist in einem Bit unterbringen In der Anwendungsprogrammierung ist man meist gro z giger und spendiert eine ganze Integer Variable daf r Merke Ausdrucksweise logische Operationen und die noch folgenden Vergleichs Operationen haben ein Ergebnis das wahr oder falsch lautet nicht 0 oder 0 Bitweise lo gische Operationen k nnen jedes beliebige Ergebnis im Bereich der ganzen Zahlen haben 1 3 7 5 Vergleiche Die Vergleichs oder Relations Operationen sind gleich weil schon die Zuweisung ist ungleich kleiner lt kleiner gleich lt gr er gt gr er gleich gt Bedingte Bewertung Das Ergebnis eines Vergleichs ist ein boolescher Wert also true oder false beziehungsweise in C die entsprechenden Zahlen nicht 0 oder 0 Ein h ufiger Fehler ist die Verwendung des einfachen Gleichheitszeichens f r die Abfrage auf Gleichheit Dieser Fehler ist schwierig zu erkennen da der fehlerhafte Ausdruck syntak tisch korrekt ist er bedeutet nur eine Zuweisung an Stelle des beabsichtigten Vergleichs Tt Ge OL vus statt x 0 Der Compiler protestiert nicht Da in V
53. Aufgaben be merkbar F r Hallo Welt Programme ist sie einige Nummern zu gro Wir verweisen daher auf das Buch von ROBERT ROBSON und auf unsere Technik Seite im WWW 1 7 3 C XSC 1 7 3 1 Was ist C XSC F r numerische Aufgaben wurde im Institut f r Angewandte Mathematik der Universi t t Karlsruhe eine Klassenbibliothek C XSC als Erg nzung eines C Compilers entwi ckelt Das K rzel XSC ist als Extended Scientific Computing zu deuten Die wichtigsten Bestandteile von C XSC sind Arithmetik reeller und komplexer Zahlen sowie Intervallarithmetik mit mathematisch bestimmten Eigenschaften dynamische Vektoren und Matrizen mit zur Laufzeit ver nderbarer Gr e Teilfelder Subarrays aus Vektoren und Matrizen arithmetische Operatoren und mathematische Standardfunktionen von hoher bekann ter Genauigkeit dynamische Langzahlarithmetik mit zugh rigen Standardfunktionen Rundungskontrolle bei der Ein und Ausgabe Behandlung bestimmter Fehler z B berschreiten der Indexgrenzen Bibliothek mit Routinen zur L sung von Standardproblemen der numerischen Analysis Zusammen mit der Klassenbibliothek C XSC geht C in der Behandlung numerischer Auf gaben ber FORTRAN und andere Programmiersprachen hinaus 1 7 3 2 Datentypen Operatoren und Funktionen C XSC stellt folgende einfache numerische Datentypen zur Verf gung real interval complex cinterval complex interval samt den zugeh rigen arithmetisc
54. B J Cox A J Novobilski Object Oriented Programming Addison Wesley Boston 1991 270 S Objective C P A Darnell P E Margolis C A Software Engineering Approach Springer Berlin Heidelberg 1996 500 S H M Deitel P J Deitel C How to Program Prentice Hall Englewood Cliffs 1994 926 S Enth lt auch C Ausgepr gtes Lehrbuch J Hanly E Koffman Problem Solving and Program Design in C Addison Wesley Boston 1999 276 S J Hanly E Koffman C Program Design for Engineers Addison Wesley Boston 2001 679 S S P Harbison G L Steele C A Reference Manual Prentice Hall Englewood Cliffs 1995 470 S Vielfach empfohlenes Nachschlagewerk K R und ANSI ISO T Jensen A Tutorial on Pointers and Arrays in C http www netcom com tjensen ptr pointers htm 241 N M Josuttis The C Standard Library A Tutorial and Reference Addison Wesley Boston 1999 832 S http www josuttis de libbook B W Kernighan D M Ritchie The C Programming Language Deutsche Ubersetzung Programmieren in C Zweite Ausgabe ANSI C Hanser Verlag Miinchen 1990 283 S Standardwerk zur Programmiersprache C Lehrbuch R Klatte u a C XSC Springer Berlin Heidelberg 1993 269 S C Klassenbibliothek fiir wissenschaftliches Rechnen A Koenig Accelerated C Practical Programming by Example Addison Wesley Boston 2000 352 S S Kuhlins M Schader Die C Standardbibliothek Springer Berlin Heidelberg 2002 4
55. Ein absoluter Debugger wie der adb 1 bezieht sich dabei auf das lauff hige Programm im Arbeitsspeicher nicht auf den Quellcode und ist somit f r die meisten Aufgaben wenig geeignet Ein symbolischer Debugger wie der sdb 1 der GNU gdb 1 oder der xdb 1 bezieht sich auf die jeweilige Stelle im Quelltext Debugger sind m chtige und hilfreiche Werkzeuge Manche Programmierer gehen so weit da sie das Schreiben eines Programms als Debuggen einer leeren Datei bzw eines wei en Blattes Papier ansehen In der bung wird eine einfache Anwendung des Debuggers vorgef hrt Falls Sie auch mit dem UNIX Debugger nicht alle W rmer in Ihrem Programm finden und vertreiben k nnen m chten wir Ihnen noch ein altes Hausrezept verraten das aus ei ner Handschrift des 9 Jahrhunderts stammt Das Rezept ist im Raum Wien M nchen entstanden und unter den Namen Contra vermes oder Pro nescia bekannt Leider ist die README Datei welche die Handhabung erkl rt verlorengegangen Wir schlagen vor die Zei len als Kommentar in das Programm einzuf gen Hier der Text Gang t nesso mid nigun nessiklinon t fana themo marge an that ben fan th mo b ne an that fl sg t fan themo fl sgke an thia h d t fan thera h d an thesa str la Drohtin Uuerthe s 1 2 5 Profiler time gprof Profiler sind ebenfalls Programme unter deren Kontrolle ein zu untersuchendes Programm abl uft Ziel ist die Ermittlung des Zeitver
56. Fall dass die Anforderungen an das Programm zu Beginn noch verschwommen sind ist es zweckm ig m glichst rasch ein lauff higes Grundger st ein Skelett zu haben Mit diesem kann man dann spielen und Erfahrungen sammeln in einem Stadium in dem der Programmcode noch berschaubar und leicht zu ndern ist Bei einem solchen Prototyp sind nur die benutzernahen Funktionen halbwegs ausge baut die datennahen Funktionen schreiben vorl ufig nur ihren Namen auf den Bildschirm Von einem menugesteuerten Vokabeltrainer beispielsweise schreibt man zun chst das Menu system und l sst die Funktionen die die eigentliche Arbeit erledigen leer oder beschr nkt sie auf die Ausgabe ihres Namens Damit liegt die Programmstruktur das Knochenger st fest Gleichzeitig macht man sich Gedanken ber die Datenstruktur Steht der Prototyp nimmt man den Datenaustausch zwischen den Funktionen hinzu Parameter bergabe und r ckgabe immer noch mit Bildschirmmeldungen anstelle der eigentlichen Arbeit Funktio niert auch das wie gew nscht f llt man eine Funktion nach der anderen mit Code Diese Vorgehensweise lenkt die Entwicklung zu einem m glichst fr hen Zeitpunkt in die gew nschte Richtung Bei einem kommerziellen Auftrag bezieht sie den Auftraggeber in die Entwicklung ein und f rdert das gegenseitige Verst ndnis aber auch bei privaten Projekten verhindert sie dass man viel Code f r dev null schreibt Das Prototyping ist sicher nicht f r all
57. GRIES 1 3 3 Kommentar Alle Programmiersprachen erm glichen Text in ein Programm einzuf gen der vom Compi ler berlesen wird und nur f r den menschlichen Leser bestimmt ist Dieser Kommentar muss mit einem besonderen Zeichen eingeleitet und gegebenenfalls beendet werden In C C leitet die Zeichengruppe den Kommentar ein Er kann sich ber mehrere Zeilen erstrecken darf aber nicht geschachtelt werden Zu einer ungewollten Schachtelung kommt es wenn man kommentierte Programmteile durch Einrahmen mit Kommentarzei chen vor bergehend unwirksam macht Die Fehlermeldung des Compilers sagt irgendetwas mit Pointern und f hrt irre Die Zeichengruppe kennzeichnet das Ende Ein Zeilenende beendet diesen Kommentar nicht Ansonsten kann Kommentar berall stehen nicht nur auf einer eigenen Zeile Ein Beispiel 48 KAPITEL 1 PROGRAMMIEREN IN C C Di rsten Zeilen enthalten Programmnamen Zweck Autor Datum Compiler Literatur und aehnliches x include lt stdio h gt int main x Dies ist ein igene Kommentarzeile puts Erste Zeile puts Zweite Zeile Kommentar Kommentar puts Dritte Zeile puts Vierte Zeile Kommentar geschachtelt x puts Ende return 0 Quelle 1 21 C Programm mit Kommentaren Auf unserem System haben wir folgende Regel eingef hrt da Fehlermeldungen des Sys tems in Englisch ausgegeben werden schreiben wir die M
58. Ganzzahl eingeben Scanf d amp x for i 0 i lt MAX i la i long i x x printf Ausgabe ld ld n la 10 la 20 Array verlaengern mit realloc la long realloc void la size t DELTA sizeof long Array anschauen la MAX DELTA x printf erweitert 513 ld n la 10 la MAX DELTA Speicher freigeben mit free free void la return 0 1 11 WEITERE C PROGRAMME 159 Quelle 1 93 C Programm mit dynamischer Speicherverwaltung malloc 3 Das n chste Beispiel sortiert die Zeilen eines Textes nach den Regeln des Duden Duden Taschenbuch Nr 5 Satz und Korrekturanweisungen die von den Regeln in DIN 5007 etwas abweichen duden sortiert Textfile zeilenweise nach dem ersten Wort unter Beruecksichtigung der Duden Regeln x Falls das Wort mit einem Komma endet wird auch das naechste Wort beruecksichtigt z B Vorname x Compiler cc O o duden duden c lmalloc include lt stdio h gt include malloc h include lt sys types h gt include sys stat h define MAX 1024 max Anzahl der Zeilen define EXT s Kennung des sort Files define NOWHITE c c 7 7 c amp amp c define NOCHAR c c 7 II le 10 define SCHARF c c c 222 x sz define
59. Gebrauch Wir haben ein Programm statistik c zur Berechnung von Mittelwert und Va rianz der in der Kommandozeile mitgegebenen ganzen Zahlen geschrieben Statistische Auswertung von eingegebenen Werten Privat Bibliothek libstat a erforderlich Compileraufruf cc statistik c L lstat define MAX 100 max Anzahl der Werte include lt stdio h gt void exit double mwert varianz main int argc char xargv int i a MAX if argo 3 puts Zuwenig Werte exit 1 if argc gt MAX 1 puts Zuviel Werte exit 1 Uebernahme der Werte in ein Array 8 0 argc 1 for i 1 i argc i sscanf argv i sd a i Ausgabe des Arrays x for i 1 i lt argc i printf Sd n alil x Rechnungen x printf Mittelwert fNn mwert a printf Varianz f n varianz a return 0 Quelle 1 9 C Programm Statistik mit Benutzung einer eigenen Funktionsbibliothek Das Programm verwendet die Funktionen mwert und varianz die wir aus einer hausgemachten Funktionsbibliothek namens libstat a entnehmen Der im Kommentar genannte Compileraufruf mit der Option L veranla t den Linker diese Bibliothek im Arbeits Verzeichnis zu suchen Die Funktionen sehen so aus double mwert x int x int j k double m 1 2 PROGRAMMER S WORKBENCH 27 for j 1 k 0 j lt x j k
60. Gr ndung der Open Software Foundation OSF und der UNIX International Inc MS DOS 4 0 f r PCs Ein Internet Wurm namens Morris geht auf die Reise darauf hin Gr ndung des Computer Emergency Response Teams CERT Erster Hoax 2400 baud Modem Hoax im Internet siehe CIAC Erstes landmobiles Satellitensystem f r Datenfunk Inmarsat C Das NFSNET l st das ARPANET als Backbone des Internet ab UNIX System V Release 4 vereinheitlicht System V BSD und Xenix Im Rechenzentrum Karlsruhe l st die IBM 3090 die 1990 1991 1992 1993 1994 1995 1996 231 Siemens 7881 ab ISDN in Deutschland eingef hrt Erster deutscher Internet Direktanschluss via Xlink Karlsruhe Zunehmende Vernetzung Anschluss an weltweite Netze Die Internet Society ISOC sch tzt das Internet auf 500 000 Knoten Computer Kommunikation mittels E Mail Btx und Fax vom Arbeitsplatz aus Optische Speichermedien CD ROM WORM Das Web URL HTTP HTML von TIMOTHY BERNERS LEE und ROBERT CAILLIAU am CERN in Genf entwickelt UNIX System V Version 4 Die mittlere Computerdichte in technisch orientierten Instituten und Familien erreicht 1 pro Mitglied Das UNIX System OSF 1 mit dem Mach Kernel der Carnegie Mellon Universit t kommt heraus 17 Sep Anfang von LINUX LINUS BENEDICT TORVALDS Erster Web Server in den USA Stanford Linear Accelerator Center MS DOS 5 0 f r PCs Anf nge von Microsoft Windows NT Das DE NIC an der Universit t Dortmund
61. Grunds tzlich m ssen in der Funktion die entsprechenden Variablen als Platzhalter oder formale Parameter vorkommen und deklariert sein Im Aufruf der Funktion kommt der gleiche Satz von Variablen gegebenenfalls unter anderem Namen mit jeweils aktuellen Werten vor sie werden als aktuelle Parameter oder Argumente bezeichnet Die Schnitt stelle von Programm und Funktion mu zusammenpassen wie Stecker und Kupplung einer elektrischen Verbindung d h die Liste der aktuellen Parameter mu mit der Liste der for malen Parameter nach Anzahl Reihenfolge und Typ der Parameter bereinstimmen Bei der Wert bergabe call by value wird der Funktion eine Kopie der aktuellen Para meter des aufrufenden Programmes bergeben Daraus folgt da die Funktion die aktuellen Parameter des aufrufenden Programmes nicht ver ndern kann Bei der Adress bergabe call by reference werden der Funktion die Speicheradressen der aktuellen Parameter des aufrufenden Programmes bergeben Die Funktion kann daher die Werte der Parameter mit Wirkung f r das aufrufende Programm ver ndern Sie arbeitet mit den Originalen der Parameter Das kann erw nscht sein oder auch nicht Bei beiden Mechanismen werden die Parameter vollst ndig ausgerechnet ehe die Funktion betreten wird Wie die Parameter bergabe in C FORTRAN und PASCAL aussieht entnimmt man am besten den Beispielen Die Parameter sind vom Typ integer um die Beispiele einfach zu halten Ferner ist noch ein
62. Name als erstes Argument bergeben wird zum Schreiben Die DAtei muss bereits vorhanden sein Der Systemaufruf gibt einen Datei Deskriptor zur ck eine fortlaufende Nummer der vom Programm ge ffneten Dateien begin nend mit 3 Dann schreiben wir den in einem Puffer abgelegten String zum Datei Deskriptor und schlie en die Datei Der Rest sind kleine Ma nahmen zur Fehlerbehandlung Die C Standardfunktionen sind in der Sektion 3 des Handbuchs zu finden die wichtigsten lauten fopen 3 fclose 3 scanf 3 und printf 3 Hier ein Programmbeispiel Demo Standardfunktion fopen 3 x include lt stdio h gt wegen fopen 3 fputs 3 usw int main int argc char xargv FILE x File Pointer char string UNIX ist prima int x if argc lt 2 puts Filenamen vergessen return 1 File braucht noch nicht zu existieren fp fopen argv 1 w if fp NULL puts fopen erfolgreich x fputs string fp if x EOF puts fputs erfolgreich fclose fp else puts Fehler bei fopen return 1 1 3 BAUSTEINE EINES QUELLTEXTES 71 return 0 Quelle 1 27 C Programm Ausgabe per Standardfunktion fputs 3 Das Programm macht im Grunde das Gleiche wie das vorangegangene die Schreibfunk tion fputs 3 ist jedoch optimiert f r das Schreiben von Strings in eine Datei Es gibt auch eine Standardfunktion fwrite 3 zum Schreib
63. PORTIEREN VON PROGRAMMEN 177 es wird Gleitkomma Arithmetik verwendet aber keine Komplex Arithmetik was die bertragung nach C erleichtert an Funktionen treten abs sqrt und cmplx auf an Kontrollanweisungen werden if then ls ndif und goto verwendet Wir werden etwas Arbeit mit den komplexen Operanden haben Die Sprunganweisung goto gibt es zwar in C aber wir bleiben standhaft und vermeiden sie Alles brige sieht einfach aus Als Ersatz f r den komplexen Datentyp bietet sich ein Array of float oder double an Eine Struktur w re auch m glich Falls komplexe Arithmetik vork me m ten wir uns die Operationen selbst schaffen Hier werden aber nur die komplexen Zahlen ausgegeben was harmlos ist Das goto wird hier nur gebraucht um nach der Ausgabe der L sung ans Pro grammende zu springen Wir werden in C daf r eine Funktion done aufrufen Das nach C bertragene Programm Loesung der quadratischen Gleichung a xx xx b x c 0 reelle Koeffizienten Loesungen auch komplex zu compilieren mit cc quad c lm x define EPS 1 0e 30 Typ double include lt stdio h gt wg puts printf scanf include lt math h gt wg fabs sqrt x int done int main double a b c d h s xl x2 double z 2 puts Loesung von bxx c 0 puts Bitte a b und c eingeben scanf Slf 1f 1f amp a amp b amp Cc 1 Fall a nahe Null lineare Gleich
64. Parameter by value und by reference an C Funktionen bergibt PASCAL Programm das FORTRAN Funktion aufruft Compiler pc o psummef psummef p fsr o program psummef input output var a b s integer function fsr var x y integer integer call by ref external ftn77 begin writeln Bitte die beiden Summanden eingeben readin a readin b write Die Summanden sind write a writeln b s a b write Die Summe direkt ist writeln 8 DaS fsr a b write Die Summe ist writeln s write Die Summanden sind write a writeln b end Quelle 1 46 PASCAL Programm das Parameter by reference an eine FORTRAN Funktion bergibt PASCAL Programm das PASCAL Funktionen aufruft Compileraufruf pc o psummep psummep p psv o psr o program psummep input output var a b s integer function psv x y integer integer call by value external function psr var x y integer integer call by ref external begin writeln Bitte die beiden Summanden eingeben readin a readin b write Die Summanden sind write a writeln b s a b 1 4 FUNKTIONEN 89 write Die Summ direkt ist writeln s s psv a b write Die Summe ist writeln s write Die Summanden sind write a writeln b S psr a b write Die Summe ist writeln s write Die Summanden sind write a writeln b e
65. Pointer 1 Ordnung sind nicht gespei chert Da die Elemente allesamt gleich gro sind gleich viele Bytes lang hindert uns nichts daran das Element a 1 2 n mlich die Zahl 7 als Element a 0 6 aufzufassen Die gespeicherten Werte lassen sich auch als eindimensionales Array b 12 verstehen Solche Tricks m ssen sorgf ltig kommentiert werden sonst blickt man nach kurzer Zeit nicht mehr durch und Au enstehende nie Versuchen Sie an Hand obigen Schemas folgende Behaup tungen nachzuvollziehen x a 1 2 5 a 1 a 0 4 a 1 a 2 1 8 a4 1 1 a 1 1 6 Im Programm 1 16 zeit c auf Seite 36 haben wir ein Array von Strings kennengelernt also ein Array von Arrays von Zeichen abgeschlossen jeweils mit dem ASCII Zeichen Nr 0 Es enth lt die Namen der Wochentage mit Spaces aufgef llt auf gleiche L nge char xptag Sonntag Montag Bi PS 60 KAPITEL 1 PROGRAMMIEREN IN C C Hier wird ein Array von 7 Pointern gespeichert Dazu kommen nat rlich noch die Strings die wegen des Aussehens auf dem Bildschirm gleich lang sind aber vom Programm her ungleich lang sein d rften Pointer 2 Pointer 1 Sp Wert Variable ptag lt ptag 0 o S x x ptag ptag 0 ptag 0 0 S ptag 0 1 ptag 0 1 ptag O 1 o lt ptag 0 2 n ptag 0 2 ptag 0 2 n lt ptag 0 3 e n ptag 0 3 p
66. Programm hallo cpp ist mit dem GNU gcc kompiliert 96 kB gro Ein Assem blerprogramm das dasselbe tut belegt 120 Bytes Die Speicherhersteller profitieren mit Si cherheit von der Objektorientierung 1 6 2 Datenabstraktion Klassenbegriff In C ebenso wie in FORTRAN oder PASCAL beschreibt ein Datentyp eine Menge von Werten samt den zugeh rigen Operationen Die Datentypen sind durch den Compiler festgelegt der Benutzer kann keine neuen Datentypen definieren Ein abstrakter Datentyp ist ein vom Benutzer definierter Typ dessen Schnittstelle In terface Au enseite Verbindung zum brigen Programm von seiner Implementierung Im plementation interne Programmierung Innenleben getrennt ist eine Black Box mit be stimmten nach au en sichtbaren Eigenschaften Klassen sind in einer Programmierspra che formulierte Beschreibungen abstrakter Datentypen Objekte sind Vertreter Exempla re Instanzen Verwirklichungen von Klassen C Typen und C Klassen sowie C Variable 110 KAPITEL 1 PROGRAMMIEREN IN C C und C Objekte entsprechen sich Aus Klassen lassen sich untergeordnete Klassen ablei ten Eine Klasse oder ein Objekt enth lt Daten data member und Operationen auf diesen Daten Die Operationen die in den Klassen oder Objekten verwirklicht sind hei en Metho den member function method Objekte verkehren untereinander mittels Botschaften Eine Botschaft message member function call ist die Aufforderung an ein Objekt eine sein
67. Quelle 1 48 PASCAL Funktion die Parameter by value bernimmt ohne Ausgabe Pascal Funktion Summe call by reference ohne Output Compileraufruf pc c xpsr p module a export function psr var x y integer integer implement function psr var z integer begin ZT y 90 KAPITEL 1 PROGRAMMIEREN IN C C Aenderung der Summanden x 66 y 88 psr z end end Quelle 1 49 PASCAL Funktion die Parameter by reference bernimmt ohne Ausgabe Damit geht es Der Compilerbauer wei wie die einzelnen Programmiersprachen ihre Ausgabe bewerkstelligen und kann berg nge in Form von Compiler Anweisungen oder Zwi schenfunktionen einrichten So macht es Microsoft bei seinem gro en C Compiler Aber wenn nichts vorgesehen ist mu der gew hnliche Programmierer solche Unvertr glichkeiten hin nehmen Auch Shellscripts k nnen Funktionen aufrufen Diese m ssen selbst ndige Programme wie externe Kommandos sein der Mechanismus sieht etwas anders aus Hier das Shellscript Shellscript das eine C Funktion aufruft 28 01 1988 Filename shsumme print Bitte die beiden Summanden eingeben read a read b print Die Summanden sind a b print Die Shell Summe ist expr a b print Die Funktions Summe ist cssh a b print Die Summanden sind a b exit Quelle 1 50 Shellscript mit Parameter bergabe Die zugeh rige C Funktion ist ein Hauptprogramm C Programm zum Aufruf
68. SACHVERZEICHNIS Programmiersprache ALGOL 8 algorithmische P 5 Assembler 6 7 BASIC 8 C 9 C 5 9 COBOL 7 deklarative P 5 FORTRAN 7 Freiburger Code 7 funktionale P 5 HASKELL 5 imperative P 5 JAVA 5 LISP 5 logische P 5 maschinenorientierte P 6 Maschinensprache 6 Mischen von P 82 MODULA 8 objektorientierte P 5 Paradigma 5 PASCAL 8 pr dikative P 5 problemorientierte P 6 PROLOG 5 prozedurale P 5 SCHEME 5 SMALLTALK 5 Sprachenfamilie 5 SQL5 Programmierstil 13 Programmiertechnik 13 Programmierumgebung 33 Programmquelle 2 PROLOG 5 Pro nescia 24 Public Member 110 Quasar Toolkit 124 Quellcode 11 Quine 172 r Wert 64 rand 3C 144 random 3M 144 ranlib 25 read 38 69 read 2 104 realloc 3 158 Referenzebene 61 referenzieren 57 68 register C 62 Rekursion 96 relozierbar 12 reserviertes Wort 48 255 return C 78 Revision Control System 28 Richtlinien C 13 Rienne Vaplus H hle von R 23 rlog RCS 29 robust 12 R ckgabewert 78 82 138 Rundungsfehler 52 sarge 232 scanf 70 scanf 3 104 204 SCHEME5 Schleife C 75 Schleife abweisende 75 Schleife nichtabweisende 75 Schleifenz hler 77 Schl sselwort 34 46 48 Schl sselwort 198 sdb 23 Seed 145 Sequenz 74 Shared Library 19 shift C 68 short C 51 Signal t 124 Single UNIX Specification 137 size 45 sizeof Operator 71 Skalarprodukt 120 Slapper 232 Slot 124 small Speichermodell 108 SMALLTALK 5 10 48 Software
69. Sie einen Test entwickelt Woran denken Sie bei Bit Festplatte Men CPU Linker IBM Schnittstelle Slot Bier aus der Eifel 1 Punkt Schraubendrehereinsatz 1 kleinste Dateneinheit 2 Punkte Was zum Essen vom Partyservice 1 Schallplatte 0 Massenspeicher 2 Was zum Essen 1 Dialogtechnik 2 mittelalterlicher Tanz 0 politische Partei 0 Zentralprozessor 2 Carnevalsverein 0 Linksh nder 0 Anh nger einer Linkspartei 1 Programm zum Binden von Modulen 2 Ich Bin M de 1 International Business Machines 2 International Brotherhood of Magicians 1 Verletzung 1 Verbindungsstelle zweier EDV Ger te 2 Werkstatt eines Bartscherers 0 Steckerleiste im Computer 2 einarmiger Bandit 1 niederdeutsch f r Kamin 0 206 Fortran Mainframe PC Puffer Software Port Strichcode Chip Pointer Page Character 207 starker Lebertran 0 Formal Trash Notation 0 Programmiersprache 2 Frachtkahn auf dem Main 0 Damit wollte FRIDTJOF NANSEN zum Nordpol 0 gro er Computer 2 Plumpsklo Gravitationstoilette 1 Personal Computer 2 Power Computing Language 0 Was zum Essen aus Kartoffeln 1 Was am Eisenbahnwagen 1 Zwischenspeicher 2 Rohstoff f r Softice 0 Programme Daten und so Zeugs 2 was zum Trinken 0 was zum Trinken 1 Hafen 1 Steckdose f r Peripherieger te 2 maschinell lesbarer Code 2 Geheimsprache im
70. Stellenwertsystem zur Basis 60 In China werden Z hlst bchen zum Rechnen verwendet In der Bergpredigt wird das Bin rsystem erw hnt Matth 5 37 Die R mer schieben Rechensteinchen calculi Die Inder entwickeln das heute bliche reine Stellenwertsystem die Null ist jedoch lter Etwa gleichzeitig entwickeln die Mayas in Mittelamerika ein Stellenwertsystem zur Basis 20 LEONARDO VON PISA genannt FIBONACCI setzt sich f r die Einf hrung des indisch arabischen Systems im Abendland ein Die europ ischen Rechenmeister verwenden sowohl die r mische als auch die indisch arabische Schreibweise JOHN NAPIER erfindet die Rechenknochen Napier s Bones Erste mechanische Rechenmaschine mit Zehner bertragung und Multiplikation von WILHELM SCHICKARD T bingen Rechenmaschine von BLAISE PASCAL Paris f r kaufm nnische Rechnungen seines Vaters GOTTFRIED WILHELM LEIBNIZ baut eine mechanische Rechenmaschine f r die vier Grundrechenarten und befasst sich mit der dualen Darstellung von Zahlen In der Folgezeit technische Verbesserungen an vielen Stellen in Europa HENRY MILL erh lt ein Patent auf eine Schreibmaschine JOSEPH MARIE JACQUARD erfindet die Lochkarte und steuert Webst hle damit CHARLES BABBAGE stellt der Royal Astronomical Society eine programmierbare mechanische Rechenmaschine vor die jedoch keinen wirtschaftlichen Erfolg hat Er denkt auch an das Spielen von Schach oder Tic tac toe auf Maschinen SAMUEL FINLEY BR
71. Verbindung mit einer Reihe weiterer IEEE Standards Wir verwenden folgende vereinfachte Gliederung 1 Allgemeines Name des Programms Programmart Vollprogramm Funktion Zweck des Programms Programmiersprache Computertyp Betriebssystem Ger te Drucker Plotter Maus Struktur als Grafik Flie bild externe Unterprogramme soweit verwendet 2 Anwendung Aufruf Konstante Variable Eingabe von Tastatur aus Dateien Ausgabe zum Bildschirm Drucker in Dateien Einschr nkungen Fehlermeldungen Beispiel Speicherbedarf Zeitbedarf 3 Verfahren Algorithmus Genauigkeit G ltigkeitsbereich Literatur zum Verfahren 4 Bearbeiter Name Datum der Erstellung Name Datum von nderungen 39Real programmers write programs not documentation 136 KAPITEL 1 PROGRAMMIEREN IN C C Das sieht nach Arbeit aus Man braucht nicht in allen F llen alle Punkte zu ber cksichti gen aber ohne eine solche Dokumentation l t sich ein Programm nicht zuverl ssig benutzen und weiterentwickeln Im Netz finden sich Werkzeuge die in Verbindung mit dem Kommen tar und der Struktur eines Programmes halbautomatisch eine Dokumentation erstellen Ein Beispiel ist Doxygen http www doxygen org Zweckm ig besch ftigt man sich mit solchen Werkzeugen fr hzeitig nicht erst wenn der Code fast fertig ist 1 10 3 Erstellen einer man Seite Die inhaltliche Gliederung einer man
72. Virtual Reality ein gutes St ck voran Am 26 Februar entscheiden sich ma gebende Vertreter der Computerwissenschaft im deutschsprachigen Raum im Anschluss an ein internationales Kolloquium in Dresden f r die Bezeichnung Informatik nach franz sischem Beispiel Die Programmiersprache PASCAL kommt heraus Die Firma Intel gegr ndet Hewlett Packard baut den ersten wissenschaftlichen programmierbaren Tischrechner HP 9100 A In Karlsruhe wird am 1 Januar das Institut f r Informatik gegr ndet Direktor KARL NICKEL Im WS 1969 70 beginnt in Karlsruhe die Informatik als Vollstudium mit 91 Erstsemestern Gr ndung der Gesellschaft f r Informatik GI in Bonn In den Bell Labs UNIX in Assembler auf einer DEC PDP 7 Beginn des ARPANET Projektes erste Teilnehmer U of California at Los Angeles Stanford Research Institute U of California at Santa Barbara und U of Utah allesamt mit DEC PDP 10 Maschinen RFC 0001 Host Software von STEVE CROCKER Die Universit t Karlsruhe erh lt eine UNIVAC 1108 die bis 1987 l uft und damit den hiesigen Rekord an Betriebsjahren h lt Preis 28 MDM 3 Zentraleinheiten 256 Kilo W rter zu je 36 Bits Arbeitsspeicher 20 Bildschirme Die Karlsruher Fakult t f r Informatik wird gegr ndet Am 01 Januar 1970 00 00 00 GMT beginnt die UNIX Uhr zu laufen UNIX auf C umgeschrieben erster Mikroprozessor Intel 4004 ALAN SHUGART entwickelt bei IBM die Floppy Disk Die Internet Protokolle FTP RFC 114
73. a b printf Die Summe ist d n psv a b printf Die Summanden sind san a b printf Die Summe ist d n psr amp a amp b printf Die Summanden sind dNn a b return 0 Qa Q 86 KAPITEL 1 PROGRAMMIEREN IN C C Quelle 1 41 C Programm das Parameter by value und by reference an PASCAL Funktionen bergibt Hiernach sollte klar sein warum die C Standardfunktion printf 3 mit Variablen als Argument arbeitet w hrend die hnliche C Standardfunktion scanf 3 Pointer als Argu ment verlangt printf 3 gibt Werte aus ohne sie zu ndern Es ist f r das Ergebnis belang los ob die Funktion Adressen Pointer oder Kopien der Variablen verwendet die Syntax legt das allerdings fest Hingegen soll scan 3 Werte mit Wirkung f r die aufrufende Funkti on einlesen Falls es sich nur um einen Wert handelte k nnte das noch ber den Returnwert bewerkstelligt werden aber scanf 3 soll mehrere Werte dazu noch verschiedenen Typs verarbeiten Das geht nur ber von scanf 3 und der aufrufenden Funktion gemeinsam verwendete Pointer Nun die drei FORTRAN Hauptprogramme mit Aufruf der Funktionen in C FORTRAN und PASCAL C FORTRAN Programm das C Funktionen aufruft G Compileraufruf 77 o fsummec fummec f csv o csr o program fsummec SALIAS csv val val integer a b 5 csr csv write 6 100 read 5 a b write 6 102 a b 5 at write 6 103 5 call by v
74. accumulate accu A i x INCL i rnd accu return INCL 1 7 KLASSEN BIBLIOTHEKEN 121 Quelle 1 65 C XSC Funktion defect zur Defekteinschlie ung In obigem Beispiel berechnet die Funktion accumulate die Summe n gt Aij j l und addiert das Ergebnis zu dem Dotprecision Akkumulator accu ohne Rundungsfehler Die idotprecision Variable accu wird mit b i initialisiert Schlie lich wird der Wert im Ak kumulator maximal genau auf das Standard Intervall INCL i gerundet Auf diese Weise sind die Grenzen von INCL i entweder gleich oder zwei beanchbarte Gleitkommazahlen Fur alle Dotprecision Datentypen steht ein verringerter Satz vordefinierter Operatoren zur Verf gung um fehlerfreie Ergebnisse zu berechnen Die berladene Skalarprodukt Funktion accumulate und die Rundungsfunktion rnd sind f r alle sinnvollen Typ kombinationen verf gbar 1 7 3 5 Dynamische Langzahl Arithmetik Neben den Klassen real und interval gibt es die dynamischen Klassen 1_real long real und 1 interval long interval ebenso wie die entsprechenden dynamischen Vektoren und Matrizen samt allen arithmetischen und relationalen Operatoren und allen Standardfunk tionen mit mehrfacher Genauigkeit Die Rechengenauigkeit l t sich vom Benutzer w hrend der Laufzeit kontrollieren Mittels Ersetzen der Typen real und interval durch 1 real und 1 interval in den Deklarationen wird ein Anwendungsprogramm zu einem Programm mit mehrfacher G
75. and required Cover Texts given in the Documents license notice H Include an unaltered copy of this license I Preserve the section entitled History Preserve its title and add to it an item stating at least the title year new authors and publisher of the Modified Version as given on the Title Page If there is no section entitled History in the Document create one stating the title year authors and publisher of the Document as given on its Title Page then add an item describing the Modified Version as stated in the previous sentence J Preserve the network location if any given in the Document for public access to a Trans parent copy of the Document and likewise the network locations given in the Document for previous versions it was based on These may be placed in the History section You may omit a network location for a work that was published at least four years before the Document itself or if the original publisher of the version it refers to gives permission K For any section entitled Acknowledgements or Dedications Preserve the title of the sec tion and preserve in the section all the substance and tone of each of the contributor acknowledgements and or dedications given therein L Preserve all the Invariant Sections of the Document unaltered in their text and in their titles Section numbers or the equivalent are not considered part of the section titles 222 ANHANG F GNU LIZENZEN M Delete any section enti
76. auch Funktions und Klassen bibliotheken f r cgi Programme in C C 1 12 Obfuscated C Wie bereits in einer Fu note auf Seite 9 bemerkt findet j hrlich ein Wettbewerb um das undurchsichtigste C Programm statt to obfuscate vernebeln verwirren Die Siegerpro gramme haben au er Nebel auch noch einen Witz aufzuweisen Als Beispiel geben wir ein Programm von JACK APPLIN Hewlett Packard Fort Collins USA wieder das erfolgreich am Contest 1986 teilgenommen hat Es ist das Hello World Programm in einer Fassung die als C Programm FORTRAN 77 Programm und als Bourne Shellscript g ltig ist cat 13 dev null 2 gt amp 1 echo Hello world exit This program works under cc f77 and bin sh x main write cat cat 37Unter www ee ryerson ca 8080 elf hack multilang htm liegt ein hnliches Programm das als C Programm Perl Skript Tel Skript und Shell Skript g ltig ist 172 KAPITEL 1 PROGRAMMIEREN IN C C x Hello world cat putchar cat x DM end x Auch die Leerzeichen sind wichtig Entfernt man die Kommentare bleibt als C Programm brig cat 13 main write cat cat Hello world cat putchar cat Zuerst wird eine globale Variable cat per Default vom Typ int auf 13 gesetzt Dann wird der Systemaufruf write 1 Hello world 13 ausgef hrt der 13 Zeichen des Strings Hello world nach stdout Dateideskriptor 1 schreibt an
77. ckgabewert von time geht in die Variable sec vom Typ long integer integerx4 Die call Zeile ruft die Subroutine foratime alias C Funktion sprintf 3 auf Diese C Funktion erwartet drei Argumente den Ausgabestring als Pointer auf char einen For matstring als Pointer auf char und die auszugebende Variable von einem Typ wie er durch den Formatstring bezeichnet wird Der R ckgabewert der Funktion ctime 3 ist ein Poin ter auf char Da dies kein in FORTRAN zul ssiger Typ ist deklarieren wir die Funktion ersatzweise als vom Typ 4 Byte integer Der Pointer l sst sich auf jeden Fall in den vier By tes unterbringen Nach unserer Erfahrung reichen auch zwei Bytes ebenso funktioniert der Typ logical nicht jedoch real Der Formatstring besteht aus der Stringkonstanten 55 gefolgt von dem ASCII Zeichen Nr 0 wie es bei Strings in C Brauch ist F r sprintf 3 besagt dieser Formatstring das dritte Argument den R ckgabewert von ct ime 3 als einen String aufzufassen das hei t als Pointer auf das erste Element eines Arrays of characters atime ist ein FORTRAN String Deskriptor dessen erste Komponente ein Pointer auf cha racter ist Damit wei sprintf 3 wohin mit der Ausgabe Die write Zeile ist wieder pures FORTRAN An diesem Beispiel erkennen Sie dass Sie auch als FORTRAN oder PASCAL Programmierer etwas von C verstehen m ssen um die Systemaufrufe und C Standardfunktionen syntaktisch richtig zu gebrauchen Bei manchen FORTR
78. ckschreiben mittels ci verweigert das RCS Mit dem Kommando co 1 filename wird eine les und schreibbare Kopie erzeugt Dabei wird die RCS Datei f r weitere gleichzeitige Schreibzugriffe gesperrt 1 lock Die Kopie kann man mit allen UNIX Werkzeugen bearbeiten Umbenennen w re jedoch ein schlechter Einfall Beim Zur ckstellen mittels ci filename hat man Gelegenheit einen kurzen Kom mentar in die Versionsinformationen zu schreiben wie Grund und Umfang der nde rung Mittels rlog filename werden die Versionsinformationen auf den Schirm ge holt Enth lt der Quelltext die Zeichenfolge Log unix8 tex v zweckm ig im Kommentar am Anfang so werden die Versionsinformationen auch dorthin bernom men Dann hat man alles im Quellfile beisammen e Falls Sie sich mit co 1 filename eine Kopie zum Editieren geholt und damit gleich zeitig das Original f r weitere Schreibzugriffe gesperrt haben anschlie end die Kopie mit rm 1 l schen so haben Sie nichts mehr zum Zur ckstellen In diesem Fall l t sich die Sperre mit rcs u filename aufheben Besser ist es jedoch auf die UNIX Kommandos zu verzichten und nur mit den RCS Kommandos zu arbeiten Das ist f r den Anfang alles Die RCS Kommandos lassen sich in Makefiles verwenden Die vom RCS vergebenen Zugriffsrechte k nnen von UNIX Kommandos chmod 1 berrannt werden aber das ist nicht Sinn der Sache der Einsatz von RCS setzt voraus daf sich die Beteiligten disziplini
79. code for a work means the preferred form of the work for making modificati ons to it For an executable work complete source code means all the source code for all modules it contains plus any associated interface definition files plus the scripts used to control compilation and installation of the executable However as a special excepti on the source code distributed need not include anything that is normally distributed in either source or binary form with the major components compiler kernel and so on of the operating system on which the executable runs unless that component itself accompanies the executable If distribution of executable or object code is made by offering access to copy from a designated place then offering equivalent access to copy the source code from the sa me place counts as distribution of the source code even though third parties are not compelled to copy the source along with the object code You may not copy modify sublicense or distribute the Program except as expressly pro vided under this License Any attempt otherwise to copy modify sublicense or distribute the Program is void and will automatically terminate your rights under this License However parties who have received copies or rights from you under this License will not have their licenses terminated so long as such parties remain in full compliance You are not required to accept this License since you have not signed it Howev
80. conditions stated herein The Document below refers to any such manual or work Any member of the public is a licensee and is addressed as you You accept the license if you copy modify or distribute the work in a way requiring permission under copyright law A Modified Version of the Document means any work containing the Document or a portion of it either copied verbatim or with modifications and or translated into another language A Secondary Section is a named appendix or a front matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Documents overall subject or to related matters and contains nothing that could fall directly within that overall subject Thus if the Document is in part a textbook of mathe matics a Secondary Section may not explain any mathematics The relationship could be a matter of historical connection with the subject or with related matters or of legal commer cial philosophical ethical or political position regarding them The Invariant Sections are certain Secondary Sections whose titles are designated as being those of Invariant Sections in the notice that says that the Document is released under this license If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant The Document may contain zero Invariant Sections If the Document does not identify any Invariant Sections then th
81. der verfuegbare Speicher di Groesse Der Datentyp unsigned long geht in beiden Faellen ueber 4 Milliarden x ifdef UNIX define MAX unsigned long 1000000 else define MAX unsigned long 100000 endif define MIN unsigned long 50 Defaultwert fuer Obergrenze define DEF unsigned 10ong 10000 include stdio h globale Variable unsigned long p MAX 10 Array der Primzahlen unsigned d MAX 1000 x Haeufigkeit der Differenzen x unsigned long h 2 11 Haeufigkeit der Primzahlen unsigned long z 1 aktuelle Zahl unsigned n 1 Za lfd Anzahl Primzahlen 1 Funktionsprototypen void ttest Funktion Teilbarkeitstest long time Systemaufruf zur Zeitmessung int main int argc char xargv Hauptprogramm 1 11 WEITERE C PROGRAMME 151 int r int i 1 j unsigned long ende DEF unsigned long unsigned long dp dmax 1 dl d2 unsigned long g long zeitl zeit2 zeit3 Auswertung der Kommandozeile 7 dem Aufruf kann als Argument die Obergrenz mitgegeben werden x keine Pruefung auf negative Zahlen oder Strings if argc gt 1 sscanf argv 1 lu amp ende if ende gt MAX printf NnZ zu gross Maximal lu n MAX exit 1 if ende MIN printf nZ zu klein genommen wird lu n n n MIN ende MIN
82. der zwar im Grunde nichts anderes ist als der Typ int aber die Verwendung deutlicher erkennen l sst Zu Beginn der Deklarationen oder vor main schreiben wir typedef int BOOLEAN die Gro schreibung ist nicht zwingend und k nnen anschlie end eine Variable janein als BOOLEAN deklarieren BOOLEAN janein Der Compiler ersetzt den String BOOLEAN in Deklarationen durch den String int hnlich wie es der Pr prozessor bei define Anweisungen macht In FORTRAN gibt es den Datentyp complex den wir in C durch eine Struktur nachbil den typedef struct double real double imag COMPLEX Hiermit ist nur ein neuer einfacherer Name f r den Strukturtyp struct geschaffen worden Dann deklarieren wir die komplexe Variable COMPLEX z R 20 z ist eine komplexe Variable R ein Array von 20 komplexen Variablen Leider ist damit noch nicht alles erledigt denn die arithmetischen Operatoren von C gelten nur f r Ganz und Gleitkommazahlen nicht f r Strukturen Wir m ssen noch Funktionen f r die Operationen 62 KAPITEL 1 PROGRAMMIEREN IN C C mit komplexen Variablen schreiben In FORTRAN hingegen gelten die gewohnten arithme tischen Operatoren auch f r komplexe Daten In C lassen sich die Bedeutungen der Ope ratoren erweitern berladen aber in C nicht Bei Strings taucht das Problem der L ngenangabe auf Folgender Weg ist gangbar erf llt aber nicht alle W nsche typedef char STRING
83. endwin die das Terminal wieder in seinen urspr ngli chen Zustand versetzt noecho schaltet das Echo der Tastatureingaben auf dem Bildschirm aus cbreak bewirkt da jedes eingegebene Zeichen sofort an das Programm weitergelei tet wird ohne RETURN mvprintw bewegt move den Cursor an die durch die ersten beiden Argumente be zeichnete Position 0 0 links oben und schreibt dann in das Standardfenster sofern nicht anders angegeben Syntax wie die C Standardfunktion printf 3 refresh Die bisher aufgerufenen Funktionen haben nur in einen Puffer geschrieben auf dem tats chlichen Bildschirm hat sich noch nichts ger hrt Erst mit refresh wird der Puffer zum Bildschirm bertragen getch liest ein Zeichen von der Tastatur clear putzt den Bildschirm beim n chsten Aufruf von refresh e newwin erzeugt ein neues Fenster hier mit dem Namen frame auf der angegebe nen Position mit einer bestimmten Anzahl von Zeilen und Spalten wstandout setzt das Attribut des Fensters auf standout d h auf umgekehrte Hel ligkeiten beispielsweise Gilt bis wstandend wrefresh wie refresh nur f r ein bestimmtes Fenster delwin l scht ein Fenster Gegenst ck zu newwin touchwin schreibt beim n chsten refresh ein Fenster v llig neu Die curses 3 Funktionen machen von den Terminalbeschreibungen in den usr lib terminfo Dateien Gebrauch man braucht sich beim Pr
84. erste Argument Index 0 ist Bei einem Programmaufruf ohne Argumente steht also der Programmname in argv 0 der Argumentz hler argc hat den Wert 1 Das erste nichtbelegte Element des Argumentvektors enth lt einen leeren String Die Umwandlung der Argumente vom Typ String in den gew nschten Typ besorgt die Funk tion sscanf 3 Der Anfang eines Hauptprogrammes mit Kommandozeilenargumenten sieht folgender ma en aus int main int argc char argv char a int x if argo lt 3 puts Zuwenige Parameter exit 1 sscanf argv 1 c amp a sscanf argv 2 d amp x Quelle 1 52 C Programm das Argumente aus der Kommandozeile bernimmt Das erste Kommandozeilenargument nach dem Kommando selbst wird als Zeichen ver arbeitet das zweite als ganze Zahl Etwaige weitere Argumente fallen unter den Tisch Die Funktion main ist immer vom Typ extern int Da dies der Defaulttyp f r Funk tionen ist k nnte die Typdeklaration weggelassen werden Sie kann Argumente berneh men braucht es aber nicht Infolgedessen sind folgende Deklarationen g ltig main int main extern int main main void int main void extern int main void main int argc char argv int main int argc char argv extern int main int argc char x argv main int argc char argv int main int argc char argv extern int main int argc char xxargv und alle anderen falsch
85. gegr ndet IBM Apple und Motorola kooperieren mit dem Ziel einen Power PC zu entwickeln Die Universit t Karlsruhe nimmt den massiv parallelen Computer MasPar 1216A mit 16000 Prozessoren in Betrieb Novell bernimmt von AT amp T die UNIX Aktivit ten USL FORTRAN 90 verabschiedet Eine Million Knoten im Internet Weltweit etwa 50 Web Server Erster deutscher Web Server am DESY in Hamburg MS DOS Version 6 0 Microsoft k ndigt Windows NT an DEC stellt PC mit Alpha Prozessor vor 150 MHz 14 000 DM Novell tritt das Warenzeichen UNIX an die X Open Gruppe ab MARC ANDREESSEN NCSA schreibt einen Web Browser f r das X Window System mit der M glichkeit farbige Grafiken darzustellen PATRICK VOLKERDING stellt die Linux Distribution Slackware zusammen die erste Distribution von einiger Verbreitung IAN MURDOCR Student an der Purdue University stellt am 16 August das Debian Projekt vor Gegen Jahresende Debian GNU Linux Version 0 90 Weltweit etwa 250 Web Server Das DE NIC zieht ans Rechenzentrum der Universit t Karlsruhe Weltweit 10 Mio installierte UNIX Systeme prognostiziert Linux 1 0 ver ffentlicht Das Internet umfasst etwa 4 Mio Knoten und 20 Mio Benutzer Erste Spam Mail Canter Siegel Erste Banner Werbung Wired MARC ANDREESSEN und JIM CLARK gr nden die Firma Netscape Kommerzielle Netze l sen in den USA das NFSNET als Backbone ab Die X Open Gruppe f hrt die Bezeichnung UNIX 95 f r Systeme ein di
86. genau wie eine Zeile define MAX 100 im Quelltext nur eben hier mit der M glichkeit den Wert bei der bersetzung zu bestimmen Speichermodelle wie unter PC DOS gibt es in UNIX nicht Hat man Speicher kann man ihn uneingeschr nkt nutzen F r C Programme gibt es einen Syntax Pr fer namens lint 1 den man unbedingt verwenden sollte Er reklamiert nicht nur Fehler sondern auch Stilm ngel Manchmal bean standet er auch Dinge die man bewu t gegen die Regeln geschrieben hat Man mu seinen Kommentar sinnvoll interpretieren Aufruf lint mysource c Ein verbesserter lint ein Secure Programming Lint findet sich bei der University of Virginia unter http www splint org Unter Linux ist lint 1 nicht berall vorhanden dann kann man den Compiler gcc 1 mit einer Option aufrufen die ihn nur zu einer Pr fung der Syntax veranlasst gcc fsyntax only pedantic Wall mysource c Ferner gibt es unter einigen UNIXen f r C Quelltexte einen Beautifier namens cb 1 der den Text in eine standardisierte Form mit Einr ckungen usw bringt und die Lesbarkeit erleichtert cb source c source b Wenn man mit dem Ergebnis source b zufrieden ist l scht man die urspr ngliche Datei source c und benennt source bin source c um 1 2 PROGRAMMER S WORKBENCH 21 1 2 3 Unentbehrlich make Gr ere Programme sind stark gegliedert und auf mehrere bis viele Dateien und Verzeich nisse verteilt Der Compileraufruf wird dadurch l
87. gern Korrekturlesen das Zusammenstellen eines Index und hnliche ungeliebte Ar beiten kosten auch Zeit unter Umst nden Wochen Die Programmentwicklung vollzieht sich in der Praxis nicht so geradlinig wie es der obi ge Plan vermuten l sst Aus jeder Stufe kommen R ckspr nge in vorangegangene Stufen vor man k nnte auch von R ckkoppelungen sprechen Dagegen ist nichts einzuwenden es besteht jedoch eine Gefahr Wenn man nicht Zwangsma nahmen ergreift Schlussstriche zieht erreicht das Programmierprojekt nie einen definierten Zustand Programmierer ver stehen das Kaufleute und Kunden nicht Gilt auch f r Buchmanuskripte Der steigende Bedarf an Software und ihre wachsende Komplexit t verlangen die Ent wicklung von Programmierverfahren mit denen durchschnittliche Programmierer zuverl s sige Programme entwickeln Auf geniale Real Programmers allein kann sich keine Firma ver lassen Die Entwicklung dieser Programmiertechnik Software Engineering ist noch nicht abgeschlossen 1 1 9 Aufgabenanalyse und Entwurf 1 1 9 1 Aufgabenstellung Die meisten Programmieraufgaben werden verbal gestellt nicht in Form einer mathemati schen Gleichung Zudem sind sie anfangs oft pauschal abgefasst da dem Aufgabensteller Einzelheiten noch nicht klar sind Real programmers know better than the users what they need 1 1 GRUNDBEGRIFFE 15 Auf der anderen Seite ben tigt der Computer eine eindeutige ins einzelne gehende An weisung
88. geschachtelt werden Mit mehrfach geschachtelten Schleifen geht der Spa erst richtig los Der Rumpf der innersten Schleife wird am h ufigsten durchlaufen und hat daher auf das Zeitverhalten des Programmes einen gro en Einfluss Dort sollte man nur die allern tigsten Anweisungen hineinschreiben Auch die Bedingung der innersten Schleife sollte so einfach und knapp wie m glich gefasst sein Sprung Es gibt die Anweisung goto gefolgt von einem Label Marke In seltenen F llen kann ein goto das Programm verbesern meist ist es vom bel weil es erstens sehr gef hr lich zweitens auch nicht n tig ist Hier ein grauenvolles Beispiel f r den Mi brauch von goto Das Programm ist syntak tisch richtig und tut auch das was es soll n mlich die eingegebene Zahl ausgeben falls sie durch 5 teilbar ist andernfalls die n chstgr ere durch 5 teilbare Zahl einschlie lich der Zwi schenergebnisse Das Programm enth lt eine schwere programmiertechnische S nde den Sprung mitten in einen Schleifenrumpf Grauenvolles Beispiel fuer goto 06 07 1992 x Am besten gar nicht compilieren include lt stdio h gt int main int x printf Bitte Zahl eingeben scanf d amp x if x 5 goto marke else while x 5 marke printf Ausgabe d n x 30Sogenannter Zaunpfahl Fehler fencepost error Wenn Sie bei einem Zaun von 100 m L nge alle 10 m einen Pfahl setzen wieviele Pf hl
89. int tm_sec seconds 0 59 int tm min minutes 0 59 int tm hour x hours 0 23 int tm mday day of month 1 31 int tm mon month of year 0 11 x int tm year year 1900 7 int tm wday day of week sunday 0 x int tm yday day of year 0 365 x int tm isdst daylight saving time Von den beiden letzten Komponenten der Struktur machen wir keinen Gebrauch Da die Komponenten alle vom selben Typ sind ist statt der Struktur auch ein Array denkbar Ver mutlich wollte sich der Programmierer den Weg offenhalten k nftig auch andere Typen auf zunehmen Zeitzone Das Programm das die Quelle zu dem Kommando zeit aus der ersten bung ist sieht folgenderma en aus 13 n HP UX In ANSI C ist eine Standardfunktion time 3 enthalten 36 KAPITEL 1 PROGRAMMIEREN IN C C x Ausgabe der Zeit auf Bildschirm x Compileraufruf cc o zeit zeit c x include lt stdio h gt include lt time h gt char xptag Sonntag Montag j Dienstag Mittwoch Donnerstag Freitag Samstag ys Januar Februar Maerz April Mai JUNE August September Oktober November Dezember is char xpmon main long sec time struct tm gmtime xp sec time long 0 3600 MEZ GMT 3600 x p gmtime amp sec printf s Sd ptag p gt tm_wday p gt tm_mday printf s d
90. interessant Auf einer 32 Bit Maschine liegt die gr te vorzeichenlose Ganzzahl etwas ber 4 Milliarden Damit kommen wir nicht weit denn es ist bereits 13 6227020800 1 3 Wir stellen unsere Ergebnisse dar durch ein Array von langen Ganzzahlen und zwar packen wir immer neun Dezimalstellen in ein Array Element unsigned long f END 1 GRP Bei asymmetrischen Verschl sselungsverfahren braucht man gro e Zahlen Die Arithmetik zu diesem Datentyp m ssen wir selbst schreiben Dazu ersetzen wir die eigentlich bei der Berechnung von Fakult ten erforderliche Multiplikation durch die Addition Diese beschleu nigen wir durch Einsatz einer Assemblerfunktion aadd COMMENT C Funktion aadd in MS Assembler di in 1 4 FUNKTIONEN 101 Array of unsigned long in ein zweites Array addiert Parameter Pointer auf die Arrays MODEL small c CODE grp EQU 4 58 Siehe C Programm milliarde DD 1000000000 fuer laadd obige Zeile austauschen grp EQU 4 245 Siehe C Programm aadd PROC USES SI y PTR DWORD g PTR DWORD sub CX CX sub si si ele for Schleife nachbilden forl aktuelles Element in den Akku holen long 4 Bytes mov bx y mov ax WORD PTR bx tsi 0 mov dx WORD PTR bx si 2 Uebertrag zu Akku addieren add ax cx adc dx 0 vorige Fakultaet zu Akku addieren Uebertrag beachten mov bx g add ax WORD PTR bx si 0 adc dx WORD PTR bx si 2 Summe durch 10 hoc
91. jl m double k double xx return m Quelle 1 10 C Funktion Mittelwert ganzer Zahlen extern double mwert double varianz x int xx int J double m s v m mwert x for J ly ss 07 yx s s x j3 v s x 1 return v Quelle 1 11 C Funktion Varianz ganzer Zahlen Diese Funktionen werden mit der Option c kompiliert so da wir zwei Objektfiles mwert o und varianz o erhalten Mittels des Aufrufes ar r libstat a mwert o varianz o erzeugen wir die Funktionsbibliothek libstat a auf die mit der Compileroption 1stat zugegriffen wird Der Vorteil der Bibliothek liegt darin da man sich nicht mit vielen ein zelnen Funktionsfiles herumzuschlagen braucht sondern mit der Compileroption gleich ein ganzes B ndel verwandter Funktionen erwischt In das Programm eingebunden werden nur die Funktionen die wirklich ben tigt werden Merke Ein Archiv ist weder verdichtet noch verschl sselt Daf r sind andere Werkzeuge gzip 1 crypt 1 zust ndig 1 2 7 Weitere Werkzeuge Das Werkzeug cflow 1 ermittelt die Funktionsstruktur zu einer Gruppe von C Quell und Objektfiles Der Aufruf cflow statistik c liefert auf stdout main int lt statistik c 15 puts lt gt exit sscanf lt gt printf lt gt mwert lt gt varianz lt gt 1o 01 was besagt da die Funktion main vom Typ int ist und in Zeile 15 des Quelltextes sta
92. man die include Datei dos h nicht auf UND Anlagen sondern nur bei Compilern unter MS DOS f r PCs D 6 PR PROZESSOR ANWEISUNGEN 205 D 6 Pr prozessor Anweisungen Der erste Schritt beim Compilieren ist die Bearbeitung des Quelltextes durch den Pr pro zessor Dieser entfernt den Kommentar und f hrt Ersetzungen und Einf gungen gem der folgenden Anweisungen directives aus define buchst bliche Ersetzung einer symbolischen Konstanten oder eines Makros Ist kein Ersatz angegeben wird nur der Name als definiert angesehen f r ifdef H u fig undefine l scht die Definition eines Namens error f hrt zu einer Fehlermeldung des Pr prozessors include zieht die angegebene Datei herein H ufig tif else elif endif falls Bedingung zutrifft werden die nachfolgenden Pr prozessor Anweisungen ausgef hrt ifdef ifndef falls der angegebene Name definiert bzw nicht definiert ist werden die nachfolgenden Pr prozessor Anweisungen ausgef hrt line f hrt bei Fehlermeldungen zu einem Sprung auf die angegebenen Zeilennum mer pragma veranla t den Pr prozessor zu einer systemabh ngigen Handlung E Karlsruher Test Nicht jedermann eignet sich f r so schwierige Dinge wie die elektronische Datenverarbei tung Um Ihnen die Entscheidung zu erleichtern ob Sie in die EDV einsteigen oder sich an genehmeren Dingen widmen sollten haben wir ganz besonders f r
93. nden auch der dem Programm zugewie sene Speicherbereich verlassen Stimmen Platzhalter und Argumente im Typ nicht berein wird der Pointer pvar falsch inkrementiert und die Typumwandlung geht vermutlich auch daneben Es gibt eine Fallgrube bei der Typangabe Je nach Compiler werden die Typen char und short intern als int und float als double verarbeitet In solchen F llen mu dem Makro va arg pvar type der interne Typ mitgeteilt werden Nachlesen oder ausprobieren am besten beides 1 4 6 Iterativer Aufruf einer Funktion Unter einer Iteration versteht man die Wiederholung bestimmter Programmschritte wobei das Ergebnis eines Schrittes als Eingabe f r die n chste Wiederholung dient Viele mathe matische N herungsverfahren machen von Iterationen Gebrauch Programmtechnisch f h ren Iterationen auf Schleifen Entsprechend muf eine Bedingung angegeben werden die die 1 4 FUNKTIONEN 95 Iteration beendet Da auch bei einem richtigen Programm eine Iteration manchmal aus ma thematischen Gr nden nie zu einem Ende kommt ist es zweckm ig einen Test f r solche F lle einzubauen wie in folgendem Beispiel x Quadratwurzel Halbierungsverfahren 14 08 92 x Compileraufruf cc o wurzel wurzel c define EPS 0 00001 define AX 100 include lt stdio h gt void exit int main int argc char argv ine double a b c m if argc lt 2 puts Radikand fehlt exit 1 Initialisierung
94. number of times this function was invoked if this function is profiled else blank name the name of the function This is the minor sort for this listing time cumsecs seconds calls msec call name 52 12 18 12x18 SSremU 22 22 17 38 5 20 mulU 20 8 29 4 87 333332 0 01 ttest 2 22 74 0 49 9890 0 05 doprnt 0 8 22 93 0 19 mcount 0 6 23 08 0 15 divide by const 0 6 23 22 0 14 1 140 00 main 0 3 23 29 0 07 9890 0 01 memchr 0 2 23 34 0 05 _write_sys Qu 23 306 0 02 9890 0 00 _printf 0 0 23 3 0 01 9887 0 00 write 0 0 23 38 0 01 9887 0 00 _xflsbuf 0 0 234339 0 00 9890 0 00 wrtchk 0 0 23 39 0 00 1 0 00 _sscanf 0 0 23 39 0 00 1 0 00 _start 0 0 23 39 0 00 1 0 00 _strlen 0 0 23 39 0 00 1 0 00 atexit 0 0 23 39 0 00 1 0 00 exit 0 0 23 39 0 00 1 0 00 ioctl Wir sehen da die Funktion ttest sehr oft aufgerufen wird und 4 87 s verbr t Die beiden ersten Funktionen werden vom Compiler zur Verf gung gestellt Millicode aus usr lib milli a und liegen au erhalb unserer Reichweite F r genauere Ausk nfte zieht man den Systemaufruf times 2 den Debugger oder das UNIX Kommando prof 1 in Verbindung mit der Subroutine monitor 3 heran 1 2 6 Archive Bibliotheken ar Viele Teilaufgaben in den Programmen wiederholen sich immer wieder Das sind Aufgaben die mit dem System zu tun haben Befehle zur Bildschirmsteuerung mathematische Be rechnungen wie Logarithmus oder trigonometrische Funktionen Datenbankfun
95. pmon p 5tm mon p tm year 1900 printf d 02d MEZ n p tm hour p tm min Quelle 1 16 C Programm zur Anzeige der Systemzeit Nun wollen wir dieselbe Aufgabe mit einem FORTRAN Programm bew ltigen Der UNIX Systemaufruf time 2 bleibt f r die C Standardfunktion gmtime 3 suchen wir die ent sprechende FORTRAN Routine Da wir keine finden m ssen wir sie entweder selbst schrei ben was der erfahrene Programmierer scheut oder nach einem Weg suchen eine beliebige C Standardfunktion in ein FORTRAN Programm hineinzuquetschen Der Systemaufruf time 2 macht keinen Kummer Er ben tigt ein Argument vom Typ Pointer auf long integer was es in FORTRAN gibt Der R ckgabewert ist vom Typ long inte ger auch kein Problem Die C Standardfunktion gmt ime 3 erwartet ein Argument vom Typ Pointer auf long integer was machbar w re aber ihr Ergebnis ist ein Pointer auf eine Struk tur Das hat FORTRAN noch nie gesehen Deshalb weichen wir auf die C Standardfunktion ctime 3 aus deren R ckgabewert vom Typ Pointer auf character ist was es in FORTRAN n herungsweise gibt In FORTRAN ist ein Zeichen ein String der L nge eins Strings werden per Deskriptor bergeben Ein String Deskriptor ist der Pointer auf das erste Zeichen und die Anzahl der Zeichen im String als Integerwert Das Programm sieht dann so aus program zeit SALIAS foratime sprintf c integer 4 time tloc sec ctime character atimex26 sec time tlo
96. receive copies directly or indirectly through you then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program If any portion of this section is held invalid or unenforceable under any particular cir cumstance the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances F1 GNU GENERAL PUBLIC LICENSE 217 10 11 12 It is not the purpose of this section to induce you to infringe any patents or other pro perty right claims or to contest validity of any such claims this section has the sole purpose of protecting the integrity of the free software distribution system which is im plemented by public license practices Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system it is up to the author donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License If the distribution and or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countr
97. ru PR no AM Ct Ou RB BRR mr 0o eee masta 188 ANHANG B ZEICHENS TZE 155 233 156 234 157 235 Yen 158 236 ZE Pt 159 237 f 160 240 161 241 m 162 242 s 163 243 t 164 244 u 165 245 v 166 246 w a 167 247 x o 168 250 y i n 169 251 7 Grafik 170 252 Grafik 171 253 i 1 2 172 254 1 4 173 255 Y U 174 256 U lt 175 257 176 260 Grafik 177 261 Grafik 178 262 Yen Grafik 179 263 o Grafik 180 264 f C Grafik 181 265 N Grafik 182 266 q N Grafik 183 267 Grafik 184 270 Grafik 185 271 i Grafik 186 272 Grafik 187 273 Grafik 188 274 Yen Grafik 189 275 Grafik 190 276 f Grafik 191 277 Grafik 192 300 Grafik 193 301 A Grafik 194 302 B Grafik 195 303 C Grafik 196 304 D Grafik 197 305 E Grafik 198 306 F 6 Grafik 199 307 G Grafik 200 310 H Grafik 201 311 I Grafik 202 312 Grafik 203 313 Grafik 204 314 Grafik 205 315 Grafik 206 316 Grafik 207 317 Grafik 208 320 Grafik 209 321 J H Grafik 210 322 K Grafik B 2 GERMAN ASCII B 2 German ASCII 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 323 324 325 326 327 330 331 332 333 334 335 336 337 340 341 342 343 344 345 346 347
98. scanf d amp b printf Die Summe ist d n SUMME a b itt return i Quelle 1 81 C Programm mit Eingabe Der R ckgabewert ist die Anzahl der Schleifendurchl ufe Die Stringkonstanten werden nicht mit puts 3 ausgegeben da diese Funktion einen hier unerw nschten Zeilenvorschub anf gt Denken Sie daran da die Funktion scanf 3 Pointer als Argumente braucht 1 11 3 Fehlersuche Einige Gesichtspunkte sind bereits im Abschnitt 1 2 4 Debugger auf Seite 23 behandelt wor den Der erfahrene Programmierer unterscheidet sich vom Anf nger in drei Punkten Er macht raffiniertere Fehler Er wei das 140 KAPITEL 1 PROGRAMMIEREN IN C C Er kennt die Wege und Werkzeuge zur Fehlersuche Fehlerfreie Programme schreibt auch der beste Programmierer nicht Deshalb ist es wichtig schon beim Programmentwurf an die Fehlersuche zu denken und vor allem das Programm so zu gestalten da es bei einem Fehler nicht ein richtiges Ergebnis vort uscht Das ist so ungef hr das Schlimmste was ein Programm machen kann Dann lieber noch ein knallharter Absturz Besser ist eine sanfte Notlandung mit einer aussagekr ftigen Fehlermeldung Die Programmeinheiten Funktionen lasse man nicht zu umfangreich werden Ein bis zwei Seiten Quelltext berschaut man noch wird es mehr sollte man die Funktion unter teilen Weiterhin gebe man im Entwicklungsstadium an kritischen Stellen die Werte mittels printf oder fprintf
99. sind Systemaufrufe Wer braucht sie Unterschied zu Standardfunktionen Welche Aufgaben erledigen die Systemaufrufe haupts chlich 46 KAPITEL 1 PROGRAMMIEREN IN C C 1 3 Bausteine eines Quelltextes 1 3 1 bersicht Alle Zeichen oder Zeichengruppen eines Programmes im Quellcode sind entweder Kommentar comment Namen identifier Schl sselw rter Wortsymbole keyword Operatoren operator Konstanten Literale constant literal Trennzeichen separator oder bedeutungslos Ein Quelltext Programmquelle Source ist ein Textfile bestehend aus Zeilen diese wieder um aus druck und sichtbaren Zeichen fast immer des US ASCII Zeichensatzes einschlie lich des Zwischenraums space Die Zeichen sind zu W rtern gruppiert die durch Trenn zeichen voneinander abgetrennt sind meist durch mindestens einen Zwischenraum Zeilen werden durch das Zeilenende markiert meist durch die ASCII Zeichen CR und oder LF Sinn einheiten wie W rter Zahlen oder Operatoren werden als Token bezeichnet sie d rfen nicht durch Trennzeichen oder Zeilenwechsel unterbrochen werden Kommentar ist nur f r den menschlichen Leser bestimmt und gelangt in C C gar nicht bis zum bersetzungsvorgang sondern wird schon vom Pr prozessor entfernt und kann bis auf seine Begrenzungen frei gestaltet werden Ebenso entfernt der Pr prozessor das Zeichen paar Backslash Zeilenwechsel und verbindet somit zwei Zeilen Auf diese Weise l
100. software and to any other program whose authors commit to using it Some other Free Software Foundation software is covered by the GNU Library General Public License instead You can apply it to your programs too When we speak of free software we are referring to freedom not price Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software and charge for this service if you wish that you receive source code or can get it if you want it that you can change the software or use pieces of it in new free programs and that you know you can do these things To protect your rights we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights These restrictions translate to certain responsi bilities for you if you distribute copies of the software or if you modify it For example if you distribute copies of such a program whether gratis or for a fee you must give the recipients all the rights that you have You must make sure that they too receive or can get the source code And you must show them these terms so they know their rights We protect your rights with two steps 1 copyright the software and 2 offer you this license which gives you legal permission to copy distribute and or modify the software Also for each author s protection and ours we want to make certain that everyone under stands that there is no warranty fo
101. time 2 verwendet time 2 liefert die Zeit in Sekunden seit 00 00 00 Greenwich Mean Time 1 Januar 1970 Computeruhren laufen brigens erstaunlich ungenau falls sie nicht durch eine Funkuhr oder ber das Netz syn chronisiert werden Ferner brauchen wir die Standardfunktion gmtime 3 Beschreibung unter ctime 3 die aus den obigen Sekunden eine Struktur erzeugt die Datum und Uhr zeit enth lt Die Umrechnung von Greenwich auf Karlsruhe nehmen wir selbst vor Eleganter w re ein R ckgriff auf die Zeitzonen Variable der Umgebung Laut Referenz Handbuch hat time 2 die Syntax long time long x 0 Die Funktion verlangt ein Argument vom Typ Pointer auf long integer und zwar im einfachs ten Fall den Nullpointer Der Returnwert ist vom Typ long integer Der gr te Wert dieses Typs liegt etwas ber 2 Milliarden Damit l uft diese Uhr etwa 70 Jahre Die Subroutine gmtime 3 hat die Syntax include lt time h gt struct tm qmtime clock long clock Die Funktion gmt ime 3 verlangt ein Argument clock vom Typ Pointer auf long integer Wir m ssen also den Returnwert von time 2 in einen Pointer umwandeln referenzieren Der R ckgabewert der Funktion gmt ime 3 ist ein Pointer auf eine Struktur namens tm Diese Struktur ist in der include Datei time h definiert Die include Dateien sind lesbarer Text es ist ratsam hineinzuschauen In der weiteren Beschreibung zu ctime 3 wird die Struktur tm erl utert struct tm
102. versteht sie ALGOL Weltweit arbeiten etwa 7300 Computer Die TH Karlsruhe erh lt einen SEL ER 56 der bis 1968 l uft An der Purdue University wird die erste Fakult t f r Informatik Department of Computer Science gegr ndet Texas Instruments und Fairchild nehmen die Serienproduktion von ICs Chips auf JOSEPH CARL ROBNETT LICKLIDER hat zwei Visionen den interaktiven Computer und das galaktische Netz wenn schon denn schon Er wird Direktor in der ARPA und geht an die Verwirklichung seiner Visionen Weltweit arbeiten etwa 16 500 Computer Erster geostation rer Satellit Syncom IVAN E SUTHERLAND entwickelt in seiner Doktorarbeit am MIT das Sketchpad einen grafischen Bildschirm mit Lichtgriffel und wird damit zum Vater der Computergrafik Die Programmiersprache BASIC erscheint DOUGLAS CARL ENGELBART erfindet am Stanford Research Institute die Maus und die Fenstertechnik IBM legt das Byte zu 8 Bits fest IBM 360 Ein Chip enth lt auf 0 5 cm 10 Transistoren Beginn des Betriebssystems MULTICS bei MIT Bell und General Electric Aus dessen Misserfolg erw chst sp ter UNIX Die TH Karlsruhe erh lt eine Electrologica X 8 die bis 1973 betrieben wird Gr ndung des Karlsruher Rechenzentrums Hewlett Packard steigt in die Computerei ein HP 2116 A Erster elektronischer Taschenrechner Texas Instruments IVAN E SUTHERLAND entwickelt an der Harvard University einen Helm mit binokularem Display und bringt damit die
103. verwenden nur intelligent verpackt Die Systemauf rufe haben eine etwas schwierigere Syntax erlauben daf r aber auch Dinge au erhalb des blichen Wer portabel f r verschiedene Betriebssysteme programmieren m chte bevorzugt die Standardfunktionen da sie die Unterschiede verdecken Wenn keine Gr nde dagegen sprechen nimmt man die Standardfunktionen Die UNIX Systemaufrufe sind in der Sektion 2 des Handbuchs zu finden die wichtigsten lauten open 2 close 2 read 2 und write 2 Hier ein Programmbeispiel Demo Systemaufruf open 2 finclude lt stdio h gt wegen puts 3 x include fcntl h wegen open 2 include unistd h wegen write 2 include lt string h wegen strlen 3 x int main int argc char x argv int fildes size_t bufsize ssize_t n char buffer UNIX ist prima if argc lt 2 puts Filenamen vergessen return 1 70 KAPITEL 1 PROGRAMMIEREN IN C C Za File muss bereits existieren fildes open argv 1 O WRONLY x File Deskriptor x bufsize size_t strlen buffer if fildes gt 2 puts open erfolgreich n write fildes void buffer bufsize if n bufsize puts write erfolgreich close fildes else puts Fehler bei open return 1 return 0 Quelle 1 26 C Programm Ausgabe per Systemaufruf write 2 Mittels open 2 ffnen wir die Datei deren
104. vor dass ein Pro gramm von anderen weiterentwickelt oder erg nzt wird zweitens ist ein Programm eine von mehreren M glichkeiten einen Algorithmus oder einen komplexen Zusammenhang darzu stellen Der Quellcode sollte daher leicht zu lesen programmiererfreundlich sein Fordern wir also menschenfreundliche Programme C l sst dem Programmierer viel Freiheit mehr als PASCAL Damit nun nicht jeder schreibt wie ihm der Schnabel gewachsen ist hat die Programmierergemeinschaft Regeln und Gebr uche entwickelt Ein Versto dagegen beeindruckt den Compiler nicht aber das Programm ist m hsam zu lesen Der Beautifier cb 1 automatisiert die Einhaltung einiger dieser Regeln weitergehende finden sich in NELSON FORD Programmer s Guide siehe Anhang B W KERNIGHAN P J PLAUGER Software Tools siehe Anhang ROB PIKE Notes on Programming in C pub pikestyle ps auf ftp ciw uni karlsruhe de Firmen Richtlinien wie Nixdorf Computer C Programmierrichtlinien Hausstandard 1985 K HENNING Portables Programmieren in C Programmierrichtlinien verfasst 1993 vom Hochschuldidaktischen Zentrum und vom Fachgebiet Kybernetische Verfahren und Didaktik der Ingenieurwissenschaften der RWTH Aachen im Auftrag von sechs Chemiefirmen Der Verbreitung dieser Richtlinien stehen leider ein Hinweis auf das Urheberrecht sowie ein ausdr ckliches Kopierverbot entgegen Ein und dieselbe Aufgabe kann von einfachen F llen abgesehen a
105. wie ein Ausdruck angesehen werden Der R ckgabewert return value darf nur ein einfacher Datentyp oder ein Pointer sein Will man einen String zur ckgeben geht das nur ber den Pointer auf den Anfang des Strings Der zur ckzugebende Wert braucht nicht eingeklammert zu werden bei zusammengesetzten Ausdr cken sollte man der Lesbar keit halber Klammern setzen return 0 return x y return arrayname Besteht das Ergebnis aus mehreren Werten so muss man mit globalen Variablen oder mit Pointern arbeiten Der R ckgabewert kann immer nur ein einziger Wert sein Es kommt vor dass eine Funktion zwar einen Wert zur ckgibt dieser aber nicht weiter verwendet wird In diesem Fall warnt lint 1 aber das Programm ist korrekt H ufig bei printf 3 und Verwandtschaft Den R ckgabewert der Funktion main findet man in der Shell Variablen oder status Er kann in einem Shellscript weiterverarbeitet werden Hier ein Beispiel f r den Gebrauch der return Anweisung 1 3 BAUSTEINE EINES QUELLTEXTES Beispiel fuer return Anweisungen 21 02 91 x define PI 3 14159 include lt stdio h gt Funktionsdeklarationen Prototypen x void text int eingabe double area float rad char xmaxi Hauptprogramm int main T r char w1 63 w2 63 text if leingabe puts Eingabe war richtig else puts Eingabe war falsch printf Radius eingeben Scanf S Sf amp r printf Kre
106. www jura uni muenster de netlaw Online Recht http www online recht de Computerrecht Beck Texte Beck M nchen 1994 U Dammann S Simitis Bundesdatenschutzgesetz Nomos Verlag Baden Baden 1993 606 S BDSG mit Landesdatenschutzgesetzen und Internationalen Vorschriften Texte kein Kommentar 17 245 G v Gravenreuth Computerrecht von A Z Beck Rechtsberater Beck M nchen 1992 H Hubmann M Rehbinder Urheber und Verlagsrecht Beck M nchen 1991 319 S A Junker Computerrecht Gewerblicher Rechtsschutz M ngelhaftung Arbeitsrecht Reihe Recht und Praxis Nomos Verlag Baden Baden 1988 267 S F Koch Handbuch Software und Datenbank Recht Springer Berlin Heidelberg 2003 1000 S D Kr ger M A Gimmy Handbuch zum Internetrecht Springer Berlin Heidelberg 2 Auflage 2002 1000 S Geschichte der Informatik Newsgruppen comp society folklore alt folklore computers de alt folklore computer Kleine Chronik der IBM Deutschland 1910 1979 Form Nr D12 0017 138 S 1980 1991 Form Nr D12 0046 82 S Reihe ber das Unternehmen IBM Deutschland Die Geschichte der maschinellen Datenverarbeitung Band 1 Reihe Enzyklop die der Informationsverarbeitung IBM Deutschland 228 S Form Nr D12 0028 100 Jahre Datenverarbeitung Band 2 Reihe Uber die Informationsverarbeitung IBM Deutschland 262 S Form Nr D12 0040 Open Source O Reilly K ln 1999 70 S P E Ceruzzi
107. x 3 log 4 x 5 y log 4 Ahnlich wie die Return Taste in der Kommandozeile bewirkt hier erst das Semikolon dass etwas geschieht 1 3 8 3 Kontrollanweisungen Kontrollanweisungen steuern in Abh ngigkeit von dem Wert eines booleschen Ausdrucks Bedingung die Abarbeitung von Programmteilen einzelnen Anweisungen oder Bl cken weshalb die Einrichtung auch Ablaufkontrolle genannt wird Die Kontrollanweisungen von C wie von vielen anderen Sprachen sind die Bedingung die Verzweigung die Auswahl die Schleife und der Sprung 74 KAPITEL 1 PROGRAMMIEREN IN C C Sequenz Die einfachste Kontrollanweisung ist keine die Anweisungen im Programm wer den der Reihe nach abgearbeitet Diese Ablaufform hei t Sequenz oder Folge und wird der Vollst ndigkeit halber erw hnt Bedingung Die Ausf hrung eines Blocks kann von einer Bedingung condition abh ngig gemacht werden Die Bedingung ist ein Ausdruck der nur die Werte true oder false an nimmt Ist die Bedingung true wird der Block abgearbeitet und dann im Programm fortge fahren Ist die Bedingung false wird der Block bersprungen Kann die Bedingung niemals true werden hat man toten unerreichbaren Code geschrieben Ist die Bedingung immer true sollte man auf sie verzichten In C wird die Bedingung mit dem Schl sselwort if eingeleitet ohne then im Unter schied zu einem Shellscript Besteht der Block nur aus einer einzigen Anweisung kann auf die geschweiften Klammern verzich
108. 0 0 1000 10 0 1001 10 1 0 183 184 ANHANG A ZAHLENSYSTEME 211 11010011 323 d3 10 1 1 212 11010100 324 d4 10 1 10 213 11010101 325 d5 10 1 11 214 11010110 326 d6 10 1 100 215 11010111 327 d7 10 1 101 216 11011000 330 d8 10 1 110 217 11011001 331 d9 10 1 111 218 11011010 332 da 10 1 1000 219 11011011 333 db 10 1 1001 220 11011100 334 dc 10 10 0 221 11011101 335 dd 10 10 1 222 11011110 336 de 10 10 10 223 11011111 337 df 10 10 11 224 11100000 340 e0 10 10 100 225 11100001 341 el 10 10 101 226 11100010 342 e2 10 10 110 227 11100011 343 e3 10 10 111 228 11100100 344 e4 10 10 1000 229 11100101 345 ed 10 10 1001 230 11100110 346 e6 10 11 0 231 11100111 347 e7 10 11 1 232 11101000 350 e8 10 11 10 233 11101001 351 e9 10 11 11 234 11101010 352 ea 10 11 100 235 11101011 353 eb 10 11 101 236 11101100 354 ec 10 11 110 237 11101101 355 ed 10 11 111 238 11101110 356 ee 10 11 1000 239 11101111 357 ef 10 11 1001 240 11110000 360 0 10 100 0 241 11110001 961 fl 10 100 1 242 11110010 362 f2 10 100 10 243 11110011 363 f3 10 100 11 244 11110100 364 f4 10 100 100 245 11110101 365 f5 10 100 101 246 11110110 366 f6 10 100 110 247 11110111 367 f7 10 100 111 248 11111000 370 f8 10 100 1000 249 11111001 371 f9 10 100 1001 250 11111010 372 fa 10 101 0 251 11111011 373 fb 10 101 1 252 11111100 374 fc 10 101 10 253 11111101 375 fd 10 101 11 254 11111110 376 fe 10 101 100 255 11111111 377 ff 10 101 101 B Zeichens tze B 1 EBCDIC ASCII Roman IB
109. 00 0000 0000 0000 0000 0000 0000 0000 0000 0000 4000 0000 2e62 7373 0000 0000 3000 0000 Diese Form ist f r einen Menschen nicht mehr verst ndlich stattdessen f r die Maschi ne weshalb sie als Maschinencode bezeichnet wird gelegentlich auch als Objektcode Ein Zur ck bersetzen in Assemblercode ist nur eingeschr nkt m glich Obige Form ist jedoch immer noch nicht ausf hrbar Wir verwenden eine Standard Funktion printf zur Ausgabe auf den Bildschirm Auch hinter dem W rtchen main ver birgt sich einiges Deren Code mu noch hinzugef gt werden dann kann die Maschine losle gen mit der Begr ung Diesen letzten Schritt vollzieht der Linker Der Anfang des ausf hr baren Programmes hallo exe sieht nicht besser aus als vorher der Umfang des Programm files ist gr er geworden 4d5a 0000 0400 0000 2000 2700 ffff 0000 6007 0000 5400 0000 0d0a 7374 7562 2e68 2067 656e 6572 6174 6564 2066 726f 6820 7374 7562 2e61 736d 2062 7920 646a 6173 6d2c 206f 6620 5475 6520 8861 6920 3330 2032 333a 3433 3a35 3820 3139 3936 0d0a 5468 6520 5354 5542 2e45 5845 2073 7475 Das m sste ein Programmierer schreiben g be es keine h heren Programmiersprachen Als Kontrast dazu ein kurzes Beispiel einer problemangepassten maschinenfernen Sprache SQL Die Aufgabe sei die Abfrage einer Datenbank die ihre Daten in Form von Tabellen mit Spalten und Zeilen h lt Genauer Das R ck bersetzen ist m glich das Ergebnis jedoch praktisch un
110. 1 54 C Programm Quadratwurzel 95 1 55 3 ui ee ee ee 96 1 56 C Programm Fakult t 2 97 1 57 C Programm Selbstaufruf main 97 1 58 C Programm 100 1 59 Assemblerfunktion 1 101 1 60 C Programm Stringverarbeitung 105 1 61 C Programm Mathematische Funktionen 106 1 62 C Programm Hallo 109 1 63 C Programm Umrechnung UTC MEZ llle 111 1 64 C Programm Geometrische Formen 115 1 65 C XSC Funktion defect 121 1 66 C XSC Programm einfacher Genauigkeit 121 1 67 C XSC Programm mehrfacher Genauigkeit 122 1 68 C XSC Programm mit Ein und Ausgabe 2 nen 122 1 69 C XSC Programm Intervall Newton Verfahren 124 1 70 Makefile zu ghello cpp 2 2 2 2 CC mn nn 125 171 Include Datei zu ghello cpp 125 172 C Programm ghello cpp 126 1 73 C Programm Primzahlen 129 1 74 Include Datei usr include stdio h 132 1 75 C Programm UmrechnungZahlenbasis 134 1 76 C Programm minimal es 137 177 C Programm einfachs
111. 110000 160 70 1 1 10 p 113 1110001 161 71 1 1 11 q 114 1110010 162 72 1 1 100 r 115 1110011 163 73 1 1 101 S 116 1110100 164 74 1 1 110 t 117 1110101 165 75 1 1 111 u 118 1110110 166 76 1 1 1000 119 1110111 167 77 1 1 1001 w 120 1111000 170 78 1 10 0 x 121 1111001 171 79 1 10 1 y 122 1111010 172 7a 1 10 10 129 1111011 178 7b 1 10 11 124 1111100 174 Ve 1 10 100 125 1111101 175 7d 1 10 101 126 1111110 176 Te 1 10 110 127 1111111 177 f 1 10 111 del 128 10000000 200 80 1 10 1000 129 10000001 201 81 1 10 1001 130 10000010 202 82 1 11 0 131 10000011 208 83 1 11 1 132 10000100 204 84 1 11 10 133 10000101 205 85 1 11 11 134 10000110 206 86 1 11 100 135 10000111 207 87 1 11 101 136 10001000 210 88 1 11 110 137 10001001 211 89 1 11 111 138 10001010 212 8a 1 11 1000 139 10001011 213 8b 1 11 1001 140 10001100 214 8c 1 100 0 141 10001101 215 8d 1 100 1 142 10001110 216 8e 1 100 10 143 10001111 217 8f 1 100 11 144 10010000 220 90 1 100 100 145 10010001 221 91 1 100 101 146 10010010 222 92 1 100 110 147 10010011 223 93 1 100 111 148 10010100 224 94 1 100 1000 149 10010101 225 95 1 100 1001 150 10010110 226 96 1 101 0 151 10010111 227 97 1 101 1 152 10011000 230 98 1 101 10 153 10011001 231 99 1 101 11 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200
112. 1101 111110 111111 1000000 1000001 1000010 1000011 1000100 1000101 1000110 1000111 1001000 1001001 1001010 1001011 1001100 1001101 1001110 1001111 1010000 1010001 1010010 1010011 1010100 1010101 1010110 1010111 1011000 1011001 1011010 1011011 1011100 1011101 1011110 1011111 1100000 117 120 121 122 123 124 125 126 127 130 131 132 133 134 135 136 137 140 100 0 100 1 100 10 100 11 100 100 100 101 100 110 100 111 100 1000 100 1001 101 0 101 1 101 10 101 11 101 100 101 101 101 110 101 111 101 1000 101 1001 110 0 110 1 110 10 110 11 110 100 110 101 110 110 110 111 110 1000 110 1001 111 0 111 1 111 10 111 11 111 100 111 101 111 110 111 111 111 1000 111 1001 1000 0 1000 1 1000 10 1000 11 1000 100 1000 101 1000 110 1000 111 1000 1000 1000 1001 1001 0 1001 1 1001 10 1001 11 1001 100 1001 101 1001 110 181 GO OO AO OS h ba Oe SE br bd ii EI DEI 0 Oo ZEr naun b i D COD MH A 182 ANHANG A ZAHLENSYSTEME 97 1100001 141 61 1001 111 a 98 1100010 142 62 1001 1000 b 99 1100011 143 63 1001 1001 c 100 1100100 144 64 1 0 0 d 101 1100101 145 65 1 0 1 e 102 1100110 146 66 1 0 10 f 103 1100111 147 67 1 0 11 g 104 1101000 150 68 1 0 100 h 105 1101001 151 69 1 0 101 i 106 1101010 152 6a 1 0 110 1 107 1101011 153 6b 1 0 111 k 108 1101100 154 6c 1 0 1000 1 109 1101101 155 6d 1 0 1001 m 110 1101110 156 De 1 1 0 n 111 1101111 157 6f 1 1 1 112 1
113. 12 Binary 12 Bindung dynamische 12 Bindung statische 12 Block 137 Botschaft C 109 Bottom up Entwurf 16 break C 74 77 Bubblesort 28 Builder 21 C C9 C 5 9 Obfuscated C 171 Objective C 10 C 5 9 C XSC 10 118 CK 9 calloc 3 158 case C 74 cast Operator 71 cb 13 20 45 252 cc 11 19 CC 11 ccom 11 cdecl 50 cflow 27 45 Chaos Computer Club 225 char C 52 chatr 41 chmod 45 ci RCS 29 close 38 69 co RCS 29 COBOL 7 Codierung Programm 10 13 Common Gateway Interface 167 compact Speichermodell 108 Compiler 3 11 19 Compiler Treiber 11 Compilerbau 5 compress 1 136 Computer Aided Software Engineering 33 Concurrent Versions System 33 Configuration Management 33 configure make 22 const C 50 Constructor 110 Container 117 continue C 75 77 Contra vermes 24 core 44 creat 45 Cross Compiler 11 ctime 36 curses 3 106 141 curses h 106 141 cxref 28 45 Datei Datei 137 Deskriptor 69 Include D 130 204 Kennung 12 Mode 41 mtime 21 Pointer 70 Strukturtyp 55 System 173 Datenaustausch 16 Datenstruktur 16 49 Debugger absoluter D 23 symbolischer D 23 default C 74 Definition 49 Deklaration 49 dekrementieren 65 69 delta 33 SACHVERZEICHNIS dereferenzieren 57 68 DIN 66230 135 Disassembler 12 do while Schleife C 75 Dokumentation 134 Dotprecision 120 double C 52 Doxygen 136 Dualsystem 180 dynamische Bindung 12 dynamische Speicher
114. 21 S Einf hrung in die C Standard Library einschl der STL D Lewine POSIX Programmer s Guide O Reilly Sebastopol 1991 634 S Mit Referenz der ANSI C und der POSIX Funktionen D Libes Obfuscated C and Other Mysteries Wiley New York 1993 413 S S Lippman J Lajoie C Primer Addison Wesley Boston 3 Aufl 1998 1296 S Verbreitetes Lehrbuch f r Anf nger enth lt auch ANSI C N Matthew R Stones Beginning Linux Programming Wrox Press Chicago 1999 950 S N Matthew R Stones Professional Linux Programming Wrox Press Chicago 2000 1155 S Betriebssystemnahe Fragen der Programmierung in C C T Misfeldt et al The Elements of C Style Cambridge University Press 2004 182 S Regeln f r gute C Programme S Oualline Practical C Programming O Reilly Sebastopol 1997 451 S S Oualline Practical C Programming O Reilly Sebastopol 1995 581 S P J Plauger J Brodie Referenzhandbuch Standard C Vieweg Braunschweig 1990 236 S P J Plauger The Standard C Library Prentice Hall Englewood Cliffs 1991 498 S Die Funktionen der C Standardbibliothek nach ANSI P J Plauger The Draft Standard C Library Prentice Hall Englewood Cliffs 1994 590 S Die Funktionen der C Standardbibliothek nach ANSI R Robson Using the STL Springer Berlin Heidelberg 1998 421 S M Schader S Kuhlins Programmieren in C Springer Berlin Heidelberg 1998 386 S Lehrbuch und Nachschlagewerk mit Ubu
115. 3 static XSegment segments 350 100 380 280 380 280 450 300 unsigned long myforeground fg color unsigned long mybackground x bg color int myscreen i num 2 del 1 win 1 char text 10 initialization if mydisplay XOpenDisplay fprintf stderr Cannot initiate a display connection exit 1 myscreen DefaultScreen mydisplay display screen x T default pixel values ybackground WhitePixel mydisplay myscreen yforeground BlackPixel mydisplay myscreen 3 3 Specification of window position and size yhint x 200 myhint y 300 yhint width 550 myhint height 450 yhint flags PPosition PSize 33 3x ll x window creation ywinl XCreateSimpleWindow mydisplay DefaultRootWindow mydisplay myhint x myhint y myhint width myhint height 5 myforeground mybackground XSetStandardProperties mydisplay mywinl hallo hallo None argv argc amp myhint 3 myhint x 400 myhint y 400 myhint width 700 myhint height 200 myhint flags PPosition PSize mywin2 XCreateSimpleWindow mydisplay DefaultRootWindow mydisplay myhint x myhint y myhint width myhint height 5 myforeground mybackground creation of a new window x XSetStandardProperties mydisplay mywin2 Hallo Hallo None argv argc amp myhint pixmap creation mypixma
116. 3 call by reference auf die einzulesende Variable als zweites Argument den gew nschten Typ in Form eines Strings Auf eine wechselnde Anzahl von Argumenten ver zichten wir hier Falls wir nicht f r jeden einzulesenden Typ eine eigene Funktion schreiben wollen mu xread einen Pointer auf einen beliebigen Typ sprich void bernehmen Erst nach Aus wertung des zweiten Argumentes wei xread auf was f r einen Typ der Pointer zeigt Das Programm l uft in seiner obigen Fassung einwandfrei der Syntax Pr fer lint 1 hat aber einige Punkte anzumerken 1 11 7 3 Arrays und Pointer Das folgende Programm berechnet die Primzahlen von 2 angefangen bis zu einer oberen Grenze die beim Aufruf eingegeben werden kann Ihr Maximalwert h ngt verst ndlicher weise vom System ab Aus Geschwindigkeitsgr nden werden reichlich Pointer verwendet Urspr nglich wurden die Elemente der Arrays ber Indizes angesprochen was den Gewohn heiten entgegenkommt Bei der Optimierung wurden alle Indizes durch Pointer ersetzt wie im Abschnitt 1 11 4 Optimierung auf Seite 140 erl utert Programm zur Berechnung von Primzahlen 1990 10 03 x Compileraufruf MS DOS QuickC qcl prim c Compileraufruf unter UNIX cc o prim prim c DUNIX Die groesste zu untersuchende Zahl wird unter MS DOS durch die Speichersegmentierung bestimmt Kein Daten segment p darf groesser als 64 KB sein Damit liegt MAX etwas ueber 150000 Unter UNIX begrenzt
117. 4 101 145 65 102 146 66 103 147 67 104 150 68 105 151 69 106 152 6a 107 153 6b 108 154 6c 109 155 6d 110 156 6e 111 157 6f 112 160 70 113 161 71 114 162 72 115 163 73 116 164 74 117 165 75 118 166 76 119 167 77 120 170 78 121 171 79 122 172 7a 123 173 7b 124 174 Ve 125 175 7d 126 176 Te 127 177 7f 128 200 80 129 201 81 130 202 82 131 203 83 132 204 84 133 205 85 134 206 86 135 207 87 136 210 88 137 211 89 138 212 8a 139 213 8b 140 214 8c 141 215 8d 142 216 8e 143 217 8f 144 220 90 145 221 91 146 222 92 147 223 93 148 224 94 149 225 95 150 226 96 151 227 97 152 230 98 un 5 em n m 6 H H vn Rn no De oD dt pa ho bh nh in sa es hs hj vs pu ri s2 s3 de p2 ts cc sg eg SS Grave accent Latin small letter a Latin small letter b Latin small letter c Latin small letter d Latin small letter e Latin small letter f Latin small letter g Latin small letter h Latin small letter i Latin small letter j Latin small letter k Latin small letter 1 Latin small letter m Latin small letter n Latin small letter o Latin small letter p Latin small letter q Latin small letter r Latin small letter s Latin small letter t Latin small letter u Latin small letter v Latin small letter w Latin small letter x Latin small letter y Latin small letter z Left curly bracket Vertical line Right curly bracket Tilde Delete del Padding character pad High octet preset hop
118. 41 242 243 244 245 246 247 248 249 250 251 252 253 254 255 320 321 322 323 324 325 326 327 330 331 332 333 334 335 336 337 340 341 342 343 344 345 346 347 350 951 952 353 354 355 356 357 360 361 362 363 364 365 366 367 370 371 372 373 374 375 376 377 do di d2 d3 ENEE EE ff MACACA OO OO Zu momo ms ome O ge en B mo gx 9 mi E OOO 6 Di ra Er om age Set 195 Latin capital letter eth Icelandic Latin capital letter n with tilde Latin capital letter o with grave Latin capital letter o with acute Latin capital letter o with circumflex Latin capital letter o with tilde Latin capital letter o with diaresis Multiplication sign Latin capital letter o with stroke Latin capital letter u with grave Latin capital letter u with acute Latin capital letter u with circumflex Latin capital letter u with diaresis Latin capital letter y with acute Latin capital letter thorn Icelandic Latin small letter sharp s German Latin small letter a with grave Latin small letter a with acute Latin small letter a with circumflex Latin small letter a with tilde Latin small letter a with diaresis Latin small letter a with ring above Latin small letter ae Latin small letter c with cedilla Latin small letter e with grave Latin small letter e with acute Latin small letter e with circumflex Latin small letter e with diaresis Latin small lett
119. 6 6 Digit six 055 067 37 7 Digit seven 056 070 38 8 Digit eight 057 071 39 9 Digit nine 058 072 3a Colon 059 073 3b Semicolon 060 074 3c Less than sign 061 075 3d Equals sign 062 076 3e gt Greater than sign 063 077 3f Question mark 064 100 40 Commercial at 065 101 41 A Latin capital letter a 066 102 42 B Latin capital letter b 067 103 43 Latin capital letter c 068 104 44 D Latin capital letter d 069 105 45 E Latin capital letter e 070 106 46 F Latin capital letter f 071 107 47 G Latin capital letter g 072 110 48 H Latin capital letter h 073 111 49 I Latin capital letter 1 074 112 4a J Latin capital letter j 075 113 4b K Latin capital letter k 076 114 4c L Latin capital letter 1 077 115 4d M Latin capital letter m 078 116 4e N Latin capital letter n 079 117 4f O Latin capital letter o 080 120 50 P Latin capital letter p 081 121 51 Q Latin capital letter q 082 122 52 R Latin capital letter r 083 123 53 S Latin capital letter s 084 124 54 T Latin capital letter t 085 125 55 U Latin capital letter u 086 126 56 V Latin capital letter v 087 127 57 W Latin capital letter w 088 130 58 X Latin capital letter x 089 131 59 Y Latin capital letter y 090 132 5a Z Latin capital letter z 091 133 5b Left square bracket 092 134 5c Reverse solidus 093 135 5d Right square bracket 094 136 5e is Circumflex accent 095 137 5f Low line B 4 LATIN 1 150 8859 1 096 140 60 097 141 61 098 142 62 099 143 63 100 144 6
120. 7 2 Zuweisung Eine Zuweisung assignment weist einer Variablen einen Wert zu Der Operator ist das Gleichheitszeichen ohne Doppelpunkt wie in PASCAL wegen Faulheit Das Gleichheitszei chen darf von Spaces umgeben sein und sollte es wegen der besseren Lesbarkeit auch Wert und Variable sollten vom selben Typ sein Es gibt zwar in C automatische Typumwandlungen aber man sollte wenig Gebrauch davon machen Sie f hren zu den ber chtigten unlesbaren C Programmen und gef hrden die Portabilit t Da ein Ausdruck wie eine Summe oder eine entsprechende Funktion einen Wert abliefert kann in einer Zuweisung anstelle des Wertes immer ein Ausdruck stehen Die Zuweisung selbst liefert den zugewiesenen Wert zur ck und kann daher als Wert in einem bergeordne ten Ausdruck auftreten Auf der rechten Seite einer Zuweisung kann alles stehen was einen Wert hat beispiels weise eine Konstante ein berechenbarer Ausdruck oder eine Funktion aber kein Array und damit auch kein String Solche Glieder werden als r Werte r value bezeichnet Auf der linken Seite einer Zuweisung kann alles stehen was einen Wert annehmen kann beispiels weise eine Variable aber keine Konstante und keine Funktion Diese Glieder hei en I Werte I value Eine Zuweisung ist keine mathematische Gleichung Die Formel r rz cl 1 1 ist als Gleichung f r jeden endlichen Wert von x falsch als Zuweisung dagegen ist sie ge br uchlich und bedeutet Addiere 1 zu dem Wert von x
121. 7 bl Bell bel 008 010 08 bs Backspace bs 009 011 09 ht Character tabulation ht 010 012 0a If Line feed If 011 013 Ob vt Line tabulation vt 012 014 Oc ff Form feed ff 013 015 0d cr Carriage return cr 014 016 0e so Shift out so 015 017 of si Shift in si 016 020 10 dl Datalink escape dle 017 021 11 di Device control one del 018 022 12 d2 Device control two dc2 019 023 13 d3 Device control three dc3 020 024 14 d4 Device control four dc4 021 025 15 nk Negative acknowledge nak 022 026 16 Sy Synchronous idle syn 023 027 17 eb End of transmission block etb 024 030 18 cn Cancel can 025 031 19 em End of medium em 026 032 la sb Substitute sub 027 033 1b ec Escape esc 028 034 lc fs File separator is4 029 035 1d gs Group separator is3 030 036 le rs Record separator is2 031 0377 1f us Unit separator 151 032 040 20 sp Space 033 041 21 Exclamation mark 034 042 22 i Quotation mark 035 043 23 Number sign 036 044 24 Dollar sign 037 045 25 Percent sign 038 046 26 amp Ampersand 192 ANHANG B ZEICHENS TZE 039 047 27 7 Apostrophe 040 050 28 Left parenthesis 041 051 29 Right parenthesis 042 052 2a Asterisk 043 053 2b Plus sign 044 054 2 Comma 045 055 2d Hyphen Minus 046 056 2e i Full stop 047 057 2f Solidus 048 060 30 0 Digit zero 049 061 31 1 Digit one 050 062 32 2 Digit two 051 063 33 3 Digit three 052 064 34 4 Digit four 053 065 35 5 Digit five 054 066 3
122. A History of Modern Computing MIT Press Cambridge USA 1998 400 S Computergeschichte seit 1945 aus nordamerikanischer Sicht O A W Dilke Mathematik Ma e und Gewichte in der Antike Universalbibliothek Nr 8687 2 Reclam Stuttgart 1991 135 S M Hauben R Hauben Netizens On the History and Impact of Usenet and the Internet IEEE Computer Society Press Los Alamitos 1997 345 S www columbia edu hauben netbook A Hodges Alan Turing Enigma Kammerer amp Unverzagt Berlin 1989 680 S D M Lehmann Der EDV Pionier Nikolaus Joachim Lehmann Dr H nsel Hohenhausen Frankfurt M 2002 S Levy Hackers Heroes of the Computer Revolution Penguin Books London 1994 455 S R Oberliesen Information Daten und Signale Deutsches Museum rororo Sachbuch Nr 7709 vergriffen D Shasha C Lazere Out of Their Minds Springer Berlin Heidelberg 1995 295 S Biografien ber hmter Computerpioniere 246 18 19 ANHANG H ZUM WEITERLESEN D Siefkes u a Pioniere der Informatik Springer Berlin Heidelberg 1998 160 S Interviews mit f nf europ ischen Computerpionieren B Sterling A short history of the Internet ftp ftp ciw uni karlsruhe de pub docs history origins 1993 6 S ASCII K Zuse Der Computer Mein Lebenswerk Springer Berlin Heidelberg 3 Aufl 1993 220 8 Autobiografie Konrad Zuses Allgemeinwissen und Philosophie Newsgruppen comp ai philosophy sci philosophy tech alt fan hofstadte
123. AL D nenn 18 8 Kommentar 4 322060 Er I ESEG SEE 1 854 Namen IARE BE eer ete dete e nter Ed L35 Schl sselw rter see A E RN EG RR REUS L3 6 Operandem 522155 RYE Sa AE ine 1 3 6 1 Konstanten und Variable 1 3 6 2 Typen 6 1 3 6 3 Einfache Typen 1 3 6 4 Zusammengesetzte Typen Arrays Strukturen 1 3 6 5 SUDIO n aa eaa ar NEM et at a 1 8 6 6 Aufz hlungstypen vi INHALT vii 13 67 Pointer Zeiger es 56 1 3 6 8 Weitere Namen f r Typen typedef 61 13 69 Speicherklassen CC mm nennen 62 13 6 10 Geltungsbereich 63 1 3 6 11 Lebensdauer annaa 64 1583 Operationen 2 2 405 eu ee ee 64 L3 Lb Ausdr cker aa wenn wen ne ee t NA 64 1 3 7 2 Zuweisung oi 2 eh 64 1 3 7 3 Arithmetische Operationen 00 65 1 3 7 4 Logische Operationen 66 1 8 7 5 Vergleiche ua bote wa Fre ER 67 1 3 7 6 Bitoperationen 68 1 3 7 7 stointeroperationen 68 1 3 7 8 Ein und Ausgabe Operationen 69 1 3 7 9 Sonstige Operationen 71 1 3 7 10 Vorrang und Reihenfolge 2 72 1 3 8 Anweisungen ebe ua A Ber A ek a e Due 73 13 81 Leere Anweisun
124. AN Compilern Hewlett Packard Microsoft lassen sich durch einen einfachen Interface Aufruf Routinen fremder Sprachen so verpacken dass man sie ber nehmen kann ohne sich um Einzelheiten k mmern zu m ssen 1 2 9 3 Beispiel Datei Informationen access stat open close In einem weiteren Beispiel wollen wir mithilfe von Systemaufrufen Informationen ber eine Fatei gewinnen dazu noch eine Angabe aus der Sitzungsumgebung Die Teile des Programms lassen sich einfach in andere C Programme bernehmen Dieses Programm soll beim Aufruf zur Laufzeit in der Kommandozeile den Namen der Datei als Argument bernehmen wie wir es von UNIX Kommandos her kennen Dazu ist ein bestimmter Formalismus vorgesehen int main int argc char xargv char envp Die Funktion main bernimmt die Argumente argc argv und gegebenenfalls envp Das Argument argc ist der Argument Counter eine Ganzzahl Sie ist gleich der Anzahl der Ar gumente in der Kommandozeile beim Aufruf des Programms Das Kommando selbst ist das erste Argument also hat argc mindestens den Wert 1 Das Argument argv ist der Argu ment Vector ein Array of Strings also ein Array of Arrays of Characters Der erste String Index 0 ist das Kommando die weiteren Strings sind die mit dem Kommando bergebenen Argumente hier der Name der gefragten Datei Der Environment Pointer envp wird nur ben tigt falls man Werte aus der Umgebung abfragt Es ist wie argv ein Array of Strings 38 KA
125. Auch hier gibt es abgek rzte Schreibweisen amp Der Ausdruck y amp X bedeutet dasselbe wie y Mk X Die Operanden y und x werden bitweise durch Und verkn pft das Ergebnis wird y zugewie sen Entsprechendes gilt f r die beiden anderen Abk rzungen Der Unterschied zwischen einer ausdrucksweisen und einer bitweisen logischen Ope ration ist folgender In C gilt der Zahlenwert 0 als logisch falsch false jeder Wert ungleich 0 als logisch wahr true Die Zeilen int x 0 if x printf if ZweigNin else printf else Zweig n f hren zur Ausf hrung des else Zweiges Die Variable x hat den Wert 0 bei dem auch al le Bits auf 0 stehen Sowie ein beliebiges Bit auf 1 stiinde hatte die Variable einen Wert ungleich 0 und wtirde als wahr angesehen Die ausdrucksweise Negation J 0x prrintf ee kehrt die Verh ltnisse um der if Zweig wird ausgef hrt Die bitweise Negation h tte hier zwar denselben Erfolg w re jedoch nicht sinnvoll da die einzelnen Bits nicht interessieren Der Buchstabe G wird in 7 bit ASCII durch die Bitfolge 1000111 dargestellt Ihre bitweise Negation ist 0111000 was der Ziffer 8 entspricht Das Mini Programm x Bitweise Negation x include lt stdio h gt int main char x G printf c c n x X return 0 1 3 BAUSTEINE EINES QUELLTEXTES 67 Quelle 1 24 C Programm zur Veranschaulichung der bitweisen Negation gibt den Buchstaben G und die Ziffer
126. Configuration Management 33 Software Engineering 13 Source Code Control System 33 Speicher dynamische Verwaltung 158 Register 62 Segmentierung 108 Speichermodell 19 108 Speicherbedarf 50 Speicherklasse C auto 62 64 extern 62 register 62 static 62 64 Speicherplatz C 49 splint 20 Sprung C 77 srand 3C 144 srandom 3M 144 Standard C Bibliothek 103 Standard Mathematik Bibliothek 105 Standardbibliothek 103 108 Standard Template Library 117 256 stat 38 static C 62 145 statische Bindung 12 stdio h 104 130 144 stdlib h 144 string 38 String 54 58 157 String Deskriptor 36 string h 104 Stringfunktion 104 strings 28 45 strip 45 strncmp 38 struct C 54 Structured Query Language 5 Struktur Datenstruktur 16 49 Programmstruktur 15 16 Strukturverweis C 68 Subarray 119 switch C 74 Syntax Diagramm 46 Syntax Pr fer 20 sys stat h 38 Systemaufruf 34 104 196 Target make 21 Template 117 terminfo 4 141 Texinfo 137 Textfile 46 time 24 35 45 time 2 144 time h 144 times 25 tiny Speichermodell 108 Token 46 Top down Entwurf 15 Treiber Compilertreiber 19 Trennzeichen C 46 Typ abstrakter Datentyp 109 alphanumerischer T 52 Array 53 Attribut 50 Aufz hlungstyp 56 Bitfeld 55 173 boolescher T 53 cdotprecision 120 char 52 character 173 cidotprecision 120 cimatrix 119 cinterval 118 civector 119 cmatrix 119 SACHVERZEICHNIS complex 118 const 50 cvector 119 dotprecision
127. Die ersten sechs sind in ihrer Bedeutung gleich die weiteren gelten bei Argumenten in der Kommandozeile Die Norm ISO IEC 9899 1999 sieht fiir C Programme die unter einem Betriebssystem laufen hosted environment nur die beiden folgenden Formen vor int main void int main int argc char argv und das reicht auch Unter POSIX konformen Betriebssystemen kann ein drittes Argument hinzukommen das die Umgebung environment pointer enth lt int main int argc char argv char envp Den R ckgabewert von main sollte man nicht dem Zufall berlassen sondern mit einer return Anweisung ausdr cklich festlegen 0 bei Erfolg Er wird von der Shell bernommen 92 KAPITEL 1 PROGRAMMIEREN IN C C 1 4 5 Funktionen mit wechselnder Argumentanzahl Mit main haben wir eine Funktion kennengelernt die eine wechselnde Anzahl von Argu menten bernimmt Auch f r andere Funktionen als main gibt es einen Mechanismus zu diesem Zweck schauen Sie bitte unter varargs 5 nach Der Mechanismus ist nicht ber m ig intelligent sondern an einige Voraussetzungen gebunden Es mu mindestens ein Argument vorhanden sein der Typ des ersten Arguments mu bekannt sein esmu ein Kriterium f r das Ende der Argumentliste bekannt sein Die erforderlichen Makros stehen in den include Dateien lt varargs h gt f r UNIX Sys tem V oder lt stdarg h gt f r ANSI C Wir erkl ren die Vorgehensweise an einem Beispiel das der Fun
128. Dokumentationen n mlich HTML Seiten die mit einem WWW Browser gelesen werden Trotz der erweiterten M glichkeiten Unterteilung eines um fangreichen Themas Hyperlinks Grafik dieser neueren Formate sind die d rren man Seiten immer noch am weitesten verbreitet Inhaltlich sind sie den Hilfen anderer Betriebssysteme ohnehin haushoch berlegen 1 11 Weitere C Programme 1 11 1 Name Obwohl es aus den bisherigen Beispielen klar geworden sein m te weisen wir nochmals darauf hin Jedes selbst ndige C Programm hei t im Quellcode main ein anderer Pro grammname kommt au er im Kommentar nirgends im Quelltext vor in FORTRAN oder PASCAL sieht die Sache anders aus Der Name der Datei in der der kompilierte Code steht ist der Name unter dem das Programm aufgerufen wird Der Name der Datei in der der Quellcode zu finden ist hat die Kennung c die meis ten Programmierwerkzeuge erwarten das Die UNIX Compiler schreiben standardm ig das kompilierte Programm in eine Datei namens a out Microsoft Quick C nimmt den Namen des Quellfiles ohne die Kennung In beiden F llen kann man mit der Compiler Option o f r das Ausgabefile einen beliebigen anderen Namen vereinbaren 1 11 2 Aufbau Wir kennen nun die Bausteine aus denen sich ein Programm zusammensetzt Wie sieht ein vollst ndiges Programm aus Zun chst einige Begriffe zum Aufbau von Programmen Die kleinste Einheit die etwas bewirkt ist die Anweisung Mehrere Anweisungen
129. EEZE MORSE entwickelt einen aus zwei Zeichen plus Pausen bestehenden Telegrafencode der die Buchstaben entsprechend ihrer H ufigkeit codiert GEORGE BOOLE entwickelt die symbolische Logik JOHANN PHILIPP REIS erfindet das Telephon ELIPHALET REMINGTON and Sons NY stellen au er Gewehren und N hmaschinen auch Schreibmaschinen her 1886 trennen sie sich vom Schreibmaschinenbereich der sp ter den Namen Remington Rand und noch sp ter den Namen Sperry Rand tr gt ALEXANDER GRAHAM BELL erh lt ein Patent auf sein Telefon Gr ndung der Bell Telephone Company Aus Bell Telephone Co wird American Telephone Telegraph Co HERMAN HOLLERITH erfindet die Lochkartenmaschine und setzt sie bei einer Volksz hlung in den USA ein Das ist der Anfang von IBM OTTO LUEGERs Lexikon der gesamten Technik f hrt 225 226 1895 1896 1898 1900 1910 1918 1924 1930 1932 1937 1938 1939 1941 1942 1943 1944 1945 1946 1948 ANHANG G ZEITTAFEL unter dem Stichwort Elektrizit t als Halbleiter ther Alkohol Holz und Papier auf Erste bertragungen mittels Radio ALEXANDER POPOW GUGLIELMO MARCONI Gr ndung der Tabulating Machine Company der sp teren IBM VALDEMAR POULSEN erfindet die magnetische Aufzeichnung von T nen Telegraphon 01 Januar 1900 00 00 00 GMT Nullpunkt der gegenw rtigen NTP Ara eine NTP Ara umfasst 136 Jahre Gr ndung der Deutschen Hollerith Maschinen GmbH Berlin der
130. EZ um mez cpp Beispiel fuer den Gebrauch einer Klasse in Anlehnung an Deitel Deitel S 601 x include lt iostream h gt fuer Ein und Ausgabe class TIME Definition einer Klasse public nach aussen sichtbar Methoden TIME Default Constructor Initialisierung void Settime int int h m in UTC setzen void Gettime UTC einlesen von stdin void Printmez MEZ ausgeben private nicht nach aussen sichtbar Daten int hour 0 23 int minute 0 59 int hin min Eingabe von stdin D I Definition der Methoden Initialisierung mittels Constructor TIME TIME hour minute 0 Zeit in UTC eingeben pruefen 1 6 KLASSEN 111 void TIME Settime int h int m hour h gt 0 amp amp h lt 23 h 1 0 UTC nach MEZ minute m gt 0 amp amp m lt 60 m 0 Zeit in UTC von stdin einlesen void TIME Gettime cout Stunde eingeben cin hin cout Minuten eingeben cin min cout Vielen Dank endl TIME Settime hin min Umrechnung MEZ ausgeben void TIME Printmez cout hour 10 O0 hour ls minute lt 10 O0 minute endl Hauptprogramm Rahmen oder Treiberprogramm int main TIME t Erzeugung des Objektes t cout nDie Anfangszei
131. Eigenschaften an niedrigere vererben Klassen haben eine genau definierte Schnittstelle In terface zum Rest des Programms ihr Innenleben bleibt verborgen Was sie tun ist bekannt wie sie es tun geht niemanden etwas an Diese scharfe Trennung von Innen und Au en ist wesentlich f r den Klassenbegriff Was f r C Funktionsbibliotheken sind das sind f r C Klassenbibliotheken Die Programmierarbeit besteht zu einem gro en Teil im Schreiben von Klassen Wie eine Variable die Verwirklichung Realisierung Instantiierung eines Typs ist so ist ein Objekt eine Instanz einer Klasse Von einer Klasse k nnen beliebig viele Objekte abgeleitet werden Klassen und deren Objekte sind die Bausteine eines objektorientierten Programms C hie anfangs C mit Klassen Neben C ist eine zweite objektorientierte Erweiterung von C entstanden die unter dem Namen Objective C in Verbindung mit dem Betriebssystem NeXT eine gewisse Verbreitung gefunden hat Der GNU C Compiler unterst tzt sowohl C wie Objective C ansonsten ist es ziemlich still geworden um diese Sprache Es kommen noch ein paar Dinge hinzu um das Programmieren zu erleichtern aber das Wesentliche am objektorientierten Programmieren ist dass die Aufgabe nicht mehr in Mo dule zerlegt wird die aus Anweisungen bestehen sondern in voneinander unabh ngige Ob jekte die sich Mitteilungen oder Botschaften schicken Die Objektorientierung setzt bei der Aufgabenanalyse ein nicht erst bei der Umsetz
132. Einf hrung in C C Wulf Alex 2008 Karlsruhe Copyright 2000 2008 by Wulf Alex Karlsruhe Permission is granted to copy distribute and or modify this document under the terms of the GNU Free Documentation License Version 1 2 or any later version published by the Free Software Foundation with no Invariant Sections no Front Cover Texts and no Back Cover Texts A copy ofthe license is included in the section entitled GNU Free Documentation License on page 218 Ausgabedatum 18 November 2008 Email alex weingarten t online de Dies ist ein Skriptum Es ist unvollst ndig und enth lt Fehler Gesch tzte Namen wie UNIX oder PostScript sind nicht gekennzeichnet Geschrieben mit dem Texteditor vi formatiert mit TEX unter Debian GNU Linux Die Skripten liegen unter folgenden URLs zum Herunterladen bereit http www alex weingarten de skripten http www abklex de skripten Besuchen Sie auch die Seiten zu meinen B chern http www alex weingarten de debian http www abklex de debian Von dem Skriptum gibt es neben der Normalausgabe eine Ausgabe in kleinerer Schrift 9 Punkte in gro er Schrift 14 Punkte sowie eine Textausgabe f r Leseprogramme Screen reader There is an old system called UNIX suspected by many to do nix but in fact it does more than all systems before and comprises astonishing uniques Vorwort Die Skripten richten sich an Leser mit wenigen Vorkenntnissen in der Elektronischen Dat
133. Font mydisplay mygcl XLoadFont mydisplay vrb 25 break process keyboard mapping changes case MappingNotify XRefreshKeyboardMapping amp myevent Quelle 1 95 C Programm fiir das X Window System mit Funktionen der Xlib Bibliothek Die Xlib Biliothek stellt die unterste Stufe der X11 Bibliotheken dar Nach M glichkeit verwendet man h here Bibliotheken die ihrerseits auf der Xlib aufsetzen Man erspart sich damit viel M he 1 11 WEITERE C PROGRAMME 167 1 11 11 cgi Programme Die Abk rzung cgi bedeutet Common Gateway Interface Das ist ein Protokoll zum Gedan kenaustausch zwischen HTML Forms und Programmen Die Programme k nnen in jeder Sprache verfasst sein die es erm glicht von stdin zu lesen nach stdout zu schreiben und au erdem Umgebungsvariable auszuwerten Obwohl viele derartige Programme Perl Skripte sind siehe Abschnitt Forms und cgi Scripts auf Seite ist das nicht zwingend ein C Programm tut es genau so gut und ist schneller lt DOCTYPE html PUBLIC W3C DTD HTML 4 0 EN gt lt l cgi_test html Teil einer Imlpementation der CGI Schnittstelle in C gt lt HTML gt lt HEAD gt lt TITLE gt Test lt TITLE gt lt HEAD gt lt BODY gt lt FORM action cgi bin cgi_test cgi method get gt lt Method get is deprecated gt lt H2 gt GET Formular lt H2 gt lt INPUT type hidden name foobar value 42 gt lt
134. GOL Programms aus K Nickel nach C zu compilieren mit cc o ggt ggt c x include lt stdio h gt int main PN aye by Ky e ZE while 1 Eingabe puts ggT von a und b nach Euklid puts Beenden mit Eingabe 0 printf Bitte a und b eingeben scanf d d ka amp b Beenden falls a oder b gleich 0 x if a 0 b 0 exit 0 x muss den groesseren Wert aus a und b enthalten if a gt b x else x x Euklid x while r x y x y y ue Ausgabe printf d und d haben den ggT d n a b y Quelle 1 101 C Programm ggT nach Euklid Der auch nach UNIX Ma st ben karge Dialog des ALGOL Programms wurde etwas an gereichert die got o Schleifen wurden durch while Schleifen ersetzt und der ALGOL Behelf zur Berechnung des Divisionsrestes ent ier durch die in C vorhandene Modulo Operation Bei einem Vergleich mit dem Programm 1 55 C Programm ggt nach Euklid rekursiv auf Seite 96 sieht man wie unterschiedlich selbst ein so einfacher Algorithmus programmiert werden kann Dazu kommen andere Algorithmen zur L sung derselben Aufgabe beispiels weise das Ermitteln aller Teiler der beiden Zahlen und das Herausfischen des ggT 1 13 3 bertragen von FORTRAN nach C Gegeben sei ein einfaches Programm zur L sung quadratischer Gleichungen in FORTRAN77 Loesung der quadratischen Gleichung axx xx b x c 0 reelle
135. HH HH HH HH HH KH AH KA HH kk E PRIM amp PRIM operator if prim_number 2 Test auf 2 prim_numbert 2 1 3 naechste Primzahl prim_count Inkrementierung der Anzahl return this aktuelles Objekt zurueckgeben Lor Xt ewige Schleife bis break prim number 2 naechste ungerade Zahl int prim flag 1 true int haelfte prim number 2 for int i 3 i haelfte i 2 if prim number i i prim number prim flag 0 false teilbar break if prim flag break Verlassen der e S prim_count Inkrementierung der Anzahl return this aktuelles Objekt zurueckgeben KK KKK KK KK KKK x Hauptprogramm x RK KKK KKK KK KKK int main int argc char argv int max Obergrenze PRIM pzahl Erzeugung des Objektes pzahl Obergrenz rmitteln if argc gt 1 sscanf x argv 1 Sd amp max else cout Obergrenz ingeben cin max Veberschrift ausgeben 1 9 PR PROZESSOR 129 cout nPrimzahlen bis max inkl n n Primzahlen berechnen und ausgeben while pzahl get prim lt max cout pzahl get prim n naechste Primzahl mittels Operator pzahl Schlussbemerkung cout Gesamtzahl pzahl get_count 1 n n return 0 Quelle 1 73 C Programm zur Berechnung von Primzahlen Im Hauptp
136. IEREN IN C C Profiler Quelltext oder code ausf hrbarer Code bersetzer Compiler Interpreter Systemaufruf Standardfunktion Versionsverwaltung Folgende Kommandos sollten beherrscht werden cc oder gcc tint Anf nge von make Anf nge von RCS ci co 1 2 11 Memo Programmer s Workbench Die Programmquellen werden mit einem Editor geschrieben Mit dem Syntaxpr fer lint 1 l t sich die syntaktische Richtigkeit von C Programmen pr fen leider nicht die von C Programmen Schon bei kleinen Programmierprojekten ist das Werkzeug make 1 dringend zu emp fehlen Der Compileraufruf vereinfacht sich wesentlich Auch f r Texte verwendbar Mit einem Compiler wird der Quellcode in den Maschinencode des jeweiligen Prozessors bersetzt Der schwerste Hammer bei der Fehlersuche ist ein Debugger lernbed rftig aber nicht immer vermeidbar Programmfunktionen aber auch andere Dateien lassen sich in Bibliotheken archivie ren die bequemer zu handhaben sind als eine Menge von einzelnen Funktionen Bei gr eren Projekten kommt man nicht um ein Kontrollsystem wie RCS oder CVS herum vor allem dann wenn mehrere Personen beteiligt sind Das Lernen kostet Zeit die aber beim Ringen mit dem Chaos mehr als wettgemacht wird CASE Tools vereinigen die einzelnen Werkzeuge unter einer gemeinsamen Benutzero berfl che Der Programmierer braucht gar nicht mehr zu wissen was ein Compiler ist Systemaufrufe sind die Verbin
137. IEREN IN C C csumme csumme c csv o csr o CC o csumme csumme c csv o csr o CC csv c CC c csr c fsumme fsumme c fsr o CC o fsumme fsumme c fsr o LDFLAGS ESEL fsSr f S FC c fsr f clean rm 0 Quelle 1 8 Makefile mit Makros und Dummy Zielen Zun chst werden einige Makros definiert z B der Compileraufruf cc berall wo im Make file das Makro mittels CC aufgerufen wird wird es vor der Ausf hrung w rtlich ersetzt Auf diese Weise kann man einfach einen anderen Compiler w hlen ohne im ganzen Makefile per Editor ersetzen zu m ssen Dann haben wir ein Dummy Ziel all das aus einer Auf z hlung weiterer Ziele besteht Mittels make all wird dieses Dummy Ziel erzeugt d h die aufgez hlten Ziele Unter diesen befindet sich auch eines namens clean das ohne Zutaten daherkommt und offenbar nur bestimmte T tigkeiten wie das L schen tempor rer Datei en bezweckt Ein Dummy Ziel ist immer out of date die zugeh rigen Kommandos werden immer ausgef hrt make 1 darf rekursiv aufgerufen werden ein Makefile darf make Aufrufe enthalten die sich auf andere Makefiles beziehen Das kann so aussehen cd subdirectory make all make clean Gelangt make an diese Zeile springt es in das Unterverzeichnis sucht dort ein Makefile und erzeugt die Ziele all und clean Anschlie end macht es im Makefile des aktuellen Verzeich nisses weiter Eine Anwendung ist ein aus mehreren Kapiteln bestehendes S
138. INPUT type text name eingabe gt lt INPUT type submit gt lt FORM gt lt HR gt lt FORM action cgi bin cgi_test cgi method post gt lt H2 gt POST Formular lt H2 gt lt INPUT type hidden name foobar value 42 gt lt INPUT type text name eingabe gt lt INPUT type submit gt lt FORM gt lt BODY gt lt HTML gt Quelle 1 96 Webseite cgi_test html mit FORM Elementen zum Ausprobieren der cgi Schnittstelle Ein Benutzer ruft mittels seines Brausers eine Webseite auf die ein FORM Element ent h lt Was das im einzelnen ist tut hier nichts zur Sache und kann in HTML Anleitungen nachgelesen werden Unter den Attributen des FORM Elements finden sich action und method Die action gibt den vollst ndigen oder relativen URL des Programms an das auf dem Webserver ausgef hrt werden soll Hinter method findet sich entweder post oder get wobei letzteres veraltet deprecated in HTML 4 0 ist Der Benutzer gibt in die Webseite verschiedene Werte ein die durch die INPUT Elemente n her spezifiert sind und dr ckt dann ein Kn pfchen das submit oder hnlich hei t Darauf hin verlangt der Brauser vom WWW den unter action genannten URL unter Beif gung der eingegebenen Werte Der Webserver stellt fest dass eines seiner cgi Skripte verlangt wird und ruft dieses auf x cgi h Teil einer Implementation der CGI Schnittstelle in C 36Etwas v llig anderes sind aktive Inhalte Anweisungen in Javascript
139. Knopfes verantwortlich zeichnen Diese Vorgehenswei se l t sich verallgemeinern Um ein neues Widget zu entwickeln geht man von einem in der Bibliothek bereits vorhandenen aus das in seinen Eigenschaften dem gew nschten Ergebnis m glichst nahe kommt und schreibt nur diejenigen Funktionen neu die sich unterscheiden beziehungsweise dazukommen Signale und Slots gestalten die Kommunikation zwischen verschiedenen Programmteilen Ein Widget z B ein Knopf sendet bei einem bestimmten Ereignis der Knopf wird vom Be nutzer bet tigt ein Signal aus in diesem Fall das Signal clicked das vorher mit einem Slot in einem anderen Programmteil verbunden wurde Viele Widgets beinhalten deararti ge Slots selbstverst ndlich kann man auch in seinen eigenen Klassen Funktionen als Slots deklarieren Um eigene Klassen mit Slots zu implementieren ist die Verwendung des Meta Object Compilers moc vonn ten der auf die Klassendeklaration angewandt einige Makros ersetzt dieser Schritt ist notwendig da das Konzept von Signalen und Slots nicht in C enthalten ist blicherweise wird man die Klassendeklarationen in einer Include Datei unterbringen auf das dann der Meta Object Compiler angewandt wird Die Ausgabe von moc leitet man in eine Datei mit der Kennung moc um die anstelle der Include Datei mit den Klassendekla rationen eingebunden wird Das folgende Beispiel besteht aus einem Makefile einer Include Datei und dem eigentli chen Programm Da
140. Koeffizienten Loesungen auch komplex program quad real x2 real eps 176 KAPITEL 1 PROGRAMMIEREN IN C C complex xlc x2c data eps 1 0e 30 write Loesung von axx x bxx c 0 write x x Bitte a b und c eingeben read a b c e 1 Fall a nahe Null lineare Gleichung if abs a lt eps then write x WARNUNG a nahe Null 1 Null angenommen if abs b lt eps then write x WARNUNG auch b nahe Null 1 Unsinn goto 100 else write x Loesung x c b goto 100 endif else G Berechnung der Diskriminanten d o d bxb 4 0xaxc h ata e e 2 Fall ine oder zwei reelle Loesungen o if d oe 0 0 then S sqrt d xl b s h x2 b s h write x Eine oder zwei reell 1 Loesungen write x xl 7 x1 write x x x2 x2 goto 100 3 Fall konjugiert komplexe Loesungen e else r b h s sqrt d h xlc cmplx r s x2c cmplx r s write Konjugiert komplexe 1 Loesungen write x xl xlc write x2 x2c goto 100 endif endif e Programmende 100 stop end Quelle 1 102 FORTRAN Programm Quadratische Gleichung mit reellen Koeffizienten Eine Analyse des Quelltextes ergibt Das Programm besteht aus einer Datei mit einem Hauptprogramm es kommen reelle und komplexe Variable vor 1 13
141. L D while scanf d amp n EOF printf Nn d Fakultaet ist d n n n fak n 1 4 FUNKTIONEN 97 return 0 funktion fak int fak int n return n lt 1 1 n x fak n 1 Quelle 1 56 C Programm zur rekursiven Berechnung der Fakult t Weitere rekursiv l sbare Aufgaben sind die T rme von Hanoi und Quicksort Rekursive Probleme lassen sich auch iterativ l sen Das kann sogar schneller gehen aber die Eleganz bleibt auf der Strecke Da in C auch das Hauptprogramm main eine Funktion ist die auf gleicher Stufe mit allen anderen Funktionen steht kann es sich selbst aufrufen Experimentelles Programm mit Selbstaufruf von main include lt stdio h gt int main puts Selbstaufruf von main main return 13 Quelle 1 57 C Programm in dem main sich selbst aufruft Das Programm wird von lint 1 nicht beanstandet einwandfrei kompiliert und l uft bis der Speicher platzt da die Rekursionstiefe nicht begrenzt ist Abbruch mit break Aller dings ist ein Selbstaufruf von main ungebr uchlich 1 4 3 Assemblerroutinen Auf die Assemblerprogrammierung wurde in Abschnitt 1 1 4 Programmiersprachen auf Sei te 7 bereits eingegangen Da das Schreiben von Programmen in Assembler m hsam ist und die Programme nicht portierbar sind l t man nach M glichkeit die Finger davon Es kann jedoch zweckm ig sein einfache kurze Funktionen auf Assembl
142. M PC Die Zeichens tze sind in den Ein und Ausgabeger ten Terminal Drucker gespeicherte Ta bellen die die Zeichen in Zahlen und zur ck umsetzen dezimal oktal EBCDIC ASCII 7 Roman8 IBM PC 0 nul nul nul nul 1 1 soh soh soh Grafik 2 2 stx stx stx Grafik 3 3 etx etx etx Grafik 4 4 pf eot eot Grafik 5 5 ht enq enq Grafik 6 6 le ack ack Grafik 7 7 del bel bel bel 8 10 bs bs Grafik 9 11 rlf ht ht ht 10 12 smm If If lf 11 13 vt vt vt home 12 14 ff ff ff ff 13 15 cr cr cr cr 14 16 so so so Grafik 15 17 si si si Grafik 16 20 dle dle dle Grafik 17 21 del del del Grafik 18 22 dc2 dc2 dc2 Grafik 19 23 dc3 dc3 dc3 Grafik 20 24 res dc4 dc4 Grafik 21 25 nl nak nak Grafik 22 26 bs syn syn Grafik 23 27 il etb etb Grafik 24 30 can can can Grafik 25 EN em em em Grafik 26 32 cc sub sub Grafik 27 33 esc esc Grafik 28 34 ifs fs fs cur right 29 35 igs gs gs cur left 30 36 irs rs rs cur up 91 37 ius us us cur down 32 40 ds space space space 33 41 sos 34 42 fs ie z 35 43 36 44 byp 37 45 If 38 46 etb amp amp amp 39 47 esc f 40 50 41 51 42 52 sm 43 53 185 186 ANHANG B ZEICHENS TZE 44 54 45 55 enq 46 56 ack 47 57 bel 48 60 0 0 0 49 61 1 1 1 50 62 syn 2 2 2 51 63 3 3 3 52 64 pn 4 4 4 53 65 rs 5 5 5 54 66 uc 6 6 6 55 67 eot 7 7 7 56 70 8 8 8 57 71 9 9 9 58 72 59 73 60 74 dc4 61 75 nak 62 76 gt gt gt 63 77 sub
143. MIT Press Cambridge 1996 547 S Siehe auch http www ciw uni karlsruhe de kopien jargon Begriffe aus dem Netz die nicht im Duden stehen 2 Informatik Newsgruppen comp alles was mit Computer Science zu tun hat mehrere hundert Untergruppen de comp dito deutschsprachig alt comp W Coy Aufbau und Arbeitsweise von Rechenanlagen Vieweg Braunschweig 1992 367 S Digitale Schaltungen Rechnerarchitektur Betriebssysteme am Beispiel von UNIX T Flik H Liebig Mikroprozessortechnik Springer Berlin Heidelberg 1998 585 S CISC RISC Systemaufbau Assembler und C 234 235 W K Giloi Rechnerarchitektur Springer Berlin Heidelberg 1999 488 S G Goos Vorlesungen ber Informatik Band 1 Grundlagen und funktionales Programmieren Springer Berlin Heidelberg 1997 394 S Band 2 Objektorientiertes Programmieren und Algorithmen Springer Berlin Heidelberg 1999 396 S Band 3 Berechenbarkeit formale Sprachen Spezifikationen Springer Berlin Heidelberg 1997 284 S Band 4 Paralleles Rechnen und nicht analytische L sungsverfahren Springer Berlin Heidelberg 1998 292 S i44www info uni karlsruhe de i44www goos buch html D E Knuth The Art of Computer Programming 3 B nde Addison Wesley Boston Klassiker stellenweise mathematisch 7 B nde geplant Band 4 soll 2004 fertig sein Band 5 im Jahr 2009 Homepage des Meisters www cs staff stanford edu uno index html W Schiffmann R Schmitz
144. Motif Users s Guide OSF Motif Programmer s Guide OSF Motif Programmer s Reference Prentice Hall Englewood Cliffs 1990 F Culwin An X Motif Programmer s Primer Prentice Hall New York 1994 344 S T M K Dalheimer KDE Anwendung und Programmierung O Reilly Sebastopol 1999 321 S K Gottheil u a X und Motif Springer Berlin Heidelberg 1992 694 S N Mansfield The Joy of X Addison Wesley Boston 1993 368 S Als Einstieg f r Anwender geeignet A Nye XLib Programming Manual O Reilly Sebastopol 1990 635 S Einf hrung in X11 und den Gebrauch der XLib V Quercia T O Reilly X Window System Users Guide O Reilly Sebastopol 1990 749 S Einf hrung in X11 f r Anwender R J Rost X and Motif Quick Reference Guide Digital Press Bedford 1993 400 S Textverarbeitung mit LaTeX K Braune J Lammarsch M Lammarsch LaTeX Springer Berlin Heidelberg 2004 700 S M K Dalheimer LaTeX kurz amp gut O Reilly K ln 2000 72 S H Kopka LaTeX 3 B nde Band 1 Einf hrung Addison Wesley Bonn 2000 520 S Band 2 Erg nzungen Addison Wesley Bonn 1997 456 S Band 3 Erweiterungen Addison Wesley Bonn 1996 512 S Standardwerk im deutschen Sprachraum L Lamport Das LaTeX Handbuch Addison Wesley Bonn 1995 360 S 10 11 239 H Partl u a LaTeX Kurzbeschreibung ftp ftp ciw uni karlsruhe de pub docs latex lkurz ps gz ftp ftp ciw uni karlsruhe de pub docs latex lkurz tar gz 1990 46 S Posts
145. O THE EXTENT PERMITTED BY APPLICABLE LAW EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND OR OTHER PARTIES PROVIDE THE PROGRAM AS IS WITHOUT WARRANTY OF ANY KIND EITHER EXPRES SED OR IMPLIED INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU SHOULD THE PROGRAM PROVE DEFECTIVE YOU ASSUME THE COST OF ALL NECESSARY SERVICING REPAIR OR CORRECTION IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER OR ANY OTHER PARTY WHO MAY MODIFY AND OR RE DISTRIBUTE THE PROGRAM AS PERMITTED ABOVE BE LIABLE TO YOU FOR DAMAGES INCLUDING ANY GENERAL SPECIAL INCIDENTAL OR CONSEQUENTIAL DAMAGES ARI SING OUT OF THE USE OR INABILITY TO USE THE PROGRAM INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SU STAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES END OF TERMS AND CONDITIONS 218 ANHANG F GNU LIZENZEN Appendix How to Apply These Terms to Your New Pro grams If you develop a new program and you want it to be ofthe greatest possible use to the public the best way to achieve this is to make it free software which everyone can redistribute and change under these terms To do so a
146. PITEL 1 PROGRAMMIEREN IN C C Die Namen argc argv und envp sind willk rlich aber blich Typ und Reihenfolge sind vorgegeben Die Umgebung besteht aus Strings mit Kommando set Shell anschauen In der for Schleife werden die Strings nacheinander mittels der Funktion strncmp 3 siehe string 3 mit dem String LOGNAME verglichen Das Ergebnis ist der Index i des ge suchten Strings im Array envp Den Systemaufruf access 2 finden wir in der Sektion 2 des Referenz Handbuches Er untersucht die Zugriffsm glichkeiten auf eine Datei und hat die Syntax int access char path int mode Der Systemaufruf erwartet als erstes Argument einen String n mlich den Namen der Datei Wir werden hierf r argv 1 einsetzen Als zweites steht eine Ganzzahl die die Art des gefragten Zugriffs kennzeichnet Falls der gefragte Zugriff m glich ist liefert access 2 den Wert null zur ck der in einem C Programm zugleich die Bedeutung von logisch falsch FALSE hat und deshalb in den i Zeilen negiert wird Den Systemaufruf stat 2 finden wir ebenfalls in Sektion 2 Er ermittelt Dateiinforma tionen aus der Inode und hat die Syntax include lt sys types h gt include sys stat h int stat path buf char xpath struct stat xbuf Sein erstes Argument ist wieder der Dateiname das zweite der Name eines Puffers zur Auf nahme einer Struktur die die Informationen enth lt Diese Struktur vom Typ stat ist in der include Date
147. Pr fix oder den Postfix verwendet ist der Pr fix i unter Umst nden schneller und daher zu bevorzugen Ferner gibt es noch eine abgek rzte Schreibweise f r h ufig wiederkehrende Operationen 4 r Der Ausdruck y ES weist die Summe der beiden Operanden dem linken Operanden zu und ist somit gleichbedeu tend mit dem Ausdruck VM tx Entsprechendes gilt f r die anderen Abk rzungen Die ausf hrliche Schreibweise bleibt wei terhin erlaubt Die Division f r ganze Zahlen ist eine andere Operation als f r Gleitkommazahlen die b rigen Operationen auch nur f llt es da nicht auf In manchen Programmiersprachen werden folgerichtig unterschiedliche Operatoren verwendet in C nicht Der Compiler entnimmt aus dem Zusammenhang welche Division gemeint ist Diese Mehrfachverwendung eines Ope rators wird berladung genannt und spielt in objektorientierten Sprachen wie C eine Rolle In FORTRAN das den komplexen Zahlentyp kennt gelten die arithmetischen Opera toren auch f r diesen Vorstellbar ist ebenso eine Addition Verkettung von Strings 66 KAPITEL 1 PROGRAMMIEREN IN C C 1 3 7 4 Logische Operationen Die logischen Operationen sind bitweise Negation not Tilde ausdrucksweise Negation not bitweises Und and amp ausdrucksweises Und and amp amp bitweises exklusives Oder xor Circumflex caret bitweises inklusives Oder or ausdrucksweises inklusives Oder or
148. Rotlichtviertel 0 Urliste in der Statistik 0 was zum Essen 1 was zum Spielen 1 Halbleiterbaustein 2 Hund 1 starker Whisky 0 Zeiger auf Daten Adresse 2 Hotelboy 1 englisch Seite in einem Buch 1 Untergliederung eines Speichers 2 was manchen Politikern fehlt 1 Schriftzeichen 2 Wasserfall 0 208 Betriebssystem Traktor Treiber Animator Hackbrett emulieren Font Server Yabbawhap Terminal Ampersand ANHANG E KARLSRUHER TEST Konzern 0 betriebsinternes Telefonsystem 0 wichtigstes Programm im Computer 2 Papiereinzugsvorrichtung 2 landwirtschaftliches Fahrzeug 1 Zahl beim Multiplizieren 0 Hilfsperson bei der Jagd 1 Programm zum Ansprechen der Peripherie 2 Vorarbeiter 0 was zum Trinken 1 Unterhalter 1 Programm f r bewegte Grafik 2 Musikinstrument 1 Werkzeug im Hackbau 0 Tastatur 2 nachahmen 2 l in Wasser verteilen 0 entpflichten 0 Menge von Schriftzeichen 2 So engrundlage 1 Hintergrund Geldmenge 0 Brettsegler 0 Kellner 0 Computer f r Dienstleistungen 2 Datenkompressionsprogramm 2 Kriegsruf der S dstadt Indianer 0 was zum Essen 0 Schnittstelle Mensch Computer 2 Bahnhof oder Hafen 1 Zubeh r zu Drahttauwerk 1 Sand aus der Amper 1 et Zeichen Kaufmanns Und 2 Untiefe im Wattenmeer 0 Alias Buscontroller Algol Dram Diskette Directory Dekrement Sprungbefehl
149. SEN R Sedgewick Algorithmen in C Addison Wesley Bonn 1992 742 S J Stoer R Bulirsch Numerische Mathematik Springer Berlin Heidelberg 1 Teil 1999 378 S 2 Teil 2000 375 S Betriebssysteme Newsgruppen comp os de comp os L Bic A C Shaw Betriebssysteme Hanser M nchen 1990 420 S Allgemeiner als Tanenbaum Woodhull A S Tanenbaum A S Woodhull Operating Systems Design and Implementation Prentice Hall London 1997 939 S Einf hrung in Betriebssysteme am Beispiel von UNIX A S Tanenbaum Modern Operating Systems Prentice Hall London 1992 728 S Allgemeiner und moderner als vorstehendes Buch erl utert MS DOS UNIX MACH und Amoeba A S Tanenbaum Distributed Operating Systems Prentice Hall London 1994 648 S H Wettstein Systemarchitektur Hanser M nchen 1993 514 S Grundlagen kein bestimmtes Betriebssystem Linux UNIX allgemein Newsgruppen comp unix comp sources unix comp std unix de comp os unix alt unix wizards M J Bach Design of the UNIX Operating System Prentice Hall London 1987 512 S Dateisystem und Prozesse wenig zur Shell S R Bourne Das UNIX System V The UNIX V Environment Addison Wesley Bonn 1988 464 S Einf hrung in UNIX und die Bourne Shell P H Ganten W Alex Debian GNU Linux Springer Berlin Heidelberg 2004 970 S Einrichtung Konfiguration und Betrieb von Debian GNU Linux J Gulbins K Obermayr Snoopy Linux Springer Berlin Heid
150. Seite wurde bereits im Abschnitt Wo schl gt man nach auf Seite erl utert Hier geht es um die technische Herstellung Hilfreich sind die man Seiten zu man 1 und man 5 Das Kommando man 1 sucht die Dokumentationen in den durch die Umgebungs Variable MANPATH bekannten Verzeichnissen Das ist heute eine lange Aufz hlung oft l nger als die unter PATH Vom Benutzer eingerichtete oder erstellte man Seiten liegen vor allem unter usr local man usr share man e opt x man In diesen Verzeichnissen finden sich f r jede Sektion von 1 bis 9 bis zu vier Arten von Unter verzeichnissen catx e catx Z manx manx Z wobei f r x die Sektionsnummer einzusetzen ist Die Z Verzeichnisse enthalten die Do kumentationen komprimiert mit compress 1 unter LINUX mit GNU zip die bei den anderen Verzeichnisse die unkomprimierten Texte Die man Verzeichnisse enthal ten nroff 1 Quelltexte die cat Verzeichnisse die formatierten druckfertigen Texte Im Verzeichnis usr share man man1 2 findet sich beispielsweise die Datei 15 1 mit der komprimierten nroff Quelle der man Seite zum Kommando 1s 1 Gegebe nenfalls liegt unter usr share man man1 die entkomprimierte nroff Quelle Unter usr share man cat1 2 und usr share man cat1 liegen die formatierten Seiten Mittels cat usr share man catl Z ls 1 uncompress more k nnte man sich eine man Seite anschauen mit man 1 geht es einfacher Will man selbst eine man Seite schr
151. Shellscript angegeben das eine C Funktion aufruft die in diesem Fall ein selbst ndiges Programm Funktion main sein mu Der von einer Funktion zur ckgegebene Wert R ckgabewert kann nur ein einfacher Typ oder ein Pointer sein Zusammengesetzte Typen wie Arrays Strings oder Strukturen k nnen nur durch Pointer zur ckgegeben werden Es ist zul ssig keinen Wert zur ckzu geben Dann ist die Funktion vom Typ void und macht sich allein durch ihre Nebeneffekte bemerkbar F r die Systemaufrufe von UNIX und die Standardfunktionen von C ist im Referenz Handbuch in den Sektionen 2 und 3 angegeben von welchem Typ die Argumente und der Funktionswert sind Da diese Funktionen allesamt C Funktionen sind lassen sie sich ohne Probleme in C Programme einbinden Bei anderen Sprachen ist es denkbar daf kein einem C Typ entsprechender Variablentyp verf gbar ist Auch bei Strings gibt es wegen der unterschiedlichen Speicherung in den einzelnen Sprachen Reibereien Falls die bergabeme chanismen unvertr glich sind muf man die C Funktion in eine Funktion oder Prozedur der anderen Sprache so verpacken daf das aufrufende Programm eine einheitliche Program miersprache sieht Das Vorgehen dabei kann maschinenbezogen sein was man eigentlich vermeiden will In den folgenden Programmbeispielen wird die Summe aus zwei Summanden berechnet zuerst im Hauptprogramm direkt und dann durch zwei Funktionen die ihre Argumente die Summanden by value be
152. Technische Informatik Springer Berlin Heidelberg 1993 94 1 Teil Grundlagen der digitalen Elektronik 282 S 2 Teil Grundlagen der Computertechnik 283 S K W Wagner Einf hrung in die Theoretische Informatik Springer Berlin Heidelberg 1994 238 S Grundlagen Berechenbarkeit Komplexit t BOOLEsche Funktionen Automaten Grammatiken Formale Sprachen Algorithmen Numerische Mathematik Newsgruppen sci math J L Bentley Programming Pearls Addison Wesley Boston 1999 256 S Pfiffige Algorithmen und Programmierideen G Engeln M llges F Reutter Formelsammlung zur Numerischen Mathematik mit C Programmen BI Wissenschaftsverlag Mannheim 1990 744 S Algorithmen und Formeln der Numerischen Mathematik samt C Programmen G Engeln M llges F Uhlig Numerical Algorithms with C Springer Berlin Heidelberg 1996 596 S D E Knuth Algorithmen deutsche bersetzung von Fundamental Algorithms Springer Berlin Heidelberg 2004 700 S K Loudon Mastering Algorithms in C O Reilly Sebastopol 1999 560 S T Ottmann P Widmayer Algorithmen und Datenstrukturen BI Wissenschafts Verlag Mannheim 1993 755 S W H Press u a Numerical Recipes in C Cambridge University Press 1993 994 S H R Schwarz Numerische Mathematik Teubner Stuttgart 1993 575 S R Sedgewick Algorithmen in C Addison Wesley Bonn 1992 742 S Erkl rung gebr uchlicher Algorithmen und Umsetzung in C 236 ANHANG H ZUM WEITERLE
153. ULL while query N0 einen Parameter extrahieren last gt key query do querytt while query N0 query amp query 1 N0 if query N0 querytt in key und value splitten last gt value last gt key do last gt valuett t while last gt value N0 amp amp last gt value if xlast value N0 x last gt valuet xx Tripel umwandeln unescape_str last gt key unescape_str last gt value last t return first Quelle 1 99 C Funktionen zum Programm cgi_test c Nun wird es spannend Wie erf hrt das cgi Skript hier ein C Programm von den vom Benutzer eingegebenen Werten Bei der Methode get stehen die Werte als ein langer String in der Umgebungs Variablen QUERY_STRING bei der Methode post wird der String von stdin gelesen Der Rest besteht im Aufdr seln parsen des Strings der Verarbeitung der einzelnen Werte und der Ausgabe eines HTML konformen Dokumentes nach stdout Die ses Dokument schickt der Webserver an den anfragenden Brauser zur ck Das wars Fehler macht man vor allem bei den Kleinigkeiten wie G nsef chen oder Semikolons Ein gro er Teil des Programms besteht wie blich im Abfangen unzul ssiger Eingaben Bedenken Sie dass wildfremde Benutzer dieses Programm auf Ihrem WWW Server starten Lesen Sie das Programmbeispiel und weitere aus dem Netz Dort finden sich
154. Vorl uferin der IBM Deutschland Das Enigma Verschl sselungsverfahren entwickelt Aus der Tabulating Machine Company von HERMAN HOLLERITH sp ter in Computing Tabulating Recording Company umbenannt wird die International Business Machines IBM EDWIN LINK baut anstatt Pianos und Orgeln wie sein Vater einen mechanischen Flugsimulator f r bungs und Vergn gungszwecke und erh lt ein Patent darauf Der Link Trainer erlangt Verbreitung Die Firma AEG baut das erste Tonbandger t mit dem Namen Magnetophon Die B nder dazu liefert die BASF ALAN TURING ver ffentlicht sein Computermodell KONRAD ZUSE stellt den programmgesteuerten Rechner Z 1 fertig Ein sp terer Nachbau schafft 1 Rechenoperation pro Sekunde Elektronische bin re Addiermaschine von JOHN VINCENT ATANASOFF und CLIFFORD BERRY Iowa State University zur L sung linearer Gleichungssysteme KONRAD ZUSE stellt die Z 2 fertig Gr ndung der Firma Hewlett Packard Palo Alto Kalifornien durch WILLIAM HEWLETT und DAVID PACKARD Ihr erstes Produkt ist ein Oszillator f r Tonfrequenzen Messtechnik KONRAD ZUSE stellt die Z 3 fertig Die Purdue University beginnt mit der Halbleiterforschung und untersucht Germaniumkristalle Der Computer Colossus Bletchley Park Buckinghamshire UK entschl sselt deutsche Milit rnachrichten Enigma IBM Chef THOMAS WATSON sch tzt den weltweiten Bedarf an Computern auf 5 f nf St ck Die Zuse Z 4 wird fertig 2200 Relais mechan
155. X s 3 s 3 X s 4 e Q s 4 s 4 amp s 5 s 5 s 5 Die Fragezeichen deuten an dass diese Speicherstelle nicht mit einem bestimmten Wert belegt ist Der Zugriff ist erlaubt was darin steht ist nicht abzusehen Man darf nicht davon ausgehen dass Strings immer mit Spaces initialisiert werden oder Zahlen mit Null Wir deklarieren nun ein zweidimensionales Array von Ganzzahlen eine nicht quadratische Matrix int a 3 4 die mit folgenden Werten belegt sei 1 5 9 Im Arbeitsspeicher steht dann folgendes 2 3 4 6 7 8 0 112 m Pointer 2 Pointer 1 Speicher Wert Variable a m ol e 1 x a a 0 a 0 0 1 o a 0 4 1 o 2 a 0 1 a 0 1 2 o a 0 2 3 a 0 2 a 0 2 3 lt gt a 0 3 4 0 3 a 0 3 2 4 a l all lt 5 xa 1 a 1 0 5 o ol 1 lt gt 6 a 1 1 a 1 1 6 o ajl 4 2 e 7 a 1 2 a 1 2 7 o ajl 4 3 o 8 a 1 3 a 1 3 8 a 4 2 a 2 o 9 xa 2 a 2 0 9 o a 2 4 1 o 10 a 2 1 a 2 1 10 o a 2 4 2 e 11 a 2 2 2 2 11 e a 2 4 3 o 12 a 2 3 a 2 3 12 Der Pointer 2 Ordnung a zeigt auf ein Array aus 3 Pointern 1 Ordnung a 0 all und a 2 Die Pointer 1 Ordnung 0 all und a 2 zeigen ihrerseits auf 3 Arrays bestehend aus je 4 Ganzzahlen Gespeichert sind 12 Ganzzahlen die
156. Y CERF ver ffentlichen das Konzept von TCP IP anfangs Kahn Cerf Protokolle genannt In der Bundesrepublik arbeiten rund 170 000 Computer Der Commodore PET 2001 ein Vorl ufer des C64 kommt heraus 4 bis 32 kbyte Arbeitsspeicher Bildschirm 25 Zeilen zu 40 Zeichen Erste Tabellenkalkulation Visicalc f r den Apple II von DAN BRICKLIN und BOB FRANKSTON Harvard University Erste Fassung von TEX DONALD ERVIN KNUTH ver ffentlicht Das Network Time Protocol NTP wird in Gebrauch genommen Faxdienst in Deutschland eingef hrt Beginn des Usenet in der Duke University und der University of North Carolina auf der Basis von uucp Verbindungen Die Zusammenarbeit von Apple mit Rank Xerox f hrt zur Apple Lisa ein Miferfolg aber der Wegbereiter f r den Macintosh Plattenherstellerfirma Seagate gegr ndet Gr ndung der Satelliten Kommunikations Firma Inmarsat BJARNE STROUSTRUP beginnt mit der Entwicklung von C Programmiersprache Ada ver ffentlicht Betriebssystem DOS f r Intel 8086 8088 von Fa Seattle Computer Products entwickelt sp ter von Microsoft erworben Erster Jugendprogrammier Wettbewerb der GI Erster Home Computer Sinclair ZX 80 f r rund 500 DM Sony f hrt die 3 5 Zoll Diskette ein In den Folgejahren entwickeln andere Firmen auch Disketten mit Durchmessern von 3 bis 4 Zoll Microsoft bringt Xenix ein UNIX f r PCs heraus Die Universit t Karlsruhe erh lt eine Siemens 7881 als zentralen Rechner IBM br
157. access 2 x printf NnFile heisst 8s n argv 1 if access argv 1 0 puts File existiert else puts File existiert nicht if access argv 1 1 puts File darf ausgefuehrt werden else puts File darf nicht ausgefuehrt werden if access argv 1 2 puts File darf beschrieben werden else puts File darf nicht beschrieben werden if access argv 1 4 puts File darf gelesen werden else puts File darf nicht gelesen werden x Informationen aus der Inode Systemaufruf stat 2 x if stat argv 1 amp buffer printf nDevice ld n buffer st_dev printf Inode Nr lu n buffer st_ino printf File Mode hu n n buffer st_mode switch buffer st_mode amp S_IFMT case S_IFREG puts File break case S_IFDIR puts Fil break case S_IFCHR case S_IFBLK case S_IFNWK ist regulaer ist ein Verzeichnis puts Fil break ist in Special File case S_IFIFO ist puts Fil break default 40 KAPITEL 1 PROGRAMMIEREN IN C C puts Filetyp unbekannt Inode print f nLinks Shd n buffer st nlink printf Owner ID hu n buffer st uid printf Group Id Shu n buffer st gid printf Device ID ld n buffer st_rdev printf Filegroesse ld n buffer st size asec buffer st atime MEZ pa gmtime amp asec msec buffer st mtime MEZ pm gmtime amp msec cs
158. al zen ps gz 1992 100 S Postscript Einf hrung in die Dienste des Internet O Kirch T Dawson Linux Network Administrator s Guide O Reilly Sebastopol 2000 500 S E Krol The Hitchhikers Guide to the Internet ftp ftp ciw uni karlsruhe de pub docs net general hitchhg txt 1987 16 S ASCII Erkl rung einiger Begriffe aus dem Internet E Krol The Whole Internet O Reilly Sebastopol 1992 376 S J F Kurose K W Ross Computer Networking Addison Wesley Boston 2003 784 S M Scheller u a Internet Werkzeuge und Dienste Springer Berlin Heidelberg 1994 280 S http www ask uni karlsruhe de books inetwd html 14 15 243 A S Tanenbaum Computer Networks Prentice Hall London 1996 848 S Einf hrung in Netze mit Schwerpunkt auf dem OSI Modell Netzdienste Einzelthemen Newsgruppen comp theory info retrieval comp databases P Albitz C Liu DNS and BIND O Reilly Sebastopol 1998 482 S Internet Adressen und Namen Name Server B Costales E Allman sendmail O Reilly Sebastopol 1997 1021 S Das wichtigste netzseitige Email Programm ausf hrlich dargestellt keine leichte Kost aber unentbehrlich J E Hellbusch Barrierefreies Webdesign KnowWare www knowware de 2001 86 S Hinweise zur Gestaltung von Webseiten kompakt und verst ndlich P J Lynch S Horton Web Style Guide Yale University Press New Haven 1999 165 S Gestaltung und Organisation von Webseiten wenig Te
159. alter werden mit den Formeln f r den Fl cheninhalt eines Kreises oder Rechtecks besetzt usw Diese Formeln sehen f r jede konkrete geometrische Form an ders aus 116 KAPITEL 1 PROGRAMMIEREN IN C C Bei einer Klassenableitung wie class Kreis public Flaeche bedeutet das Schl sselwort public dass von der zugrunde liegenden Klasse Basisklasse die public members als public und die protected members als protected geerbt werden Die private members werden in keinem Fall vererbt H tten wir dagegen das Wort private gebraucht so w ren die vererbten members in der abgeleiteten Klasse privat geworden Das Erbrecht zwischen Klassen ist noch differenzierter auch Freunde k nnen erben und eine Klasse kann aus zwei Basisklassen abgeleitet werden aber erstmal mu Obiges ver standen und ge bt werden Die ausgefeilte Klassenhierarchie hat den Vorteil dass man auf jeder Stufe genau das festlegt was sich dort festlegen l t nicht mehr und nicht weniger Kontrollen und nderungen werden stets in einer bestimmten Stufe vorgenommen Das Hauptprogramm main ist vergleichsweise trivial Nach ein bi chen Benutzerdialog werden in einer switch Anweisung die ausgew hlten Objekte erzeugt und deren Methoden aufgerufen n mlich die urspr nglich virtuellenund in den konkreten Klassen definierten Funktionen lesen und schreiben Die wesentliche Arbeit steckt in den Klassen 1 6 4 Memo Klassen Bei einem abstrakten Datentyp ist das In
160. alue s csv a b write 6 104 s write 6 102 a b C call by reference S csr a b write 6 105 s write 6 102 a b 100 format Bitte die beiden Summanden eingeben 102 format Die Summanden sind 216 103 format Die Summe direkt ist I8 104 format Die Summe ist I8 105 format Die Summe ist I8 end Quelle 1 42 FORTRAN Programm das Parameter by value und by reference an C Funktionen bergibt C FORTRAN Programm das F77 Funktion aufruft C Compileraufruf f77 o fsummef fsummef f fsr o program fsummef integer a b s fsr write 6 100 read 5 a b write 6 102 a b 5 at write 6 103 5 C call by value nicht moeglich 1 4 FUNKTIONEN 87 call by reference default s fsr a b write 6 105 s write 6 102 a b 100 format 102 format 103 format 105 format Bitte die beiden Summanden eingeben Die Summanden sind 216 Die Summe direkt ist I8 Die Summe ist I8 end Quelle 1 43 FORTRAN Programm das Parameter by reference an eine FORTRAN Funktion bergibt C FORTRAN Programm das PASCAL Funktionen aufruft C Compileraufruf f77 o fsummep fsummep f psv o psr o program fsummep SALIAS psv val val integer a b s psv psr external psv psr write 6 100 read 5 a b write 6 102 a b 5 at write 6 103 5 C call by value S psv a b write 6 104 s
161. ansparent Monitor Display Functions in der die Steuerzeichen nicht ausgef hrt sondern angezeigt werden Die meis ten Steuerzeichen belegen keine eigene Taste auf der Tastatur sondern werden als Kom bination aus der control Taste und einer Zeichentaste eingegeben In C C l t sich jedes Zeichen durch seine oktale Nummer in der Form 4123 oder durch seine hexadezimale Num mer in der Form x53 eingeben hier das 5 dezimal C Konst ASCII Bedeutung Tasten 0 x00 nul ASCII Null control 1 soh Start of heading control a 2 stx Start of text control b 3 etx End of text control c 4 eot End of transmission control d 5 enq Enquiry control e 6 ack Acknowledge control f 7 a bel Bell control g 8 b bs Backspace control h BS 9 t ht Horizontal tab control i TAB 10 n If Line feed control j LF 11 v vt Vertical tab control k 12 ff Form feed control 1 13 Nr cr Carriage return control m RETURN 14 so Shift out control n 15 si Shift in control o 16 dle Data link escape control p 17 del Device control 1 xon control q 18 dc2 Device control 2 tape control r 19 dc3 Device control 3 xoff control s 20 dc4 Device control 4 tape control t 21 nak Negative acknowledge control u 22 syn Synchronous idle control v 23 etb End transmission block control w 24 can Cancel control x 25 em End of medium control y 26 sub Substitute control z 27 x1b esc Escape control ESC 28 fs File separator control 29 gs Group separator control 30 rs Record
162. ardware ausgerichtete und unbequeme Maschi nensprache wir haben eine Kostprobe gesehen Assembler sind ein erster Schritt in Rich tung auf die Probleme und die Programmierer zu H here Sprachen wie FORTRAN sind von der Hardware schon ziemlich losgel st und in diesem Fall an mathematische Probleme angepasst Es gibt aber f r spezielle Aufgaben wie Stringverarbeitung Datenbankabfragen Statistik oder Grafik Sprachen die in ihrer Anpassung noch weiter gehen Auch die zur For matierung des vorliegenden Textes benutzte Sammlung von LaTeX Makros stellt eine proble mangepasste Sprache dar Der Preis f r die Erleichterungen ist ein Verlust an Allgemeinheit Denken Sie an die Notensprache der Musik an ihre Aufgabe gut angepasst aber f r andere Gebiete wie etwa die Chemie ungeeignet 1 1 4 Imperative Programmiersprachen Der Computer kennt nur Bits das hei t Nullen und Einsen F r den Menschen ist diese Ausdrucksweise unangebracht Zum Gl ck sind die Zeiten als man die Bits einzeln von Hand in die Lochstreifen schlug vorbei Die n chste Stufe war die Zusammenfassung mehrerer Bits zu Gruppen die man mit Buchstaben und Ziffern bezeichnen konnte Ein Ausschnitt eines Programmes f r die ZUSE Z 22 im Freiburger Code aus den f nfziger Jahren B15 Bringe den Inhalt von Register 15 in den Akku U6 Kopiere den Akku nach Register 6 B18 Bringe den Inhalt von Register 18 in den Akku Addiere Akku und Reg 6 Summe in Akku und 6
163. ask umount unlink ustat utime wait write 197 ermittelt Zeiten bei der Ausf hrung eines Programmes liest aus einem File liest symbolisches Link ndert Filenamen l scht Verzeichnis ndert Echtzeit Priorit t Semaphore setzt Gruppen Zugriffsrechte eines Prozesses setzt User ID eines Prozesses legt fest was auf ein Signal hin zu tun ist liest die Inode eines Files liest Werte des File Systems erzeugt symbolischen Link schreibt Puffer auf Platte ermittelt Systemwerte ermittelt die Systemzeit ermittelt Zeitverbrauch eines Prozesses schneidet File ab setzt oder ermittelt Filezugriffsmaske entfernt Filesystem aus File Hierarchie l scht File liest Werte des File Systems setzt Zeitstempel eines Files wartet auf Ende eines Kindprozesses schreibt in ein File Die Aufz hlung kann durch weitere Systemaufrufe des jeweiligen Lieferanten des Betriebs systems z B Hewlett Packard erg nzt werden Diese erleichtern das Programmieren ver schlechtern aber die Portabilit t Zu den meisten Systemaufrufen mit get gibt es ein Gegenst ck set das in einigen F llen dem Superuser vorbehalten ist D C Lexikon D 1 Schl sselw rter In C C d rfen Schl sselw rter keinesfalls als Namen verwendet werden Laut ANSI ver wendet C folgende Schl sselw rter Wortsymbole keywords Deklaratoren auto Default Speicherklasse kann weggelassen werden char Zeichentyp const Typattribut neu in ANSI C
164. assen sich lange Anweisungen auf mehrere Zeilen verteilen Schl sselw rter und Operatoren sind festgelegte Zeichen oder Zeichengruppen an die jeder gebunden ist Namen werden nach gewissen Regeln vom Programmierer gebildet ebenso Konstanten Trennzeichen trennen die genannten Bausteine oder ganze Anweisungen voneinander und sind festgelegt meist Leerzeichen space Semikolons und Linefeeds Bedeutungslose Zeichen sind berz hlige Leerzeichen Tabs oder Linefeeds Der C Standard gegenw rtig ISO IEC 9899 1999 legt nicht alle Einzelheiten fest Zu manchen Fragen spricht er nur Empfehlungen aus oder berl sst sogar die Wahl dem Compi ler und oder dem Betriebssystem Ger t man an solche Probleme braucht man eine genaue Beschreibung der beiden sollte experimentell pr fen was geschieht und sein Programm ausf hrlich kommentieren 1 8 2 Syntax Diagramme Die Syntax der einzelnen Bausteine das hei t ihr regelgerechter Gebrauch kann mit tels Text beschrieben werden Das ist oft umst ndlich und teilweise schwer zu verstehen Deshalb nimmt man Beispiele zu Hilfe die aber selten die Syntax vollst ndig erfassen So haben sich Syntax Diagramme eingeb rgert die nach etwas bung leicht zu lesen sind In Abbildung 1 3 auf Seite 47 ist die Syntax zweier C Bausteine dargestellt n mlich die if else Anweisung und den Block Die if else Anweisung besteht aus dem Schl sselwort if einer ffnenden runden Klammer einem
165. atisfy these conditions can be treated as verbatim copying in other respects If the required texts for either cover are too voluminous to fit legibly you should put the first ones listed as many as fit reasonably on the actual cover and continue the rest onto adjacent pages If you publish or distribute Opaque copies of the Document numbering more than 100 you must either include a machine readable Transparent copy along with each Opaque copy or state in or with each Opaque copy a computer network location from which the general 2 GNU FREE DOCUMENTATION LICENSE 221 network using public has access to download using public standard network protocols a com plete Transparent copy of the Document free of added material If you use the latter option you must take reasonably prudent steps when you begin distribution of Opaque copies in quantity to ensure that this Transparent copy will remain thus accessible at the stated lo cation until at least one year after the last time you distribute an Opaque copy directly or through your agents or retailers of that edition to the public It is requested but not required that you contact the authors of the Document well before redistributing any large number of copies to give them a chance to provide you with an updated version of the Document 4 MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above provided that you re
166. auf dem Weg zum Sysadmin K Heuer R Sippel UNIX Systemadministration Springer Berlin Heidelberg 2004 800 S E Nemeth G Snyder S Seebass T R Hein UNIX System Administration Handbook Prentice Hall Englewood Cliffs 2001 835 S Auf den neuesten Stand gebrachte Hilfe f r Sysadmins viel Stoff R U Rehman HP Certified HP UX System Administration Prentice Hall PTR Upper Saddle River 2000 800 S Begleitbuch zu einem Kurs Einf hrung in und Verwaltung von HP UX M Welsh M K Dalheimer L Kaufmann Running Linux O Reilly Sebastopol 1999 750 S Einrichtung und Betrieb eines LINUX PCs Linux UNIX Einzelthemen Newsgruppen comp unix A V Aho B W Kernighan P J Weinberger The AWK Programming Language Addison Wesley Boston 1988 210 S Standardwerk zum AWK D Cameron B Rosenblatt Learning GNU Emacs O Reilly Sebastopol 1991 442 S 238 ANHANG H ZUM WEITERLESEN D Dougherty A Robbins sed amp awk O Reilly Sebastopol 1997 407 S H Herold Linux Unix Profitools awk sed lex yacc und make Addison Wesley M nchen 1998 890 S L Lamb A Robbins Textbearbeitung mit dem vi Editor O Reilly K ln 1999 333 S A Oram S Talbott Managing Projects with make O Reilly Sebastopol 1993 149 S L Wall T Christiansen J Orwant Programming Perl O Reilly Sebastopol 2000 1067 S X Window System X11 Motif Gnome KDE Newsgruppen comp windows x OSF
167. aus Diese Zeilen kommentiert man sp ter aus oder klammert sie gleich in ifdef und endi f Anweisungen ein Bew hrt hat sich auch die eigenen Pro gramme einem anderen zu erkl ren da wundert man sich manchmal ber den eigenen Code Ein Programm das man nach ein bis zwei Wochen Pause selbst nicht mehr versteht war von vornherein nicht gelungen Und wenn dann der Computerfreak zu n chtlicher Stunde den Bugs hinterherjagt schlie t sich ein weiter Bogen zur ck in die Kreidezeit denn die ersten S ugetiere Zeit genossen der Saurier waren auch nachtjagende Insektenfresser 1 11 4 Optimierung Das erste und wichtigste Ziel beim Programmieren ist n chst der selbstverst ndlichen aber unerreichbaren Fehlerfreiheit die bersichtlichkeit Erst wenn ein Programm sauber l uft denkt man ber eine Optimierung nach Optimieren hei t schneller machen und Spei cher einsparen sowohl beim Code wie auch zur Laufzeit Diese beiden Ziele widersprechen sich manchmal Im folgenden findet man einige Hinweise die teils allgemein teils nur f r C gelten Die optimierende Compiler Option ist mit Vorsicht zu gebrauchen Es kommt vor da ein optimiertes Programm nicht mehr l uft Die Gewinne durch die Optimierung sind auch nur m ig Immerhin der Versuch ist nicht strafbar Als erstes schaut man sich die Schleifen an von geschachtelten die innersten Dort sollte nur das Allernotwendigste stehen Bedingungen soll
168. bar nichts anfangen er ist nicht ausf hrbar Der Quellcode muss mithilfe des Computers und eines bersetzungsprogrammes in Maschinencode ber setzt werden Mit dem Maschinencode kann dann der Programmierer nichts mehr anfangen Es gibt zwei Arten von bersetzern Interpreter bersetzen das Programm jedesmal wenn es aufgerufen wird Die bersetzung wird nicht auf Dauer gespeichert Da der Quellco de zeilenweise bearbeitet wird lassen sich nderungen schnell und einfach ausprobieren Andererseits kostet die bersetzung Zeit Interpreter findet man vorwiegend auf Home Computern f r BASIC aber auch LISP Programme Shellscripts und awk Scripts werden interpretiert Compiler bersetzen den Quellcode eines Programms als Ganzes und speichern die bersetzung auf einem permanenten Medium Zur Ausf hrung des Programms wird die bersetzung aufgerufen Bei der kleinsten nderung muss das gesamte Programm erneut kompiliert werden daf r entf llt die jedesmalige bersetzung w hrend der Ausf hrung Compilierte Programme laufen also schneller ab als interpretierte Es gibt auch Mischfor men von Interpretern und Compilern zum Beispiel f r JAVA Wie wir eingangs des Kapitels gesehen haben arbeiten C und C Compiler wie cc 1 und CC 1 in vier Durchg ngen Pr prozessor eigentlicher Compiler bersetzung in Assembler Code Assembler bersetzung in Maschinen Code Linker Der Pr prozessor entfernt Kommentar und f hrt die P
169. benutzen um Abh ngigkeiten einzugrenzen alle Variablen Pointer und Funktionen ordentlich deklarieren Funktions Prototypen verwenden symbolische Konstanten define anstelle von r tselhaften Werten im Programm ver wenden 381m GNU Projekt finden sich ein Program 2c lies f to c zum bertragen von FORTRAN nach C und ein Programm p2c zum Portieren von PASCAL nach C 174 KAPITEL 1 PROGRAMMIEREN IN C C richtig ausgerichtete Unions anstelle von trickreichen berlagerungen von Typen ver wenden e den sizeof Operator verwenden wenn man die Gr e von Typen oder Variablen braucht daran denken da die Gr e von Datentypen je nach Architektur unterschiedlich ist umfangreiche Deklarationen in Include Dateien packen nur die C Standard Funktionen verwenden oder f r andere Funktionen die Herkunft oder den Quellcode angeben mindestens aber die Funktionalit t und die Syntax beiprintf 3 oder scanf 3 die richtigen Platzhalter verwenden 1d f r long alle unvermeidlichen Systemabh ngigkeiten auf wenige Stellen konzentrieren und deutlich kommentieren Im folgenden wollen wir einige Beispiele betrachten die nicht allzu lang und daher auch nur einfach sein k nnen 1 13 2 bertragen von ALGOL nach C Wir haben hier ein ALGOL Programm von RICHARD WAGNER aus dem Buch von KARL NI CKEL ALGOL Praktikum 1964 ausgew hlt weil es mit Sicherheit nicht im Hinblick auf eine be
170. bessert zwar nicht den Stil aber die Geschwindigkeit von Programmen mit vielen Funktionsaufrufen da die Parameter bergabe entf llt Die Verwendung von Bibliotheksfunktionen kann in oft durchlaufenen Schleifen st r ker verz gern als der Einsatz spezialisierter selbstgeschriebener Funktionen da Bibliotheks funktionen allgemein und kindersicher sind Verwenden Sie die einfachste Funktion die den Zweck erf llt also puts 3 anstelle von printf 3 wenn es nur um die Ausgabe eines Strings samt Zeilenwechsel geht Die Adressierung von Arrayelementen durch Indizes ist langsamer als die Adressierung durch Pointer Der Prozessor kennt nur Adressen also mu er Indizes erst in Adressen umrechnen Das erspart man ihm wenn man gleich mit Adressen sprich Pointern arbeitet Wer die Pointerei noch nicht gewohnt ist schreibt das Programm zun chst mit Indizes testet es aus und stellt es dann auf Pointer um Ein Beispiel long i j al32 Adressierung durch Indizes langsam x a 0 a i alj Adressierung durch Pointer schnell x xa x a i x a j Wir erinnern uns der Name eines Arrays ist der Pointer auf das erste Element mit dem Index 0 Experimente mit verschiedenen Compilern haben allerdings den Verdacht gesch rt dass manche Compiler von sich aus die schnellere Variante Pointer w hlen bergeben Sie gro e Strukturen als Pointer nicht als Variable Dadurch spart man das Kopieren der Daten Input Output ist im
171. booleschen Ausdruck true false einer schlie enden runden Klammer einer Anweisung auch die leere Anweisung oder einem Block dann ist entweder Ende der i Anweisung oder es folgt das Schl sselwort e1se gefolgt von 1 3 BAUSTEINE EINES QUELLTEXTES 47 if else Anweisung 18 bool Anw Ausdr Block Anw Block Block Anweisung Q Abb 1 3 Syntax Diagramm der if else Anweisung und des Blockes einer Anweisung oder einem Block Ist der boolesche Ausdruck t rue dann wird die erste Anweisung ausgef hrt andernfalls die zweite Fehlt der e1se Zweig so liegt eine bedingte Anweisung vor die nur dann ausgef hrt wird wenn der boolesche Ausdruck t rue ist Danach geht es im Programm weiter Ein Block seinerseits besteht aus einer ffnenden geschweiften Klammer dann entweder nichts leerer Block oder einer Anweisung gegebenenfalls weiteren Anweisungen und einer schlie enden geschweiften Klammer Da ein Block syntaktisch gleichwertig einer Anweisung ist lassen sich Bl cke schachteln Ein Block kann berall stehen wo eine Anweisung erwartet wird Ein weiterer Weg zur Beschreibung der Syntax einer Programmiersprache ist die Backus Naur Form die von JOHN BACKUS einem der V ter von FORTRAN und PETER NAUR einem der V ter von ALGOL als Metasprache zu ALGOL 60 entwickelt worden ist Weiteres siehe bei D
172. brauchbar wenn es um mehr als triviale Programme geht 1 1 GRUNDBEGRIFFE 5 select nachname vorname telefon from mitarbeiter where wohnort Karlsruhe order by nachname vorname Die Datenbank soll bittesch n ein Liste mit Nachnamen Vornamen und Telefonnummer aus der Tabelle mitarbeiter herausziehen und dabei nur die Mitarbeiter ber cksichtigen de ren Wohnort Karlsruhe ist Die Liste soll an erster Stelle nach dem Nachnamen alphabetisch sortiert sein bei gleichem Nachnamen nach dem Vornamen Einfacher l sst sich eine Aufga be kaum formulieren Eine Programmiersprache wird von zwei Seiten her entwickelt Von oben den zu program mierenden Aufgaben aus der realen Welt her kommen die Anforderungen an die Sprache Von unten der Hardware CPU und dem Betriebssystem her kommen die M glichkeiten zur L sung der Aufgaben Wir haben folgende Schichten Aufgabe Problem L sungsweg Algorithmus Programm in einer h heren problemorientierten Sprache Assemblerprogramm Maschinenprogramm Mikroprogramme Firmware im Computer Elektronik Jede Schicht stellt ein Modell der n chsth heren Schicht dar wobei das was sich in der Elektronik abspielt hoffentlich noch etwas mit der urspr nglichen Aufgabe zu tun hat Der Compilerbauer muss sowohl das Problem wie die Hardware samt Betriebssystem im Auge haben wenn er beispielsweise einen C Compiler f r das Betriebssystem PC DOS auf einem Intel Prozessor schreibt Wer si
173. braucht sie soll in der Systemprogrammierung vorkommen und tr gt sicher nicht zur Klarheit eines Programmes bei 1 3 6 6 Aufz hlungstypen Durch Aufz hlen lassen sich benutzereigene Typen schaffen Denkbar ist enum wochentag montag dienstag mittwoch donnerstag freitag samstag sonntag tag Die Variable tag ist vom Typ wochentag und kann die oben aufgez hlten Werte annehmen Die Reihenfolge der Werte ist ma gebend f r Vergleiche montag ist kleiner als dienstag Auch Farben bieten sich f r einen Aufz hlungstyp an In der Maschine werden Aufz hlungs typen durch Ganzzahlen dargestellt insofern handelt es sich nicht um einen neuen Typ Aufz hlungstypen verbessern die Lesbarkeit der Programme 1 8 6 7 Pointer Zeiger Pointer sind vom Geheimnis umwittert Wer mit Pointern umgehen kann oder wenigstens so tut verf gt ber magische Kr fte und steht mit finsteren M chten im Bunde Vermutlich frisst er auch kleine Kinder oder unschuldige Windows Benutzer Dabei ist das Arbeiten mit Pointern einfach man muss nur langsam und klar denken und saubere Begriffe verwenden Pointer erweitern die M glichkeiten des Programmierers Ein Beispiel f r den sinnvol len Einsatz von Pointern das Sortieren von Datens tzen Die Datens tze enthalten in Form einer Struktur Namen Anschrift und weitere Angaben zu Personen Die Datens tze sollen nach dem Namen sortiert werden um einen schnellen Zugriff zu erm glichen W rden wir die Daten
174. c call foratime atime s char 0 ctime sec write 6 a atime end Quelle 1 17 FORTRAN Programm zur Anzeige der Systemzeit Die ALIAS Anweisung ist als Erweiterung zu FORTRAN 77 in vielen Compilern ent I FORTRAN 90 kennt Strukturen 1 2 PROGRAMMER S WORKBENCH 37 halten und dient dazu den Aufruf von Unterprogrammen anderer Sprachen zu erm glichen Der Compiler wei damit dass das Unterprogramm au erhalb des Programms zum Bei spiel in einer Bibliothek einen anderen Namen hat als innerhalb des Programms Wird eine Sprache angegeben hier C so erfolgt die Parameter bergabe gem der Syntax dieser Sprache Einzelheiten siehe im Falle unserer Anlage im HP FORTRAN 77 HP UX Reference Manual im Abschnitt Compiler Directives Die Anweisung teilt dem Compiler mit dass hinter der FORTRAN Subroutine foratime die C Standard Funktion sprintf 3 steckt und dass diese nach den Regeln von C behan delt werden soll Der R ckgabewert von sprintf 3 die Anzahl der ausgegebenen Zeichen wird nicht verwertet deshalb ist foratime eine FORTRAN Subroutine keine Funktion die im Programm mit call aufgerufen werden muss Der Systemaufruf time 2 verlangt als Argument einen Pointer auf long integer daher ist tloc als vier Bytes lange Integerzahl deklariert tloc spielt weiter keine Rolle Die bergabe als Pointer by reference ist in FORTRAN Standard f r Zahlenvariable und braucht nicht eigens vereinbart zu werden Der R
175. ch Eingang Eintrittsbedingung Schleifenrumpf Anweisungen Ausgang R cksprung zum Eingang Diese Schleife wird nur betreten falls die Eintrittsbedingung erf llt ist unter Umst nden al so nie Sie wird deshalb abweisende Schleife genannt auch kopfgesteuerte Schleife Wenn die Eintrittsbedingung nicht mehr erf llt ist macht das Programm nach der Schleife weiter In C sieht diese Schleife so aus while while Bedingung einzelne Anweisung x oder Bedingung Block von Anweisungen Die zweite M glichkeit l sst sich grunds tzlich auf die erste zur ckf hren wird aber trotz dem verwendet weil das Programm dadurch einfacher wird Eingang wird in jedem Fall betreten Schleifenrumpf Anweisungen Ausgang R cksprungbedingung Diese Schleife wird also mindestens einmal ausgef hrt und dann so lange wiederholt wie die R cksprungbedingung zutrifft Sie hei t daher nichtabweisende Schleife auch fu gesteuerte Schleife Ist die R cksprungbedingung nicht mehr erf llt macht das Programm nach der Schleife weiter In C do einzelne Anweisung while Bedingung oder x do Block von Anweisungen while Bedingung Eine Variante die eine define Zeile erfordert sieht folgendema en aus define Please Please do Block while Bedingung In hartn ckigen F llen soll diese Schleife der Standard Schleife berlegen sein Rein aus Bequemlichkeit gibt es in C noch eine dritte Schleife
176. ch fremde Hilfe beansprucht und danke Kollegen in den Universit ten Karlsruhe und Lyon sowie Mitarbeitern der Firmen IBM und Hewlett Packard f r schriftliche Unterlagen und m ndlichen Rat sowie zahlreichen Studenten f r Anregungen und Diskussionen Dar ber hinaus habe ich flei ig das Internet angezapft und viele dort umlaufende Guides Primers HOWTOs Tutorials und Sammlungen von Frequently Asked Questions FAQs verwendet Weingarten Baden 15 Februar 2006 Wulf Alex bersicht M Programmieren in C C Zahlensysteme Zeichens tze UNIX Systemaufrufe C Lexikon Karlsruher Test GNU Lizenzen Zeittafel D o 32 BR Bo 59 Zum Weiterlesen 180 185 196 198 206 214 225 234 Inhalt 1 Programmieren in C C 1 1 Grundbegriffe 2303554 else Etuien 1 1 1 Wozu Programmierkenntnisse e 1 1 2 Warum braucht man Programmiersprachen 1 1 3 Sprachenfamilien 1 1 4 Imperative Programmiersprachen 1 1 5 Objektorientierte Programmiersprachen 1 1 6 Interpreter 137 Qualit t und Stil 55 vLIGeer4eescwe BP ae SE See 1 1 8 Programmiertechnik 1 1 9 Aufgabenanalyse und Entwurf e 1 1 9 1 Aufgabenstellung 2e 1 1 9 2 Zerlegen in Teilaufgaben 1 1 9 3 Zusammensetzen aus Teilaufgaben 1110 Prot
177. ch der beiden Erstgenannten den Standard vor In den Achtzigern hat das American National Standards Institute ANSI an einem Standard f r C gearbeitet dem alle neueren Compiler folgen hinterherhinken Das ANSI Dokument wurde als Internationaler Standard ANSI ISO IEC 9899 1990 anerkannt Ende der neunziger Jahre wurde eine erneute berarbeitung als Internationaler Standard ANSI ISO IEC 9899 19997 ver ffentlicht der auch als C9X bezeichnet wird Den Stand der Dinge erf hrt man bei http anubis dkuug dk JTC1 SC22 WG14 Erfahrungsgem dauert es einige Jahre bis die Compiler einen neuen Standard voll unter st tzen Das ANSI C von 1990 ist im wesentlichen eine bermenge von K amp R C die Nachf hrung der Programme wenn berhaupt erforderlich macht keine Schwierigkeiten ANSI C kennt ein Schl sselwort von K amp R nicht mehr entry und daf r mehrere neue C ist allgemein verwendbar konzentriert l sst dem Programmierer gro e Freiheiten ha ving the best parts of FORTRAN and assembly language in one place und f hrt in der Regel zu schnellen Programmen da vielen C Anweisungen unmittelbar Assembler Anweisungen entsprechen Maschinenn he Die Sprache hat einen kleinen Kern wenige Schl sselw rter Erweiterungen und Hardwareabh ngigkeiten stecken in den Bibliotheken C Programme gelten als un bersichtlich aber das ist eine Frage des Programmierstils nicht der Sprache Auf UNIX Systemen hat man mit C die wenigsten Sch
178. ch die Ausgangslage nie wird eine Abbruchbedingung nach endlich vielen Schritten erf llt d h die Rekursions tiefe ist begrenzt In dem Buch von ROBERT SEDGEWICK findet sich N heres zu diesem Thema mit Programm beispielen Im ersten Band der Informatik von FRIEDRICH L BAUER und GERHARD GOOS wird die Rekursion allgemeiner abgehandelt Zwei Beispiele sollen die Rekursion veranschaulichen Das erste Programm berechnet den gr ten gemeinsamen Teiler ggT zweier ganzer Zahlen nach dem Algorithmus von EUKLID Das zweite ermittelt rekursiv die Fakult t einer Zahl was man anders vielleicht einfacher erledigen k nnte Groesster gemeinsamer Teiler Euklid rekursiv Compileraufruf cc o ggtr ggtr c include lt stdio h gt int ggt int main int argc char argv int x y sscanf argv 1 sd sscanf argv 2 Sd amp y printf Der GGT von d und d ist d n x y ggt x y return 0 Funktion ggt int ggt int a int b if a b return a else if a gt b return ggt a b b else return ggt a b a Quelle 1 55 C Programm Gr ter gemeinsamer Teiler ggT nach Euklid rekursiv Im folgenden Programm ist au er der Rekursivit t die Verwendung der Bedingten Be wertung interessant die den Code verk rzt Rekursive Berechnung von Fakultaeten x finclude stdio h int main int n puts nWert eingeben Ende mit CTR
179. ch langer ist als der Puffer in den er geschrieben werden soll Da ein String wie jedes Array keinen Wert hat kann er nicht per Zuweisung einer Stringvariablen zugewiesen werden Man mu vielmehr mit den Standard Stringfunktionen arbeiten oder sich selbst um die einzelnen Elemente des Arrays k mmern Die Stringfunk tionen erwarten die Include Datei string h Hier ein kurzes C Programm zur Stringmani pulation mittels Systemaufrufen und Standardfunktionen x Programm fuer Stringmanipulation define TEXT textfile include stdio h include string h include io h include fcntl h include lt string h gt char buffer 80 Dies ist ein langer Teststring Hallo int main char x zeile 80 Int 3 int fildes FILE fp Systemaufrufe und Filedeskriptoren fildes open TEXT O_RDWR if fildes 1 puts open schiefgegangen write fildes buffer 20 lseek fildes long 0 SEEK SET read fildes zeile 12 write 1 zeile 12 close fildes 1 5 FUNKTIONS BIBLIOTHEKEN 105 Standardfunktionen und Filepointer fp fopen TEXT w for i 0 i lt 30 itt fputc buffer il fp fclose fp fp fopen TEXT r for i 0 i lt 30 itt zeile i fgetc fp putchar Nn for i 0 i lt 30 itt putchar zeile i Stringfunktionen x strcpy ze
180. ch n her f r Compiler interessiert kann mit dem Buch von ALFRED V AHO genannt das Dragon Book beginnen Die Thematik geht ber den Bau von Compilern hinaus und erstreckt sich ganz allgemein auf die Analyse und Verarbeitung von Zeichenfolgen 1 1 3 Sprachenfamilien Hat man eine Aufgabe ein Problem zu l sen so kann man drei Abschnitte auf dem Weg unterscheiden Aufgabenstellung L sungsweg Ergebnis Das Ergebnis ist nicht bekannt sonst w re die Aufgabe bereits gel st Die Aufgabenstellung und erforderlichenfalls einen L sungsweg sollten wir kennen Mithilfe der bekannten Programmiersprachen von BASIC bis C beschreiben wir den L sungsweg in einer f r den Computer geeigneten Form Diese Programmiersprachen wer den als algorithmische oder prozedurale Programmiersprachen im weiteren Sinn bezeich net weil die Programme aus Prozeduren bestehen die Anweisungen an den Computer ent halten lateinisch procedere vorangehen Diese Familie wird unterteilt in die imperativen oder prozeduralen Sprachen im engeren Sinne einerseits und die objektorientierten Sprachen andererseits lateinisch imperare befehlen Bequemer w re es jedoch wir k nnten uns mit der Beschreibung der Aufgabe begn gen und das Finden eines L sungsweges dem Computer berlassen Sein Nutzen w rde damit bedeutend wachsen Die noch nicht sehr verbreiteten deklarativen Programmier sprachen gehen diesen Weg lateinisch declarare erkl ren besch
181. ch noch weitere Aufgaben erledigen siehe Referenz Handbuch Mittels get 1 holt man das Quellfile wieder aus dem SCCS Dokument heraus mitttels delta 1 gibt man eine ge nderte Fassung des Quellfiles an das SCCS Dokument zur ck RCS und SCCS arbeiten auf Datei Ebene Bei gr eren Projekten ist es w nschenswert mehrere Dateien gemeinsam oder ganze Verzeichnisse in die Versionsverwaltung einzube ziehen Dies leistet das Concurrent Versions System CVS Es baut auf RCS auf und er weitert dessen Funktionalit t au erdem um eine Client Server Architektur Die beteiligten Dateien und Verzeichnisse k nnen auf verschiedenen Computern im Netz liegen Im Gegen satz zu RCS das zu einem Zeitpunkt immer nur einem Benutzer das Schreiben gestattet verfolgt CVS eine sogenannte optimistische Kooperationsstrategie Mehrere Programmierer k nnen gleichzeitig auf Kopien derselben Version Revision arbeiten Beim Zur ckschrei ben wird ein Abgleich mit der in der zentralen Versionsbibliothek Repository abgelegten Fassung erzwungen um zu verhindern da parallel durchgef hrte und bereits zur ckge schriebene Versionen berschrieben werden Diese Strategie kann zu Konflikten f hren die per Hand aufgel st werden m ssen W hrend das Einrichten eines CVS Projektes berblick erfordert ist das Arbeiten unter CVS nicht schwieriger als unter RCS Einzelheiten wie so oft am einfachsten aus dem Netz wo au er dem Programmpaket selbst auch kurze oder aus f
182. chnet wobei m X ein Punkt im Intervall X ist blicherweise die Mitte Die Funktion sei in diesem Beispiel f x Vz 1 cosa Nun das Programm x C XSC Programm Newton Verfahren mit Intervallen Funktion f x sqrt x x 1 cos x Inst Angewandte Mathematik Universitaet Karlsruhe finclude interval hpp Interval arithmetic package finclude imath hpp Interval standard functions interval f real amp x Function f interval y y Xi Use interval arithmetic return sqrt y y 1 0 cos y interval deriv interval amp x Derived function f return 1 0 2 0 sqrt x cos x x 1 0 sin x int criter interval amp x Function testing f a f b lt 0 interval Fa Fb Fa f Inf x Fb f Sup x return Sup Fa Fb lt 0 0 0 0 lt deriv x lt means element of main interval y y_old cout lt lt Please enter starting interval cin gt gt y cout lt lt SetPrecision 20 12 if criter y do y_old y cout lt lt y lt lt y lt lt endl y mid y mid y deriv y y amp means intersection 124 KAPITEL 1 PROGRAMMIEREN IN C C while y y_old else cout lt lt Criterion not satisfied lt lt endl Quelle 1 69 C XSC Programm Intervall Newton Verfahren Weitere Beispiele finden sich in dem Buch von RUDI KLATTE und an
183. chnik C Meinel H Sack WWW Springer Berlin Heidelberg 2004 1200 S Internet Grundlagen HTTP HTML CSS XML CGI S M nz W Nefzger HTML 4 0 Handbuch Franzis M nchen 1999 992 S Deutsches Standardwerk zum Schreiben von Webseiten abgewandelt auch unter dem Titel Selfhtml an mehreren Stellen im Netz verf gbar J Niederst Web Design in a Nutshell O Reilly Sebastopol 1999 560 S Das gesamte Web zum Nachschlagen viel Technik A Schwartz Managing Mailing Lists O Reilly Sebastopol 1998 320 S Majordomo Listserv List Processor und Smartlist S Spainhour R Eckstein Webmaster in a Nutshell O Reilly Sebastopol 1999 523 S HTML CSS XML JavaScript CGI und Perl PHP HTTP Apache W R Stevens UNIX Network Programming Vol 1 Networking APIs Sockets and XTI Prentice Hall Englewood Cliffs 1998 1009 S Vol 2 Interprocess Communication Prentice Hall Englewood Cliffs 1999 592 S C Programme f r Clients und Server der Netzdienste Sicherheit Newsgruppen comp security comp virus sci crypt alt security alt comp virus de comp security 244 ANHANG H ZUM WEITERLESEN RFC 1244 FYI 8 Site Security Handbook ftp ftp nic de pub rfc rfc1244 txt 1991 101 S ASCII Sicherheits Ratgeber f r Internet Benutzer Department of Defense Trusted Computer Systems Evaluation Criteria Orange Book ftp ftp ciw uni karlsruhe de pub docs net secur orange book gz 1985 120 S ASCII Abgel st durch
184. cise the right to control the distribu tion of derivative or collective works based on the Program In addition mere aggregation of another work not based on the Program with the Pro gram or with a work based on the Program on a volume of a storage or distribution medium does not bring the other work under the scope of this License 3 You may copy and distribute the Program or a work based on it under Section 2 in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following 216 ANHANG F GNU LIZENZEN a Accompany it with the complete corresponding machine readable source code which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange or b Accompany it with a written offer valid for at least three years to give any third party for a charge no more than your cost of physically performing source distri bution a complete machine readable copy of the corresponding source code to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange or Accompany it with the information you received as to the offer to distribute corre sponding source code This alternative is allowed only for noncommercial distri bution and only if you received the program in object code or executable form with such an offer in accord with Subsection b above The source
185. cript und LaTeX Quellen Einf hrung mit deutschsprachigen Besonderheiten Umlaute Multimedia Grafik Sound Newsgruppen comp graphics alt graphics J D Foley Computer Graphics Principles and Practice Addison Wesley Boston 1992 1200 S Standardwerk zur Computer Raster Grafik R F Ferraro Programmer s Guide to the EGA and VGA Cards Addison Wesley Boston 1990 1040 S Viele Grundlagen die ber EGA und VGA hinausgehen K Kylander O S Kylander GIMP MITP Verlag Bonn 1999 700 S Benutzerhandbuch zum GNU Image Manipulation Program Programmieren allgemein Newsgruppen comp programming comp unix programmer comp lang comp software comp software eng comp compilers de comp lang A V Aho u a Compilers Principles Techniques and Tools Addison Wesley Boston 1986 796 S B Beizer Software Testing Techniques Van Nostrand Reinhold 1990 503 S F P Brooks jr The Mythical Man Month Addison Wesley Boston 1995 322 S Organisation gro er Software Projekte M K Dalheimer Linux Wegweiser zu Programmierung Entwicklung O Reilly Sebastopol 1997 580 S Software Entwicklung unter LINUX Werkzeuge N Ford Programmer s Guide ftp ftp ciw uni karlsruhe de pub docs misc pguide txt 1989 31 S ASCII allgemeine Programmierhinweise Shareware Konzept T Grams Denkfallen und Programmierfehler Springer Berlin Heidelberg 1990 159 S PASCAL Beispiele gelten aber auch f
186. d rfen Konstanten oder Variable aller einfachen Typen andere Arrays Strukturen Unions oder Pointer sein jedoch keine Funktionen Dateien sind formal 25Felder in Datens tzen sind etwas v llig anderes 54 KAPITEL 1 PROGRAMMIEREN IN C C Strukturen ein Array von Dateien ist also erlaubt Die Deklaration von Arrays sieht folgen derma en aus int zahlen 100 nr 12 int matrix 4 3 double realnumbers 1000 char names 33 char zeichen abcd Der Compiler muss die Gr e eines Arrays Anzahl und Typ der Elemente wissen Sie muss bereits im Programm stehen und kann nicht erst zur Laufzeit errechnet werden Man kann jedoch die Gr e eines Arrays zur Laufzeit mittels der Standardfunktion malloc 3 ndern siehe Abschnitt 1 11 9 Dynamische Speicherverwaltung auf Seite 158 Es gibt mehrdimensionale Arrays Matrizen usw mit entsprechend vielen Indexfolgen Die Elemente werden im Speicher hintereinander in der Weise abgelegt dass sich der letzte Index am schnellsten ndert Der Compiler linearisiert das Array wie man sagt Eine Matrix wird zeilenweise gespeichert Vorsicht beim bertragen von oder nach FORTRAN dort l uft die Indizierung anders als in C C eine Matrix wird spaltenweise gespeichert PASCAL verh lt sich wie C C Der Name eines Arrays ist eine Adresskonstante und kann daher nicht auf der linken Seite einer Zuweisung vorkommen Weiteres dazu im Abschnitt 1 3 6 7 Pointer auf Seite 56 Strings Ze
187. d anzuraten die Reihenfolge ei ner Auswertung durch Klammern oder Einzelanweisungen zwingend vorzuschreiben und Ausdr cke zu vermeiden deren Wert von Vermutungen ber die Reihenfolge der Auswer tung abh ngt 1 8 8 Anweisungen 1 3 8 1 Leere Anweisung Anweisungen statement haben eine Wirkung aber keinen Wert im Gegensatz zu Aus dr cken Die einfachste Anweisung ist die leere Anweisung also die Aufforderung an den Computer nichts zu tun Das sieht zwar auf den ersten Blick schwachsinnig aus ist aber gelegentlich n tzlich Da in C jede Anweisung mit einem Semikolon abgeschlossen werden muss ist das nackte Semikolon die leere Anweisung In anderen Sprachen findet sich daf r die Anweisung nop oder noop no operation Ein Beispiel while c getchar 125 Die Schleife liest Zeichen ein und verwirft sie bis sie auf ein Zeichen Nr 125 rechte ge schweifte Klammer trifft Das wird auch noch entsorgt dann geht es nach der Schleife wei ter 1 3 8 2 Zuweisung als Anweisung Aus einer Zuweisung wird durch Anh ngen eines Semikolons eine Anweisung Kommt eine Zuweisung beispielsweise als Argument einer Funktion oder in einer Bedingung vor darf sie nicht durch ein eigenes Semikolon abgeschlossen werden Die Zuweisung wird ausgef hrt und ihr Wert an ihre Stelle gesetzt Steht die Zuweisung allein muss sie mit einem Semikolon beendet werden und wird damit zu einer Anweisung an den Computer etwas zu tun printf d Sf n
188. d zur Bedingung i 10 zur ckgesprungen Das wiederholt sich bis i den Wert 10 erreicht hat Die Bedingung ist dann nicht mehr erf llt die Ausf hrung des Programms geht nach der Schleife weiter Nun der syntaktisch einwandfreie Mi brauch einer or Schleife Testen der for Schleife 04 03 1993 define MAX 10 include lt stdio h gt int sum int x int main int i j 1 for i 3 puts Anfang 1 lt j MAX i i sum i printf Der Schleifenzaehler spricht d d n i Jj J Ze Pade ob return i Funktion sum x int sum int x if x lt 5 return x 1 else return x 2 Quelle 1 29 C Programm mit zusammengesetzter for Schleife Im Initialisierungsteil wird der Schleifenz hler i mit 3 belegt und getrennt durch den Komma Operator mittels der Standard Funktion puts 3 ein String ausgegeben In der Eintrittsbedingung wird gerechnet wichtig ist nur dass schlie lich ein Wert 0 oder nicht 0 herauskommt Dann wird gegebenenfalls der Schleifenrumpf ausgef hrt wobei im Rumpf auf die Variablen i und j des Schleifenkopfes zugegriffen wird Abschlie end wird der Schlei 1 3 BAUSTEINE EINES QUELLTEXTES 77 fenz hler i inkrementiert und wieder durch den Komma Operator getrennt nochmals mit Hilfe einer Funktion sum x ver ndert Wenn die Schleife nach einigen Durchl ufen verlas sen wird steht der Schleifenz hler i wei
189. da er anders als ein Mensch fehlende Informationen nicht aufgrund seiner Er fahrung und des gesunden Menschenverstandes erg nzt Der erste Schritt bei der Programmentwicklung ist daher die Formulierung der Auf gabe Zu diesem Schritt kehrt man im Verlauf des Programmierens immer wieder zur ck um zu erg nzen oder zu berichtigen Es ist realistisch f r die Aufgabenanalyse rund ein Drittel des gesamten Zeitaufwandes anzusetzen Die Aufgabe wird in einem Pflichtenheft schriftlich festgehalten das zur Verst ndigung zwischen Entwickler und Anwender sowie der Entwickler untereinander dient Fragen in diesem Zusammenhang sind Welche Ergebnisse soll das Programm liefern Welche Eingaben sind erforderlich Welche Ausnahmef lle Fehler sind zu ber cksichtigen n welcher Form sollen die Ergebnisse ausgegeben werden Wer soll mit dem Programm umgehen Auf welchen Computern soll das Programm laufen Anf nger sehen die Schwierigkeiten des Programmierens in der Umsetzung des L sungs weges in eine Programmiersprache in der Codierung Nach einigem ben stellt sich dann heraus dass die dauerhaften Schwierigkeiten in der Formulierung und Analyse der Aufgabe allenfalls noch im Suchen nach L sungen liegen w hrend die Codierung gr tenteils Routine wird Nach unserer Erfahrung sollte man eine Aufgabe zun chst einmal so formulieren wie sie den augenblicklichen Bed rfnissen entspricht Dann sollte man sich mit viel Phantasi
190. das Klammernpaar ist der Pointer auf ihren Anfang Es gibt Arrays von Pointern das ist nichts Besonderes Also gibt es auch Arrays von Pointern auf Funktionen Anhand eines Beispiels wollen wir uns eine Verwendungsm glichkeit und einige syntaktische Feinheiten ansehen Dabei kommt auch make 1 nochmal zur Geltung sowie ein bi chen Grafikprogrammierung Schiff c Befeuerung und Schallsignale nach BinSchStrO MS Quick C DOS VGA Grafik x define DEBUG include lt stdio h gt fuer puts u a include lt conio h gt fuer getch und kbhit include lt graph h gt fuer Grafik include lt stdlib h gt fuer rand Zufallszahlen include time h fuer time Zufallszahlen include schiff h eigenes Includefile x Funktionsprototypen extern int titel Titelbildschirm void done Aufraeumen x Hauptprogramm x int main Tne In EEK struct videoconfig vc int xschiff MAX index MAXARR time_t zeit Titel und Vorspann 154 KAPITEL 1 PROGRAMMIEREN IN C C titel Grafikmodus VGA 16 Farben x if _setvideomode _VRES16COLOR puts Fehler Keine VGA Grafik exit 1 _setbkcolor BGRAU Array der Funktionen Bilder fuellen schiff 0 bild000 schiff 1 bild001 schiff 2 bild002 schiff 3 bild003 schiff 124 bild124 schiff 125 bild125 Inde
191. de Datei zum Sortierprogramm mysort c Nun das Hauptprogramm das die Verantwortung tr gt aber sonst nicht viel tut Hier ist der Platzhalter Header home debian unix unix8 tex v 1 1 1 1 2005 02 06 20 01 11 wulf Bestandteil des Codes die Versionsinformationen stehen also auch im ausf hrbaren Pro gramm Man k nnte sogar mit ihnen etwas machen ausgeben beispielsweise Sortierprogramm mysort als Beispiel fuer RCS x SLog mysort tex v Revision 1 1 1 1 2005 02 06 19 44 00 wulf Anlegen des prog Reps Exp Exp 1 2 PROGRAMMER S WORKBENCH static char rcsid SHeader incl inc lude lt stdio h gt lude myheader h int main int argc char xargv l long Pruefung der Kommandozeile x timel time2 if argc 2 puts USAGE return 1 Pruefung des Textfiles x if access argv 1 0 0 puts NOTEXIST return 2 if access argv 1 4 puts NOTREAD return 3 Sortierfunktion und Zeitmessung timel time long 0 if bubble argv 1 puts NOTSORT return 4 time2 time long 0 x Ende printf Das Sortieren dauerte 513 sec n return 0 Hier die Funktion zum Sortieren Bubblesort nicht optimiert Der einzige Witz in dieser Funktion ist da wir nicht die Strings durch Umkopieren sortieren sondern nur die Indizes der Strings Ansonsten kann
192. deren siehe An hang H Zum Weiterlesen auf Seite 234 1 7 4 X11 Programmierung mit dem Qt Toolkit Der Quasar Toolkit Qt ist eine Widget Bibliothek der Firma Troll Tech www troll no die sowohl f r das X Window System X11 als auch f r Microsoft Windows erh ltlich ist F r die Entwicklung freier UNIX Software ist die Nutzung der Bibliothek kostenlos vor einiger Zeit hat Troll Tech die Bibliothek unter eine OpenSource Lizenz www opensource org gestellt so daB auch nderungen an den Quellen erlaubt sind Bekannt wurde Qt als Basis der Arbeitsumgebung KDE www kde org Die X11 Programmierung gestaltet sich mit Qt deutlich einfacher als mit anderen Biblio theken Motif und ist gepr gt einerseits durch die Verwendung von C andererseits durch den Mechanismus von Signalen und Slots beides tr gt wesentlich zur effizienteren und weniger fehleranf lligen Programmierung bei Die libQt eignet sich auch hervorragend um das Konzept der objektorientierten Program mierung besser zu verstehen Ben tigt man beispielsweise eine neue Art von Knopf entwi ckelt man auf der Basis der abstrakten Klasse QButton eine neue Klasse die damit alle Grundeigenschaften von Kn pfen erbt abstrakt bedeutet hier da die Klasse einige Funk tionen enth lt die implementiert werden m ssen bevor die Klasse verwendet werden kann neu schreiben mu man nur noch die Funktionen drawButton und drawButtonLabel die f r die eigentliche Darstellung des
193. dezimalsystem gebr uchlich Ferner spielt das Bin r codierte Dezimalsystem BCD bei manchen An wendungen eine Rolle Bei diesem sind die einzelnen Dezimalstellen f r sich dual darge stellt Die folgende Tabelle enth lt die Werte von 0 bis dezimal 255 Bequemlichkeitshalber sind auch die zugeordneten ASCII Zeichen aufgef hrt dezimal dual oktal hex BCD ASCII 0 0 0 0 nul 1 1 1 1 1 soh 2 10 2 2 10 stx 3 11 3 3 11 etx 4 100 4 4 100 eot 5 101 5 5 101 eng 6 110 6 6 110 ack 7 111 7 7 111 bel 8 1000 10 8 1000 bs 9 1001 11 9 1001 ht 10 1010 12 a 1 0 If 11 101 13 b 1 1 vt 12 1100 14 1 10 ff 13 1101 15 d 1 11 cr 14 1110 16 e 1 100 so 15 1111 17 f 1 101 si 16 10000 20 10 1 110 dle 17 10001 21 11 1 111 del 18 10010 22 12 1 1000 dc2 19 10011 23 13 1 1001 dc3 20 10100 24 14 10 0 dc4 21 10101 25 15 10 1 nak 22 10110 26 16 10 10 syn 23 10111 27 17 10 11 etb 24 11000 30 18 10 100 can 25 11001 91 19 10 101 em 26 11010 32 la 10 110 sub 27 11011 33 1b 10 111 esc 28 11100 34 lc 10 1000 fs 29 11101 35 1d 10 1001 gs 30 11110 36 le 11 0 rs 31 11111 37 1f 11 1 us 32 100000 40 20 11 10 space 33 100001 41 21 11 11 34 100010 42 22 11 100 3 35 100011 43 23 11 101 36 100100 44 24 11 110 37 100101 45 25 11 111 38 100110 46 26 11 1000 amp 39 100111 47 27 11 1001 3 180 101000 101001 101010 101011 101100 101101 101110 101111 110000 110001 110010 110011 110100 110101 110110 110111 111000 111001 111010 111011 111100 11
194. dings aufbauend auf den Erfahrungen des gegenw rtigen Wechsels Das Ziel sind Programme die unabh ngig von der Datengr e auf allen Architekturen laufen und Daten die zwischen verschiedenen Architekturen ausgetauscht werden k nnen Datentyp LP32 ILP32 ILP64 LLP64 LP64 2 A A 8 88 4 4 8 4 8 8 char 8 8 8 8 8 short 16 16 16 16 16 int 16 32 64 32 32 long 32 32 64 32 64 Pointer 32 32 64 64 64 Tab 1 1 Lange von Datentypen auf verschiedenen Architekturen Je nach L nge der Datentypen int I Long L und Pointer P unterscheidet man heu te die in Tabelle 1 1 auf Seite 51 aufgef hrten Architekturen Es w rde zu weit f hren hier die Vor und Nachteile jeder Architektur gegeneinander abzuw gen Wichtig ist die Architek tur der eigenen Maschine zu kennen in unserem Fall ILP32 und die Programme m glichst portabel zu gestalten Hierzu Empfehlungen im Abschnitt 1 13 Portieren von Programmen auf Seite 173 F r ganze Zahlen sind die Addition die Subtraktion die Multiplikation die Modulo Operation Divisionsrest und die Division unter Vernachl ssigung des Divisionsrestes de finiert ferner Vergleiche mittels gr er gleich kleiner 52 KAPITEL 1 PROGRAMMIEREN IN C C Gleitkommazahlen Gleitkommazahlen auch als Reals oder Floating Point Numbers be zeichnet werden durch eine Mantisse und einen Exponenten dargestellt Der Exponent versteht sich nach au en zur Basis 10 intern wird die Basis 2 verwende
195. double Typ Gleitkommazahl doppelter Genauigkeit enum Aufz hlungstyp extern Speicherklasse float Typ Gleitkommazahl einfacher Genauigkeit int Typ Ganzzahl einfacher L nge long Typ Ganzzahl doppelter L nge register Speicherklasse Registervariable hort Typ Ganzzahl halber L nge n signed Typzusatz zu Ganzzahl oder Zeichen static Speicherklasse truct Strukturtyp nion Typ Union 8 typedef Definition eines benutzereigenen Typs u u nsigned Typzusatz zu Ganzzahl oder Zeichen void leerer Typ volatile Typattribut neu in ANSI C Schleifen und Bedingungen Kontrollanweisungen break Verlassen einer Schleife case Fall einer Auswahl switch continue R cksprung vor eine Schleife default Default Fall einer Auswahl switch do Beginn einer do Schleife else Alternative einer Verzweigung for Beginn einer for Schleife goto unbedingter Sprung if Bedingung oder Beginn einer Verzweigung switch Beginn einer Auswahl while Beginn einer while Schleife Sonstige return R cksprung in die aufrufende Einheit 198 D 1 SCHL SSELW RTER 199 sizeof Bytebedarf eines Typs oder einer Variablen In C kommen laut BJARNE STROUSTRUP hinzu catch Ausnahmebehandlung class Klassendeklaration delete L schen eines Objektes friend Deklaration einer Funktion inline inline Funktion new Erzeugen eines Objektes operator berladen von Operatoren private Deklaration von Klassenmi
196. dschirmger t Uberwachungsprogramm 2 T tensuppe 0 Freund von Asterix und Obelix 0 hervorragendes Betriebssystem 2 Computerzubeh r 2 m nnlicher K rperteil 0 Hebel am Spielautomat 0 kleines S ugetier 1 Computerzubeh r 2 junge Dame 1 russisches Heiligenbild 0 Sinnbild 2 Kamerafabrik 0 franz sischer Mathematiker 1 Ma einheit f r Druck 1 Programmiersprache 2 englisch f r Wolpertinger 0 franz sisch f r Elmentritschen 0 what you see is what you get 2 Register Record HP Kermit Ethernet Algorithmus File Bug Router Zylinder FTP 211 was in Flensburg 1 was an der Orgel 1 Speicher 2 was im Sport 1 englisch f r Blockfl te 0 Datensatz 2 High Price 0 Hewlett Packard 2 Horse Power 1 Klebstoff 0 Frosch aus der Muppet Show 1 File bertragungs Protokoll 2 Baustoff Asbestzement 0 Local Area Network 2 Student der ETH Z rich 0 berm iger Genu geistiger Getr nke 0 Krankheit 0 Rechenvorschrift 2 Was zum Essen 0 Menge von Daten 2 Durchtriebener Kerl 0 Vorderteil eines Schiffes 1 Fehler im Programm 2 englisch f r Wanze 1 jemand mit Routine 0 franz sischer LKW Fahrer 0 Verbindungsglied zweier Netze 2 Kopfbedeckung 1 Teil einer Kolbenmaschine 1 Unterteilung eines Plattenspeichers 2 kleine aber liberale Partei 0 File Transfer Protocol 2 Floating Point Process
197. dungen des Betriebssystems nach oben zu den Anwen dungsprogrammen hin Sie sind Teil des Betriebssystems Systemaufrufe haben vorwiegend mit Prozessen den Datei Systemen und der Ein und Ausgabe zu tun UNIX Systemaufrufe sind C Funktionen die sich im Gebrauch nicht von anderen C Funktionen unterscheiden C Standardfunktionen geh ren zum C Compiler nicht zum Betriebssystem Ein FORTRAN Programmierer auf einem UNIX System ist auf die UNIX Systemaufrufe angewiesen nicht aber auf die C Standardfunktionen daf r gibt es FORTRAN Standardfunktionen Dasselbe gilt f r jede andere Programmierspra che 1 2 PROGRAMMER S WORKBENCH 43 1 2 12 bung Programmer s Workbench Anmelden wie gewohnt Zum ben brauchen wir ein kleines Programm mit bestimmten Feh lern Legen Sie mit mkdir prog ein Unterverzeichnis prog an wechseln Sie mit cd prog dorthin und geben Sie mit vi fehler c folgendes C Programm ohne den Kommentar un ter dem Namen fehler cein Uebungsprogramm mi 1 Fehler t mehreren Fehlern Es wird eine symbolische definiert die nic hat keine Auswirku ht gebraucht wird Konstante PI Dieser Fehler keinem ngen und wird von Programm bemerkt 2 Fehler Eine Ga aber nicht gebrauc Auswirkungen wird 3 Fehler Die Fun Argument es muss Syntaxfehler lint aus der Compiler nzzahl Variable d wird deklariert ht Dieser Fehler hat keine aber von lint beanstandet ktion scanf ve
198. durch Shellskript 29 01 1988 x Compileraufruf cc o cssh cssh c int main int argc char argv int x y sscanf argv 1 d amp x sscanf argv 2 d amp y printi iadt x t y return 0 Quelle 1 51 C Programm das Parameter von einem Shellscript bernimmt Ferner k nnen Shellscripts Shellfunktionen aufrufen siehe das Shellscript T rme von Hanoi auf Seite Entschuldigen Sie bitte da dieser Abschnitt etwas breit geraten ist Die Parameter ber gabe mu sitzen wenn man mehr als Trivialprogramme schreibt und man ist nicht immer in der gl cklichen Lage rein in C programmieren zu k nnen Verwendet man vorgegebene Bi bliotheken so sind diese manchmal in einer anderen Programmiersprache verfa t Dann hat man sich mit einer fremden Syntax und den kleinen aber bedeutsamen Unvertr glichkeiten herumzuschlagen 1 4 4 Kommandozeilenargumente main Auch das Hauptprogramm main ist eine Funktion die Parameter oder Argumente ber nehmen kann und zwar aus der Kommandozeile beim Aufruf des Programms Sie kennen das von vielen UNIX Kommandos die nichts anderes als C Programme sind 1 4 FUNKTIONEN 91 Der Mechanismus ist stets derselbe Die Argumente getrennt durch Spaces oder hn liches werden in ein Array of Strings mit dem Namen argv Argumentvektor gestellt Gleichzeitig z hlt ein Argumentz hler argc die Anzahl der bergebenen Argumente wo bei der Funktionsname selbst das
199. e void done _clearscreen _GCLEARSCREEN _setvideomode _DEFAULTMODE exit 0 Quelle 1 90 C Programm Array von Pointern auf Funktionen Das Programm zeichnet die Konturen von Binnenschiffen samt ihrer Befeuerung Positi onslichter etc auf den Schirm Tuten kann es auch Ist der Hintergrund schwarz Nacht sieht man nur die Lichter ist er grau Tag sieht man auch die Konturen und die Bild unterschrift Die verschiedenen Arten der Befeuerung werden durch jeweils eine Funktion bild xx erzeugt Die Funktionspointer stehen in einem Array int xschiff MAX MAX 126 in schiff h Die Funktionen werden ber ihren Index aufgerufen die Reihenfolge wird von einem weite ren Array int index MAXARR Za MAXARR ein Mehrfaches von MAX x bestimmt das entweder mit einer wiederholten Folge der nat rlichen Zahlen von 0 bis MAX 1 belegt ist oder mit einer Zufallsfolge von Zahlen dieses Intervalles So kann man sich die Befeuerungen in einer systematischen oder zuf lligen Folge anzeigen lassen Die Funktionen bildx xx sind in einer Datei in einem eigenen Unterverzeichnis verei nigt Funktionen bild include bilder h 156 KAPITEL 1 PROGRAMMIEREN IN C C Sportboot int bild001 text0 Bild 001 textl Sportboot von vorn sportboot 0 feuersportl return 0
200. e bereinstimmen wird das linke Objekt angepa t wie es hier mit der Matrix C geschieht Der dynamisch zugewiesene Speicherplatz eines lokal vereinbarten Arrays wird automa tisch beim Verlassen des G ltigkeitsbereiches freigegeben Hinsichtlich Lebensdauer und G ltigkeitsbereich besteht kein Unterschied zu den aus C gewohnten Arrays Die Gr e eines Vektors oder einer Matrix kann jederzeit durch Aufrufen der Funktionen Lb und Ub f r die untere bzw obere Indexgrenze ermittelt werden 1 7 3 3 Teilfelder von Vektoren und Matrizen C XSC stellt eine eigene Schreibweise f r die Handhabung von Teilfeldern Subarrays von Vektoren und Matrizen zur Verf gung Subarrays sind beliebige rechteckige Ausschnitte aus Arrays Alle vordefinierten Operatoren nehmen auch Subarrays als Operanden an Ein Sub array einer Matrix oder eines Vektors wird ber den Operator oder ber den Operator angesprochen Der Operator bezeichnet ein Subarray eines Objektes vom selben Typ wie das urspr ngliche Objekt Ist beispielsweise A eine reelle n x n Matrix dann ist A i i die linke obere i x i Submatrix Man beachte da die Klammern in der Deklaration eines dy namischen Vektors oder einer ebensolchen Matrix kein Subarray bezeichnen sondern den Indexbereich des anzulegenden Objektes einschlie en Der Operator erzeugt ein Subarray eines niedrigeren Typs Wenn A eine Matrix vom Typ n x n rmatrix ist dann ist Ali die i te Zeile von A mit dem Typ rv
201. e ungetc schreibt letztes gelesenes Zeichen zur ck vfprintf schreibt formatiert aus einer Argumentenliste vprintf schreibt formatiert aus einer Argumentenliste vsprintf schreibt formatiert aus einer Argumentenlsite Mathematik acos arcus cosinus asin arcus sinus atan arcus tangens atan2 arcus tangens erweiterter Bereich ceil kleinste Ganzzahl COS cosinus cosh cosinus hyperbolicus exp Exponentialfunktion fabs Absolutwert Betrag D 3 STANDARDFUNKTIONEN 203 floor gr te Ganzzahl mod Divisionsrest frexp teilt Gleitkommazahl auf ldexp teilt Gleitkommazahl auf log Logarithmus naturalis 1og10 dekadischer Logarithmus modf teilt Gleitkommazahl auf pow allgemeine Potenz sin sinus sinh sinus hyperbolicus sqrt positive Quadratwurzel tan tangens tanh tangens hyperbolicus e Speicherzuweisung calloc allokiert Speicher fiir Array free gibt allokierten Speicher frei malloc allokiert Speicher realloc ndert Gr e des allokierten Speichers Prozesssteuerung abort erzeugt SIGABRT Signal atexit Funktionsaufruf bei Programmende exit Programmende raise sendet Signal signal legt Antwort auf Siganl fest system bergibt Argument an Kommandointerpreter Suchen und Sortieren bsearch bin re Suche qsort Quicksort e Stringbehandlung trcat verkettet Strings trchr sucht Zeichen in String trcmp vergleicht Strings trcpy kopiert String trcspn sucht T
202. e Die Umsetzung in eine Programmiersprache Codierung ist dann vergleichsweise harmlos Ein Programm soll nicht nur die zugrundeliegende Aufgabe richtig l sen sondern auch gegen Fehler und Ausnahmen unempfindlich robust sein Die Fehlerbehandlung er fordert mehr Programmzeilen als die eigentliche Aufgabe Ein Programm soll einfach zu ndern sein Dies wird durch eine gute Struktur und reichlich Kommentar erleichtert wenn man schon keine ausf hrliche Dokumentation schreibt Ein Programm soll menschenfreundlich sein 1 1 13 bung Grundbegriffe Nehmen wir an der Weg zu Ihrem Arbeitsplatz bestehe aus mehreren Teilstrecken mit unter schiedlichen Gegebenheiten Sie wollen wissen was es bringt und kostet wenn Sie einzelne Teilstrecken schneller oder langsamer zur cklegen Sie brauchen also ein Programm zur Analyse Ihres Arbeitsweges Formulieren Sie die Aufgabe genauer zerlegen Sie sie in Teilaufgaben beschreiben Sie die Ein und Ausgabe ber cksichtigen Sie Fehler des Benutzers Aus welchen Gr en besteht die Ausgabe welche Eingaben sind f r die Rechnungen erforderlich Kann eine Division durch Null vorkommen Das Ergebnis sollten einige Bl tter Papier mit Worten Formeln und Skizzen sein nach denen ein Programmierer arbeiten k nnte Sie selbst sollen an dieser Stelle noch nicht an eine Programmiersprache denken Falls Ihnen die bung zu einfach erscheint machen Sie dasselbe f r einen Vokabeltrainer der au er De
203. e ausmalen was alles noch dazu kommen k nnte wenn Geld Zeit und Verstand keine Schran ken setzen w rden J have a dream Drittens streiche man von diesem Traum gnadenlos alles weg was nicht unbedingt erforderlich und absolut minimal notwendig ist ohne das vielleicht nur asymptotisch erreichbare Ziel aus den Augen zu verlieren So kommt man mit beschr nkten Mitteln zu Software die sich entwickeln kann wenn die Zeit daf r reif ist Anpassungsf higkeit ist f r Software und Lebewesen wichtiger als H chstleistungen 1 1 9 2 Zerlegen in Teilaufgaben Controlling complexity is the essence of computer programming B W KERNIGHAN P J PLAUGER Software Tools Komplexe Aufgaben werden in mehreren Stufen in Teilaufgaben zerlegt die berschaubar sind und sich durch eine Funktion oder Prozedur im Programm l sen lassen Insofern spiegelt die Zerlegung bereits die sp tere Programmstruktur wi der Das Hauptprogramm soll m glichst wenig selbst erledigen sondern nur Aufrufe von Unterprogrammen enthalten und somit die gro e Struktur widerspiegeln Oft ist folgende Gliederung ein zweckm iger Ausgangspunkt Programmstart Initialisierungen Eingabe Dialog Rechnung Ausgabe Hilfen Fehlerbehandlung Programmende Aufr umen Bei den Teilaufgaben ist zu fragen ob sie sich ohne die Komplexit t wesentlich zu erh hen allgemeiner formulieren lassen Damit l sst sich die Verwendbarkeit von Programm teil
204. e Division durch eine Variable die manchmal den Wert Null annimmt Die Fehlermel dung lautet Floating point exception Ein anderer h ufig vorkommender Laufzeitfehler ist die berschreitung von Arraygrenzen oder die Verwechslung von Variablen und Pointern was zu einem Memory fault einem Speicherfehler f hrt Die dritte Klasse bilden die logischen Fehler oder Denkfehler Sie werden auch se mantische Fehler genannt Das Programm arbeitet einwandfrei nur tut es nicht das was sich der Programmierer vorgestellt hat Ein typischer Denkfehler ist das Verz hlen bei den Elementen eines Arrays oder bei Schleifendurchg ngen um genau eins Hier hilft der Compu ter nur wenig da der rmste ja gar nicht wei was sich der Programmierer vorstellt Diese Fehler kosten viel M he doch solcherlei Verdr sse pflegen die Denkungskr fte anzuregen meint WILHELM BUSCH und hat recht Eine vierte Fehlerklasse liegt fast schon au erhalb der Verantwortung des Programmie rers Wenn das mathematische Modell zur Beschreibung eines realen Problems ungeeignet ist mag das Programm so fehlerarm sein wie es will seine Ergebnisse gehen an der Wirk lichkeit vorbei F r bestimmte Zwecke ist eine Speisekarte ein brauchbares Modell einer Mahlzeit f r andere nicht In diese Klasse fallen auch Fehler die dadurch entstehen dass wir im Computer stets mit Zahlen endlicher L nge rechnen w hrend in Wirklichkeit die Zahl unendlich viele De zimalstellen hat und gemessen
205. e Gr fen statistischen Schwankungen unterliegen also un scharf begrenzte Intervalle darstellen Grundkenntnisse in moderner numerischer Mathe matik bewahren vor blindem Glauben an den Computer Ob und wie inhaltliche Fehler in Texten falsche oder fehlende Angaben einer der vor stehenden Klassen sinnvoll zugeordnet werden k nnen ist noch zu berlegen Dann gibt es noch den Fehler Thema verfehlt der vielleicht zum Modell Fehler passt Hintergrund dieser Gedanken ist die Anwendung von Software Werkzeugen in Text Projekten was erwiesener ma en die Arbeit erleichtert 15Es irrt der Mensch so lang er strebt GOETHE Faust Oder errare humanum est wie wir Lateiner sagen Noch etwas lter auaprwAa ev avdpwroLo v dvnro s Die entspre chende Aussage in babylonischer Keilschrift aus dem Codex Kombysis k nnen wir leider aus Mangel an einem TeX Font vorl ufig nicht wiedergeben In der n chsten Auflage werden wir jedoch eine eingescannte Zeichnung aus der H hle von Rienne Vaplus zeigen die als lteste Dokumentation obiger Weisheit gilt 24 KAPITEL 1 PROGRAMMIEREN IN C C Ein Fehler wird im Englischen auch als bug bezeichnet was soviel wie Wanze oder Laus bedeutet Ein Programm zu entlausen hei t Debugging Dazu braucht man einen Debug ger d verminateur d boguer Das sind Programme unter deren Kontrolle das verlauste Programm abl uft Man hat dabei vielf ltige M glichkeiten in den Ablauf einzugreifen
206. e Klammern klar und eindeutig zu kennzeichnen berfl ssige Klammerpaare st ren den Compiler nicht Hier die Liste der Operatoren von C mit nach unten abnehmendem Rang LT ct cast amp sizeof x E lt lt lt lt gt gt f amp amp amp lt lt gt gt amp u Zuerst werden also die runden Klammern ausgewertet wie in der Mathematik haben sie Vor rang vor allen anderen Operatoren au er den drei weiteren in derselben Zeile Am schw chs ten bindet der Komma Operator Neben ihrem Rang haben Operatoren eine Assoziativit t oder Leserichtung associati vity Die Auswertung eines Ausdrucks wie 8 ist durch Vorrang nicht eindeutig zu kl ren da die beiden Pluszeichen denselben Rang ha ben Dieser Fall tritt immer auf wenn auf beiden Seiten eines Operanden Operatoren des selben Ranges stehen Durch den Compiler nicht durch die Syntax der Sprache die l sst die Frage offen ist nun festgelegt dass die arithmetischen Operatoren links assoziativ sind Der Operand in der Mitte wird vom linken Operator geschnappt so dass die Summe wie folgt ausgewertet wird a b c Man k nnte auch sagen dass der Ausdruck von links nach rechts gelesen wird Eine Zu weisung dagegen ist von rechts nach links zu lesen sie ist rechts assoziativ Zuerst wird die rechte Seite der Zuweisung ausgewertet und dann das Ergebnis der linken Seite zugewiesen
207. e Programmieraufgaben das beste Modell es gibt auch noch andere Modelle aber f r dialogintensive kleine und mittlerer Anwendungen recht brauchbar und in C leicht zu verwirklichen 1 1 11 Flussdiagramme Programme werden schnell un bersichtlich Man hat daher schon fr h versucht mit Hilfe grafischer Darstellungen den berblick zu behalten aber auch diese neigen zum Wuchern Ein grunds tzlicher Mangel ist die Beschr nkung eines Blattes Papier auf zwei Dimensionen Es ist unm glich ein umfangreiches Programm durch eine einzige halbwegs berschaubare Grafik zu beschreiben Flussdiagramme flow chart auch Blockdiagramme genannt sollen die Abl ufe inner halb eines Programmes durch Sinnbilder nach DIN 66 001 und Text darstellen unabh ngig von einer Programmiersprache Obwohl das Flussdiagramm vor dem Programmcode erstellt werden sollte halten sich viele Programmierer nicht an diese Reihenfolge Zum Teil ersetzt eine gute typografische Gestaltung der Programmquelle auch ein Flussdiagramm w hrend das Umgekehrte nicht gilt Ein Flussdiagramm ist nicht mit einem Syntaxdiagramm zu ver wechseln lesen Sie die beiden entsprechenden Abbildungen die die if else Verzweigung dar stellen einmal laut vor 1 Real programmers don t draw flowcharts 1 1 GRUNDBEGRIFFE Bedingung Anweisung 1 Anweisung 2 Anweisung 4 Anweisung 3 Abb 1 1 Flussdiagramm einer if else Verzweigung i
208. e Regeln von C C verst t also auch Kommentar oder Programmteile Die Namen der Standard Include Dateien sind in lt gt einzuschlie en die Namen eige ner Include Dateien in G nsef chen Letztere werden zuerst in dem Verzeichnis gesucht in dem auch das Quellprogramm steht Falls der Pr prozessor dort nicht f ndig wird oder falls der Name in spitzen Klammern eingeschlossen ist wird in vorgegebenen Verzeichnissen wie usr include gesucht Durch Compileroptionen siehe man cpp l t sich die Suche steu ern Die Include Dateien sind lesbar und finden sich im Verzeichnis usr include vom Be nutzer erstellte Include Dateien im selben Verzeichnis wie die Programmauelle Die Datei Kennung h ist blich aber nicht notwendig Als Beispiel sehen wir uns die h ufig gebrauch te Datei stdio h in gek rzter Form an 1 9 dif de de PR PROZESSOR el SRevision ndef NFILI fine NFILI 60 fine BUFSIZ 1024 131 Vidal SRS buffer size for multi character output to x de typ int uns uns sho cha F de de de de de de de de if de en if de en de de de if de de de de de def unbuffered files fine SBFSIZ 8 edef struct SCHE igned char ptr igned char base rt flag r file ILE _IOLBF means that a fil line by line In addition to being fl are possible val
209. e brauchen Sie 9 10 11 31Real programmers aren t afraid to use got 78 KAPITEL 1 PROGRAMMIEREN IN C C return 0 Quelle 1 30 C Programm mit goto grauenvoll Nun aber ganz schnell eine stilistisch einwandfreie Fassung des Programms Verbessertes Beispiel 06 07 1992 include lt stdio h gt int main int x printf Bitte Zahl eingeben scanf d amp x do print d n n x while x 5 return 0 Quelle 1 31 C Programm verbessert Am goto hatte sich um 1970 herum ein Glaubenskrieg entz ndet In C Programmen besteht u erst selten die Notwendigkeit f r diese Anweisung aber gebr uchliche Anwei sungen wie break continue und return sind bei Licht besehen auch nur gotos die auf bestimmte F lle beschr nkt sind Immerhin verhindern die Beschr nkungen ein hemmungs loses Hinundherh pfen im Programm 1 3 8 4 R ckgabewert Eine Funktion braucht keinen Wert an die aufrufende Einheit zur ckzugeben Sie ist dann vom Typ void Ihre Bedeutung liegt allein in dem was sie tut zum Beispiel den Bildschirm putzen In diesem Fall endet sie ohne return Anweisung schlechter Stil oder mit einer return Anweisung ohne Argument Was sie tut wird Nebenwirkung oder Seiteneffekt side effect genannt In FORTRAN w re das eine Subroutine in PASCAL eine eigentliche Prozedur Gibt man der return Anweisung einen Wert mit so kann die Funktion von der aufrufen den Einheit
210. e der Single UNIX Specification gen gen Die Universit t Karlsruhe erm glicht in Zusammenarbeit mit dem Oberschulamt nordbadischen Schulen den Zugang zum Internet hnliche Projekte werden auch an einigen anderen Hoch und Fachhochschulen durchgef hrt Die Programmiersprache JAVA wird von Sun ver ffentlicht Online Auktionshaus Ebay als Sammlerb rse in den USA gegr ndet Weltweit etwa 50000 Web Server Die Massen und Medien entdecken das Internet Debian GNU Linux Version 1 1 buzz wird ver ffentlicht zum Jahresende folgt Version 1 2 rex FORTRAN 95 eine revidierte Fassung von FORTRAN 90 fertig Die Open Software Foundation OSF und X Open schlie en sich zur Open Group zusammen 232 1997 1998 1999 2000 2001 2002 2004 2005 2006 ANHANG G ZEITTAFEL 100 Ethernet ist erschwinglich geworden ber das Gigabit Ethernet wird geredet In Deutschland gibt es rund 20 Mio PCs und 1 Mio Internetanschl sse Quelle Fachverband Informationstechnik Debian GNU Linux Version 1 3 bo freigegeben rund 1000 Pakete Single UNIX Specification Version 2 im Web ver ffentlicht HTML 4 0 freigegeben Der Buchversender Amazon meldet ein Patent an dergestalt dass man mit einem Mausklick im Internet eine Ware bestellt Compaq bernimmt die Digital Equipment Corporation DEC IBM bringt DOS 2000 heraus Microsoft k ndigt Windows 2000 an Debian GNU Linux Version 2 0 hamm freigegeben 1500 Pakete KDE 1
211. ebensdauer Beim Eintritt in einen Bereich wird f r die in diesem Bereich definierten Variablen Speicher zugewiesen allokiert Beim Verlassen des Bereiches wird der Speicher freigegeben von den Variablen bleibt keine Spur zur ck Ihre Lebensdauer lifetime ist die aktive Zeitspanne des Bereiches Beim n chsten Aufruf des Bereiches wird neuer Speicher zugewiesen und initialisiert Diese Speicherklasse wird als auto bezeichnet und ist die Standardklasse aller Variablen f r die nichts anderes vereinbart wird M chte man jedoch mit den alten Werten weiterrechnen so muss man die Variable der Speicherklasse static zuweisen Der Geltungsbereich wird davon nicht ber hrt aber der Speicher samt Inhalt bleibt beim Verlassen der Funktion bestehen Die Variable besteht ist aber vor bergehend unsichtbar existent aber nicht zug nglich 1 8 7 Operationen 1 3 7 1 Ausdr cke Wir haben bisher Operanden betrachtet aber nichts mit ihnen gemacht Nun wollen wir uns ansehen was man mit den Operanden anstellen kann Der Operator bestimmt was mit dem Operand geschieht Un re Operatoren wirken auf genau einen Operanden bin re auf zwei tern re auf drei Mehr Operanden sind selten Operator plus Operanden bezeichnet man als Ausdruck expression Ein Ausdruck hat nach seiner Auswertung einen Wert und kann berall dort stehen wo ein Wert verlangt wird Eine Funktion die einen Wert zur ckgibt kann anstelle eines Ausdrucks oder Wertes stehen 1 3
212. ec buffer st ctime MEZ pc gmtime amp csec printf Letzter Zugriff d d n pa gt tm_mday pa gt tm_mon 1 pa gt tm_year printf Letzte Modifik d d n pm gt tm_mday pm gt tm_mon 1 pm gt tm_year printf Letzte Stat Ae d d d n pc gt tm_mday pc gt tm_mon 1 pc gt tm_year else puts Kein Zugriff auf Inode Pruefung auf Text oder Code magic number x Systemaufrufe open 2 lseek 2 read 2 close 2 Magic Numbers siehe magic 4 MAGIC magbuf fildes open argv 1 O RDONLY if lseek fildes MAGIC OFFSET 0 gt long 0 read fildes amp magbuf sizeof magbuf switch magbuf file_type case RELOC_MAGIC puts File ist relocatable break case EXEC_MAGIC case SHARE_MAGIC case DEMAND_MAGIC puts File ist executable break case DL_MAGIC case SHL_MAGIC puts File ist Library break default puts Filetyp unbekannt Magic Number lseek fildes OL 0 else puts Probleme mit dem Filepointer close fildes 1 2 PROGRAMMER S WORKBENCH 41 Quelle 1 18 C Programm zum Abfragen von Informationen ber eine Datei Die Verwendung von Systemaufrufen oder Standardfunktionen in C Programmen ist nicht schwieriger als der Gebrauch anderer Funktionen Man muss sich nur an die im Referenz Handbuch Sektionen 2 und 3 nachzulesende Synta
213. ector und Alillj ist das i j te Element von A mit dem Typ real 120 KAPITEL 1 PROGRAMMIEREN IN C C Beide Arten des Zugriffs auf Subarrays k nnen auch verbunden werden beispielsweise ist A k i j ein Subvektor von Index i bis Index j des k ten Zeilenvektors der Matrix A Den Gebrauch von Subarrays zeigt das folgenden Beispiel das die LU Faktorisierung einer n n Matrix A beschreibt for j 1 j lt n 1 jtr for k j 1 k lt n k A k j A k j at31 31 A k j 1 n A k 3 1 n A k 3 Aljl J 1 n Dieses Beispiel nutzt zwei wichtige M glichkeiten von C XSC Erstens sparen wir uns eine Schleife durch die Verwendung von Subarrays Das vereinfacht das Pro gramm Zweitens ist der obige Programmausschnitt unabh ngig vom Typ der Matrix A rmatrix imatrix cmatrix oder cimatrix da alle arithmetischen Operatoren so vor definiert sind wie man es in der Mathematik erwartet 1 7 3 4 Genaue Auswertung von Ausdr cken Beim Auswerten arithmetischer Ausdr cke spielt die Genauigkeit eine entscheidende Rolle in vielen Algorithmen Auch wenn alle arithmetischen Operatoren und Standardfunktionen f r sich allein maximaler genau sind so liefern zusammengesetzte Ausdr cke doch nicht notwendigerweise Ergebnisse maximaler Genauigkeit Deshalb sind Verfahren entwickelt worden die numerische Ausdr cke mit hoher und auf mathematischem Wege garantierter Genauigkeit auswerten Eine besondere Art solc
214. eder stehe lautet Was ist XYZ und wozu kann man es gebrauchen Hinsichtlich vieler Einzelheiten verweise ich auf die Referenz Handb cher zu den Rechenanlagen und Programmiersprachen oder auf Monografien um den Text nicht ber die Ma en aufzubl hen er ist ein Kompromiss aus Breite und Tiefe Alles ber UNIX C und das Internet ist kein Buch sondern ein B cherschrank An einigen Stellen gehe ich au er auf das Wie auch auf das Warum ein Von Zeit zu Zeit sollte man den Blick weg von den Wellen auf das Meer richten sonst erwirbt man nur kurzlebiges Wissen Man kann den Gebrauch eines Betriebssystems einer Programmiersprache oder der ii iv Netzdienste nicht allein aus B chern erlernen das ist wie beim Klavierspielen oder Ku chenbacken Die Beispiele und bungen wurden auf einer Hewlett Packard 9000 712 un ter HP UX 10 20 und einem PC der Marke Weingartener Katzenberg Auslese unter Debian GNU Linux entwickelt Als Shell wurden Bourne Abk mmlinge bevorzugt als Compiler wur de neben dem von Hewlett Packard der GNU gcc verwendet Die vollst ndigen Quellen der Beispiele stehen im Netz Dem Text liegen eigene Erfahrungen aus f nf Jahrzehnten zugrunde Seine Wurzeln ge hen zur ck auf eine Erste Hilfe f r Benutzer der Hewlett Packard 9000 Modell 550 unter HP UX im Jahr 1986 aus zwanzig Aktenordnern destilliert die die Maschine begleiteten Ge genw rtig verschiebt sich der Schwerpunkt in Richtung Debian GNU Linux Ich habe au
215. eelle Zahlen a b eingeben cout lt lt RndDown cin gt gt a lies a abwaerts gerundet cout lt lt RndUp cin gt gt b x lies b aufwaerts gerundet Oecd OR Q2 c5 String nach Intervall cout lt lt SaveOpt I O Parameter auf Stack x cout lt lt SetPrecision 20 16 x Feldbreite Stellen x cout lt lt Hex hexadezimale Ausgabe cout lt lt c lt lt RestoreOpt alte I O Param zurueck x Quelle 1 68 C XSC Programm mit formatierter Ein und Ausgabe 1 7 3 7 C XSC Numerikbibliothek Die C XSC Numerikbibliothek ist eine Sammlung von Funktionen und Programmen zur L sung von Standardaufgaben der numerischen Analysis mit garantierter Genauigkeit der Er gebnisse Folgende Bereiche werden abgedeckt Auswertung und Nullstellen von Polynomen Lineare Systeme Matrizeninvertierung Eigenwerte Eigenvektoren Schnelle Fourier Transformation Nullstellen nichtlinearer Gleichungen Anfangswertprobleme bei gew hnlichen Differentialgleichungen 1 7 KLASSEN BIBLIOTHEKEN 123 1 7 3 8 Beispiel Intervall Newton Verfahren Zu bestimmen sei der Einschlu einer Nullstelle einer reellen Funktion f x Die erste Ab leitung f x sei stetig im Intervall a b und es gelte 0 f x x a b und f a f b 0 Falls X eine Einschlie ung der Nullstelle ist dann wird eine verbesserte Einschlie ung X444 mittels der Formel f m Xn Ks m X IS bere
216. eht aus Operanden und Operationen Er hat einen Wert und kann berall dort stehen wo ein Wert verlangt wird Die einfachste Operation ist die Zuweisung nicht zu verwechseln mit einer mathema tischen Gleichung Sie hat eine linke und eine rechte Seite Rechts steht immer ein Wert also gegebenenfalls ein Ausdruck Links steht eine Variable oder ein Pointer aber niemals ein Ausdruck Weiterhin gibt es arithmetische logische vergleichende Operationen sowie O auf Bits Strukturen oder Pointer Dann haben wir noch den Cast Komma und Sizeof Operator Anweisungen enden immer mit einem Semikolon Aus einer Zuweisung wird durch Anf gen eines Semikolons eine Anweisung Die Kontrollanweisungen Bedingung if Verzweigung if else Auswahl switch Schleife while do while for und Sprung break continue return goto steuern den Programmablauf 1 4 FUNKTIONEN 81 1 3 10 bung Bausteine berlegen Sie welche Operanden mit welchen Typen Sie f r das Beispiel der Weganalyse oder des Vokabeltrainers aus dem vorigen Abschnitt brauchen Eine gute Datenstruktur ist schon fast das halbe Programm Um ein richtiges Programm schreiben zu k nnen fehlt uns noch der n chste Abschnitt 1 4 Funktionen 1 4 1 Aufbau und Deklaration In C ist eine Funktion eine abgeschlossene Programmeinheit die mit der Au enwelt ber einen Eingang und wenige Ausg nge gegebenenfalls noch Notausg nge verbunden ist Hauptprogramm Unterpro
217. eiben kopiert man sich am besten eine hnliche man Seite cat usr share man manl Z pwd l uncompress gt mycommand 1 und editiert diese Vermutlich mu man sich vorher etwas mit dem nrof f Format auseinan dersetzen und mit den unter man 5 beschriebenen Makros Die so erzeugte unkomprimierte nroff 1 Quelle geh rt in ein man Verzeichnis Die mittels compress 1 verdichtete Qelle kommt ohne die Kennung 2 nach man z Dann formatiert man die Quelle nroff mycommand 1 gt mycommand 1 cat 1 11 WEITERE C PROGRAMME 137 und kopiert sie unter dem Namen mycommand 1 in ein cat Verzeichnis Schlie lich ist die formatierte Datei zu komprimieren und in ein cat Z Verzeichnis zu stellen Die Datei hei t in jeder Fassung immer nur mycommand 1 das Format ergibt sich aus dem jeweiligen Ver zeichnis Man braucht nicht alle Formate zu erzeugen eines reicht Im WWW hat die Open Group unter dem URL http www opengroup org common_access ein umfangreiche Zusammenstellung von man Seiten samt Suchmaschine ver ffentlicht Ei ne Suche nach dem Begriff time ergab 43 Seiten von at 1 bisxshrealtime Die Zusam menstellung geh rt zur Single UNIX Specification und enth lt nicht die Seiten von zus tzli chen Programmen wie sendmail 1 In der GNU Welt ist f r online Hilfen das Texinfo Format gebr uchlich das mittels des Kommandos info 1 gelesen wird Einzelheiten am besten im WWW Damit kommen wir zu einem dritten Weg f r online
218. eicher eine Magnettrommel fasst rund 40 KByte Eine Gleitkommaoperation dauert 70 ms Das System versteht nur Maschinensprache Freiburger Code und l uft bis 1972 Im SS 1958 h lt Priv Doz KARL NICKEL Institut f r Angew Mathematik eine Vorlesung Programmieren mathematischer und technischer Probleme f r die elektronische Rechenmaschine Z 22 Die Programmiersprache ALGOL 58 kommt heraus Bei Texas Instruments baut JACK ST CLAIR KILBY den ersten IC im Jahr 2000 erh lt er daf r den Nobelpreis f r Physik Im SS 1959 h lt Priv Doz KARL NICKEL erstmals die Vorlesung Programmieren I im WS 1959 60 die Vorlesung Programmieren II Erstes Werk von Hewlett Packard in Deutschland Siemens baut die Siemens 2002 Programmieren steht noch in keinem Studienplan sondern ist freiwillig Die Karlsruher Z 22 arbeitet Tag und Nacht Die Programmiersprache COBOL wird ver ffentlicht Ein Computerspiel namens Spacewar l uft auf einer Digital Equipment Corporation DEC PDP 1 im MIT ALAN SHUGART entwickelt ein Verfahren zur Aufzeichnung von Daten auf einer magnetisch beschichteten Scheibe Die TH Karlsruhe erh lt im Zuge der Berufungsverhandlungen von Prof Nickel eine Zuse Z 23 die mit 2400 Transistoren arbeitet Ihr Hauptspeicher fasst 240 W rter zu 40 Bits 228 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 ANHANG G ZEITTAFEL Eine Gleitkommaoperation dauert 15 ms Au er Maschinensprache
219. eilstring trerror verweist auf Fehlermeldung trlen ermittelt Stringlange trncat verkettet n Zeichen von Strings trncmp vergleicht n Zeichen von Strings c rncpy kopiert n Zeichen eines Strings trpbrk sucht Zeichen in String trrchr sucht Zeichen in String trspn ermittelt L nge eines Teilstrings ID o HHH HHH n n n un DW trstr sucht Zeichen in String Dies sind alle Funktionen des ANSI Vorschlags Die meisten Compiler bieten dar berhinaus eine Vielzahl weiterer Funktionen die das Programmieren erleichtern aber die Portabilit t verschlechtern 204 ANHANGD C LEXIKON D 4 printf 3 scanf 3 printf 3 und scanf 3 sind die beiden Standardfunktionen zum Ein und Ausgeben von Daten Wichtiger Unterschied printf 3 erwartet Variable scanf 3 Pointer Die For matbezeichner stimmen weitgehend berein Bezeichner Typ Beispiel Bedeutung Ic char a Zeichen s char Karlsruhe String Jod int 1234 dezimale Ganzzahl mit Vorzeichen int 1234 dezimale Ganzzahl mit Vorzeichen Yu unsigned 1234 dezimale Ganzzahl ohne Vorzeichen ld long 1234 dezimal Ganzzahl doppelter L nge If double 12 34 Gleitkommazahl mit Vorzeichen Joe double 1 234 E 1 Gleitkommazahl Exponentialform Ze double 12 34 kurze Darstellung von e oder f o unsigned octal 2322 oktale Ganzzahl ohne Vorzeichen ox unsigned hex 4d2 hexadezimale Ganzzahl o Vorzeichen Ip void 68ff32e4 Pointer Prozentzeichen Weiteres im Referenz Handb
220. eit holen x Rechnung x xxf unsigned long 1 for i 1 i lt ende itt for j 0 j lt GRP j x nullsetzen x x 3j3 70 i 4 for j 1 j lt k jtt addieren x aadd x i 1 lshift x lshift x for k 0 k lt i 4 k aadd x i 1 for j 0 j lt GRP j x zurueckschreiben G f i J x x j i j ist dasselbe wie f i j time amp z2 x Zeit holen Ausgabe fuehrende Nullen unterdrueckt printf n tFakultaeten von 0 bis 4d n max for i 0 i lt ende itt 1 4 FUNKTIONEN 99 flag 0 printf n t 4d Nc 2 s for j GRP 1 j gt 0 j if f i J amp amp flag else if flag printf 91lu i J flag 1 else printf 091u i J falls wir weitermachen wollen muessen wir das Array f 261 58 umfunktionieren in 2 In f 0 steht vorige Fakultaet in f 1 wird addiert if max gt END x einrichten e GMX kleiner 7296 zJ lt Jtt xf j 0 Za 0 nullsetzen aadd f 0 END x vorige Fak addieren Rechnung wie gehabt s ei for 1 END 1 i lt max itt for j 0 j lt e 13 1 nullen EE d sors k i 4 for j 1 j lt k j addieren laadd f s f r
221. elberg 2003 900 S Benutzung von Linux UNIX geht in Einzelheiten der Kommandos H Hahn A Student s Guide to UNIX McGraw Hill New York 1993 633 S Einf hrendes Lehrbuch mit Internet Diensten B W Kernighan R Pike Der UNIX Werkzeugkasten Hanser M nchen 1986 402 S Gebrauch vieler UNIX Kommandos 237 M Kofler Linux Installation Konfiguration Anwendung Addison Wesley Bonn 2000 1108 S 5 Auflage spricht f r das Buch D G Korn M I Bolsky The Kornshell Command and Programming Language deutsch Die KornShell Hanser M nchen 1991 Einf hrung in UNIX und die Korn Shell A Robbins UNIX in a Nutshell O Reilly Sebastopol 2000 632 S Nachschlagewerk zu den meisten UNIX Kommandos im UNIX CD Bookshelf enthalten Auch auf Englisch M J Rochkind Advanced UNIX Programming Addison Wesley Boston 2004 719 S Beschreibung der wichtigsten UNIX System Calls K Rosen u a UNIX The Complete Reference Osborne McGraw Hill Berkeley 1999 1302 S Fast w rfelf rmiges Nachschlagewerk insbesondere zu Linux Solaris und HP UX breites Themenspektrum E Siever et al LINUX in a Nutshell O Reilly Sebastopol 2001 880 S Nachschlagewerk zu den meisten LINUX Kommandos W R Stevens Advanced Programming in the UNIX Environment Addison Wesley Boston 1992 744 S hnlich wie Rochkind Linux UNIX Verwaltung A Frisch Essential System Administration O Reilly Sebastopol 1995 760 S bersicht f r Benutzer
222. eldungen unserer Programme in Deutsch man sollte sie ohnedies mittels define Anweisungen irgendwo zusammenfassen so dass sie leicht ausgetauscht werden k nnen Damit sieht man sofort woher eine Meldung stammt Kommentar schreiben wir wieder in Englisch da die Programmbeispiele auch per Mail oder News in die unendlichen Weiten des Internet geschickt werden wo Englisch nun einmal die lingua franca ist An Kommentar soll man nicht sparen denn er kostet wenig Aufwand und kann viel helfen w hrend die Dokumentation zum Programm nur zu oft ad calendas Graecas Sankt Nimmerleins Tag verschoben wird In C kommt eine weitere Art von Kommentar hinzu Er beginnt mit zwei Schr gstri chen und endet mit dem Zeilenwechsel weshalb er Zeilenkommentar genannt wird Dieser Kommentar darf innerhalb des oben genannten Kommentars vorkommen Die umgekehrte Folge ist auch zul ssig aber selten anzutreffen 1 34 Namen Namen identifier bezeichnen Funktionen Konstanten Variable Makros oder Sprungmar ken Labels Sie m ssen mit einem Buchstaben oder einem Unterstrich underscore begin nen Benutzereigene Namen sollten immer mit einem Buchstaben anfangen der Unterstrich als erstes Zeichen wird vom Compiler oder vom System verwendet Die weiteren Zeichen des Namens k nnen Buchstaben Ziffern oder der Unterstrich sein Gro und Kleinbuchstaben werden unterschieden Die maximal zul ssige L nge von Namen kann durch den Compiler den Linker oder das B
223. ements 6 COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released un der this license and replace the individual copies of this license in the various documents with a single copy that is included in the collection provided that you follow the rules of this license for verbatim copying of each of the documents in all other respects You may extract a single document from such a collection and distribute it individually under this license provided you insert a copy of this license into the extracted document and follow this license in all other respects regarding verbatim copying of that document 7 AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works in or on a volume of a storage or distribution medium is called an 2 GNU FREE DOCUMENTATION LICENSE 223 aggregate ifthe copyright resulting from the compilation is not used to limit the legal rights of the compilation s users beyond what the individual works permit When the Document is included in an aggregate this license does not apply to the other works in the aggregate which are not themselves derivative works of the Document If the Cover Text requirement of section 3 is applicable to these copies of the Document then if the Document is less than one half of the entire aggregate the Document s Cover Texts may be placed on covers that brack
224. en Zeichen in internationalen Zeichens tzen Im Herbst bef llt der Wurm Slapper zahlreiche Webserver unter Linux Debian GNU Linux Version 3 0 woody wird als stabil freigegeben Die Distribution umfasst 8700 Pakete PCs werden zunehmend ohne Floppy Laufwerk ausgeliefert Politische berlegungen die Patentierung von Software zuzulassen bedrohen die Open Source Welt Anfang Juni wird Debian GNU Linux Version 3 1 sarge nach reiflicher berlegung als stabil freigegeben und l st 3 0r6 woody ab die Distribution umfasst rund 15 000 Pakete Woody wird damit zur Old stable Version etch r ckt zur Testing Version auf In Frankfurt M findet die Wikimania 2005 statt die erste internationale Wikimedia Konferenz Die deutsche Wikipedia n hert sich der Marke von 300 000 Eintr gen Internet Telefonie Voice over IP ist stark im Kommen Prof KARL STEINBUCH gestorben Ende des Jahres kommt X11R7 heraus Der weltweit leistungsf higste Rechner ein IBM Blue Gene l uft unter einem Linux Quelle http www top500 org Die englische Wikipedia berschreitet die Marke von 1 Mio Eintr gen 233 die deutsche die 400 000 die franz sische die 300 000 Laut http www netcraft com sind die am h ufigsten besuchten Websites Google Yahoo Microsoft BBC CNN Ebay Fox News Amazon und Wikipedia Das Deutsche Forschungsnetz nimmt das X Win in Betrieb eine Netzinfrastruktur mit Anschl ssen bis zu 10 Gigabit s und 43 Kerns
225. en eines Blocks bin rer Daten aus einem Puffer in eine Datei Ein DAtei Pointer ist ein Pointer auf eine Struktur des Typs FILE die in der Include Datei stdio h definiert ist 1 8 7 9 Sonstige Operationen Ferner bietet C noch einige Operatoren f r verschiedene Aufgaben Datentyp Umwandlung cast Operator Komma Operator sizeof Operator sizeof Der cast Operator oder Umwandlungsoperator enth lt in den runden Klammern eine skalare Typbezeichnung ohne Speicherklasse und geht dem umzuwandelnden skalaren Ope randen unmittelbar voraus int n double y y sqrt double n n sei eine Ganzzahl Die Funktion sqrt erwartet jedoch als Argument eine Gleitkom mazahl doppelter Genauigkeit Die Typumwandlung von n wird durch den cast Operator double bewirkt Bei der Typumwandlung k nnen Bits oder Dezimalstellen verlorenge hen wenn der neue Typ k rzer ist als der alte Die Typumwandlung gilt nur im Zusam menhang mit dem cast Operator und hat f r die weiteren Anwendungen der Variablen keine Bedeutung Manche Compiler beanstanden einen cast Operator auf der linken Seite einer Zuweisung als l Wert Der Komma Operator trennt in einer Auflistung von Ausdr cken diese voneinander Sie werden von links nach rechts abgearbeitet Das Ergebnis der Auflistung hat Typ und Wert des rechts au en stehenden Ausdrucks Ein Beispiel J 510 i j j 100 999 printf Sd i Hier wird zuerst j um 1 erh ht da
226. en menschlichen Leser bestimmt der Compiler bergeht ihn oder bekommt ihn gar nicht erst zu Gesicht Namen bezeichnen Funktionen Konstanten Variable aller Art Makros oder Sprung marken Labels Sie sollen mit einem Buchstaben beginnen Operanden haben Namen Typ Geltungsbereich Lebensdauer und sp testens bei ihrer erstmaligen Benutzung einen Wert und belegen damit einen Platz und eine Adresse im Speicher Eine Vereinbarung besteht aus Deklaration und Definition Die Deklaration weist ei nem Operanden Name und Typ zu und legt seinen Geltungsbereich und seine Lebens dauer fest Mit der Definition erh lt ein Operand einen Wert Beides kann in einer Anweisung vereinigt werden Der Typ entscheidet ber Wertebereich Operationen und Speicherbedarf Der Typ eines Operanden ist in C konstant er ndert sich w hrend der Programmausf hrung nicht Es gibt einfache und zusammengesetzte Typen sowie Pointer Einfache Typen sind Ganzzahlen Gleitkommazahlen und Zeichen Der Aufz hlungstyp ist letzten Endes ganzzahlig Daneben gibt es f r bestimmte F lle den leeren Typ Zusammengesetzte Typen sind Arrays und Strukturen Ein Array ist eine geordnete Menge von Operanden gleichen Typs Eine Struktur ist eine ungeordnete Menge von Operanden beliebigen Typs Der Pointer ist ein Typ dessen Wertebereich Adressen sind Ein Pointer zeigt immer auf einen Typ unter Umst nden auf einen weiteren Pointer Ein Ausdruck best
227. en verbessern Diese Strategie wird als Top down Entwurf bezeichnet Man geht vom Allgemeinen ins Einzelne Real programmers disdain structured programming 16 KAPITEL 1 PROGRAMMIEREN IN C C 1 1 9 3 Zusammensetzen aus Teilaufgaben Der umgekehrte Weg Bottom up Entwurf liegt nicht so nahe Es gibt wiederkehrende Grund Operationen wie Suchen Sortieren Fragen Ausgeben Interpolieren Zeichnen ei nes Kreisbogens Aus diesen l sst sich eine gegebene Aufgabe zu einem gro en Teil zusam mensetzen so dass nur wenige spezielle Teilaufgaben brig bleiben Hat man die Grundope rationen einmal programmiert so vereinfacht sich der Rest erheblich In praxi wendet man eine gemischte Strategie an Man zerlegt die bergeordnete Auf gabe in Teilaufgaben versucht diese in Grundoperationen auszudr cken und kommt dann wieder aufsteigend zu einer genaueren und allgemeiner g ltigen Formulierung Dieser Ab und Aufstieg kann sich mehrmals wiederholen Die Aufgabenstellung ist nicht unver nder lich Genau so geht man bei der Planung von Industrieanlagen vor Man darf nicht den Fehler machen die Aufgabe aus Bequemlichkeit den Eigenheiten eines Computers oder einer Programmiersprache anzupassen Der Benutzer hat Anspruch auf ein gut und verst ndlich funktionierendes Programm Die Zeiten als der Computer als Entschuldigung f r alle m glichen Unzul nglichkeiten herhalten musste sind vorbei 1 1 10 Prototyping In dem h ufig vorkommenden
228. en zu wecken Ein Operand hat einen Namen identifier geh rt einem Typ type an hat einen konstanten oder variablen Wert value belegt zur Laufzeit Speicherplatz im Computer hat einen Geltungsbereich scope und eine Lebensdauer lifetime Auf den Operanden wird ber den Namen oder die Speicheradresse zugegriffen Die Spei cheradresse eines Operanden kann in einem weiteren Operanden abgelegt werden der Zei ger Referenz Adressvariable oder Pointer genannt wird Ich bevorzuge das englische Wort Pointer weil das deutsche Wort Zeiger drei Bedeutungen hat Pointer Index Cursor Au erdem bezeichne ich Pointer nicht als Variable obwohl ihr Wert ver nderlich ist Wer das englische Wort nicht mag sollte von Adressvariablen reden Pointer auf Pointer sind Pointer 2 Ordnung usw Der Geltungsbereich eines Operanden ist ein Block eine Funktion eine Da tei oder das ganze Programm Gleiches gilt f r die Lebensdauer In der Deklaration eines Operanden werden sein Name und seine Eigenschaften vereinbart In der Definition erh lt er einen Wert und ben tigt sp testens dann einen Platz im Arbeitsspeicher Deklaration und Definition k nnen in einer Anweisung zusammengezogen sein Die erstmalige Zuweisung ei nes Wertes an eine Variable hei t Initialisierung Deklaration und Definition werden auch unter dem Begriff Vereinbarung zusammengefasst Auf die Auswahl und Strukturierung der Operanden soll man Sorgfalt verwende
229. enBSD und andere Programmierer nicht das Marketing haben die Ziele gesetzt Die UNIXe haben von Anfang an gemischte Hardware und die Zusammenarbeit mehrerer Benutzer unterst tzt In Verbindung mit dem X Window System einem netzf higen Fenstersystem sind die UNIXe unter den Betriebssys temen mittlerer Gr e die leistungsf higsten Linux UNIX Rechner waren von Anbeginn im Internet dabei und haben seine Entwicklung bestimmt Warum C C Die universelle Programmiersprache C mit ihrer m chtigen Erweiterung C ist im Vergleich zu BASIC etwa ziemlich einheitlich Der Anfang ist leicht an die Grenzen sto en wenige Benutzer Das Zusammenspiel zwischen C C Programmen und Li nux UNIX funktioniert reibungslos Warum das Internet Das Internet ist das gr te Computernetz dieser Erde ein Zu sammenschluss vieler regionaler Netze Urspr nglich auf Hochschulen und Beh rden be schr nkt sind mittlerweile auch Industrie Handel und Privatpersonen beteiligt Unser be rufliches Leben und zunehmend unser privates Dasein werden vom Internet ber hrt Eine Email Anschrift ist so wichtig geworden wie ein Telefonanschluss Als Informationsquelle ist das Netz unentbehrlich Bei der Stoffauswahl habe ich mich von meiner Arbeit als Benutzer Verwalter und Pro grammierer leiten lassen Besonderer Wert wird auf die Erl uterung der zahlreichen Fach begriffe gelegt die dem Anf nger das Leben erschweren Die typische Frage vor der auch ich immer wi
230. enaue Hinweise auf weiterf hrende Dokumente im Netz Der Le ser sei sich aber bewu t dass sich sowohl Inhalte wie Adressen URLs ndern Bei Verweisen auf Webseiten URLs ist die Angabe des Protokolls http weggelassen Unter Benutzer Programmierer Verwalter usw werden sowohl m nnliche wie weibliche Erscheinungsformen verstanden Ich rede den Leser mit Sie an obwohl unter Studenten und im Netz das Du blich ist Gegenw rtig erscheint mir diese Wahl passender Brevity is the soul of wit Shakespeare Hamlet 1 Programmieren in C C 1 1 Grundbegriffe 1 1 1 Wozu Programmierkenntnisse Auch wer seine Br tchen nicht mit Programmieren verdient sondern nur mit Computern arbeitet braucht Grundkenntnisse im Programmieren um die richtigen Vorstellungen von dem Geschehen hinter dem Bildschirm zu haben Nicht jeder Maschinenbauer muss einen Kolbenmotor konstruieren k nnen aber er muss wissen wie eine Kolbenmaschine aufgebaut ist und funktioniert und er sollte mit einem Schraubenschl ssel umgehen k nnen Hinzu kommt dass h ufig kleinere Anpassungen oder Erg nzungen der Software erforderlich sind f r die man nicht immer einen Spezialisten hat Wenn es ernst wird bezieht man seine Kenntnisse aus drei Quellen n mlich aus einem Lehrbuch wie diesem einer Referenz zum Nachschlagen siehe das Verzeichnis am Ende des Buches einer Sammlung von Frequently Asked Questions aus dem Internet hier zu den Themen C
231. enauigkeit Dieses Konzept gibt dem Benutzer ein m chtiges und einfach zu handhabendes Werkzeug zur Fehleranalyse in die Hand Weiterhin ist es m glich Pro gramme zu schreiben die numerische Ergebnisse mit einer vom Benutzer vorgegebenen Ge nauigkeit liefern indem man intern die Rechengenauigkeit zur Laufzeit in Abh ngigkeit von den Fehlerschranken der Zwischenergebnisse anpa t Alle vordefinierten Operatoren f r die Typen real und interval sind auch f r die Ty pen 1 real und 1 interval verf gbar Zus tzlich sind auch alle m glichen Kombinationen von Operatoren f r Typen einfacher und mehrfacher Genauigkeit vorhanden Im folgenden wird ein Programm mit einfacher Genauigkeit und sie entsprechende Version mit mehrfacher Genauigkeit gezeigt main interval a b Za Standard Intervall a Ra x a 1 0 1 0 7 br 3 0 b 3 0 3 0 cout lt lt a b lt lt a b a b 0 333333333333 0 333333333334 x Quelle 1 66 C XSC Programm einfacher Genauigkeit main l interval a b Langzahl Intervall a 1 0 b 3 0 stagprec 2 Globale int Variable x cout lt lt a b lt lt a b a b 0 333333333333333333333333 0 333333333333333333333334 122 KAPITEL 1 PROGRAMMIEREN IN C C Quelle 1 67 C XSC Programm mehrfacher Genauigkeit Zur Laufzeit bestimmt die vordefinierte globale int Variable stagprec staggered preci sion die Rechengenauigkeit der Langzahl Arithmetik in Sch
232. enpaare Backslash Zeilenwechsel verbindet Fortsetzungszeilen der Zeilenwechsel muss unmittelbar auf den Backslash folgen 1 9 1 define Anweisungen Die define Anweisung dient zwei Zwecken Sie definiert symbolische Konstanten sowie Makros Eine symbolische Konstante ist ein konstanter Operand auch ein String der mit der define Anweisung Namen und Wert erh lt und im weiteren Programm nur noch mit seinem Namen aufgerufen wird define MWST 1 15 brutto netto MWST Damit erleichtert man nderungen die sich so auf eine Stelle beschr nken und vermeidet das Auftauchen r tselhafter Zahlen magic numbers mitten im Programm Bei Strings sind die G nsef chen mit in die Definition zu nehmen und beim Aufruf nicht zu wiederholen Ein Makro ist eine nicht zu lange Folge von Ausdr cken und Anweisungen alternativ zu einer kurzen Funktion Das Makro wird zu in line Code und damit etwas schneller als die Funktion die Parameter bergabe entf llt Andererseits wird der ausf hrbare Code etwas l nger Ein Beispiel 130 KAPITEL 1 PROGRAMMIEREN IN C C define NEWFILE fprintf stderr Datei n if gets name NULL done if argc lt 2 NEWFILE Der Pr prozessor ersetzt jedes NEWFILE im Programm buchst blich durch die definierte Folge Das spart Tipperei und verbessert die bersichtlichkeit Zeichenfolgen in Stringkon stanten in G nsef chen werden nicht ersetzt das Progr mmchen
233. ensed as a whole at no charge to all third parties under the terms of this License c If the modified program normally reads commands interactively when run you must cause it when started running for such interactive use in the most ordinary way to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty or else saying that you provide a warranty and that users may redistribute the program under these conditions and telling the user how to view a copy of this License Exception if the Program itself is interactive but does not normally print such an announcement your work based on the Program is not required to print an announcement These requirements apply to the modified work as a whole If identifiable sections of that work are not derived from the Program and can be reasonably considered independent and separate works in themselves then this License and its terms do not apply to those sections when you distribute them as separate works But when you distribute the same sections as part of a whole which is a work based on the Program the distribution of the whole must be on the terms of this License whose permissions for other licensees extend to the entire whole and thus to each and every part regardless of who wrote it Thus it is not the intent of this section to claim rights or contest your rights to work written entirely by you rather the intent is to exer
234. enverarbeitung sie sollen wie FRITZ REUTERS Urgeschicht von Meckelnborg ok f r Schaulkinner tau bruken sin F r die wissenschaftliche Welt zitiere ich aus dem Vorwort zu einem Buch des Mathematikers RICHARD COURANT Das Buch wendet sich an einen weiten Kreis an Sch ler und Lehrer an Anf nger und Gelehrte an Philosophen und Ingenieure Das Lernziel ist eine Vertrautheit mit Betriebssystemen der Gattung UNIX einschlie lich Linux der Programmiersprache C C und dem weltumspannenden Internet die so weit reicht dass der Leser mit der Praxis beginnen und sich selbst ndig weiterbilden kann Ausgelernt hat man nie Zusammen bildeten die Skripten die Grundlage f r das Buch UNIX C und Internet im Jahr 1999 in zweiter Auflage im Springer Verlag erschienen ISBN 3 540 65429 1 Das Buch ist vergriffen und wird auch nicht weiter gepflegt da ich mich auf Debian GNU Linux kon zentriere Meine Debian B cher ISBN 3 540 43267 1 und 3 540 23786 0 sind ebenfalls bei Springer erschienen aber nicht im Netz ver ffentlicht Die Skripten dagegen bleiben weiter hin im Netz verf gbar und werden bei Gelegenheit immer wieder berarbeitet Warum ein Linux UNIX Die Betriebssysteme der Gattung UNIX laufen auf einer Viel zahl von Computertypen Unter den verbreiteten Betriebssystemen sind sie die ltesten und ausgereift Die UNIXe haben sich lange ohne kommerzielle Einfl sse entwickelt und tun das teilweise heute noch siehe Linux FreeBSD NetBSD Op
235. er nothing else grants you permission to modify or distribute the Program or its derivative works These actions are prohibited by law if you do not accept this License Therefo re by modifying or distributing the Program or any work based on the Program you indicate your acceptance of this License to do so and all its terms and conditions for copying distributing or modifying the Program or works based on it Each time you redistribute the Program or any work based on the Program the re cipient automatically receives a license from the original licensor to copy distribute or modify the Program subject to these terms and conditions You may not impose any further restrictions on the recipients exercise of the rights granted herein You are not responsible for enforcing compliance by third parties to this License If as a consequence of a court judgment or allegation of patent infringement or for any other reason not limited to patent issues conditions are imposed on you whether by court order agreement or otherwise that contradict the conditions of this License they do not excuse you from the conditions of this License If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations then as a consequence you may not distribute the Program at all For ex ample if a patent license would not permit royalty free redistribution of the Program by all those who
236. er Methoden auszuf hren vergleichbar einem Funktionsaufruf in C Beispielsweise k nnen wir eine Klasse Komplexe Zahl definieren die als Daten zwei re elle Zahlenwerte Realteil und Imaginrrteil sowie als Methoden die Grundrechenarten f r komplexe Zahlen enth lt Klasse KOMPLEX Daten double realteil imaginaerteil Methoden KOMPLEX Addiere a KOMPLEX b KOMPLEX KOMPLEX Subtrahiere a KOMPLEX b KOMPLEX KOMPLEX Multipliziere a KOMPLEX b KOMPLEX KOMPLEX Dividiere a KOMPLEX b KOMPLEX Mitglieder Daten Methoden sind ffentlich public oder privat Public Members sind vom brigen Programm her zug nglich sie bilden die Schnittstelle der Klasse und ihrer Objek te zur Umwelt Private Members sind nur den Methoden der Klasse zug nglich Public und private werden als Member Access Specifier bezeichnet Meist sind die Daten pri vat die Methoden teils privat teils ffentlich Mindestens eine Methode mu ffentlich sein warum Eine besondere Methode mit demselben Namen wie die Klasse ist der Con structor der zur Initialisierung dient Diese Methode wird automatisch aufgerufen wenn ein Objekt der Klasse erzeugt wird Ein Constructor kann public protected oder private sein er hat niemals einen R ckgabewert eines bestimmten Typs auch nicht des Typs void Nun ein funktionsf higes wenn auch simples Beispiel Es rechnet die Zeiten von UTC nach M
237. er i with grave Latin small letter i with acute Latin small letter i with circumflex Latin small letter i with diaresis Latin small letter eth Icelandic Latin small letter n with tilde Latin small letter o with grave Latin small letter o with acute Latin small letter o with circumflex Latin small letter o with tilde Latin small letter o with diaresis Division sign Latin small letter o with stroke Latin small letter u with grave Latin small letter u with acute Latin small letter u with circumflex Latin small letter u with diaresis Latin small letter y with acute Latin small letter thorn Icelandic Latin small letter y with diaresis C UNIX Systemaufrufe Systemaufrufe werden vom Anwendungsprogramm wie eigene oder fremde Funktionen an gesehen Ihrem Ursprung nach sind es auch C Funktionen Sie sind jedoch nicht Bestandteil einer Funktionsbibliothek sondern geh ren zum Betriebssystem und sind nicht durch ande re Funktionen erweiterbar Die Systemaufrufe als Bestandteil des Betriebssystems sind f r alle Programmier sprachen dieselben w hrend die Funktionsbibliotheken zur jeweiligen Programmiersprache geh ren Folgende Systemaufrufe sind unter UNIX verf gbar access pr ft Zugriff auf File acct startet und stoppt Prozess Accounting alarm setzt Weckeruhr f r Prozess atexit Funktion f r Programmende brk ndert Speicherzuweisung chdir wechselt Arbeitsverzeichnis chmod ndert Zugriffsrechte eines Files chown
238. er umzustellen Einmal kann man so unmittelbar auf die Hardware zugreifen beispielsweise in Anwendungen zum Messen und Regeln zum anderen zur Beschleunigung oft wiederholter Funktionen fakul c Berechnung von Fakultaeten x Die Grenze fuer END liegt in der Segmentgroesse bis 260 werden alle Werte in einem Array gespeichert darueber wird Wert fuer Wert berechnet und ausgegeben Ziffern in Neunergruppen nutzt long aus define END 260 define MAX 1023 define DEF 16 define GRP 58 define GMX 245 GRP muss in aadd asm eingetragen werden GMX muss in laadd asm eingetragen werden include lt stdio h gt 98 unsigned long f END 1 GRP void add unsigned long void exit int long time long unsigned long KAPITEL 1 PROGRAMMIEREN IN C C global Assemblerfunktionen zur Beschleunigung amp extern void aadd unsigned long extern void lshift unsigned long x Hauptprogramm x int main int argc char xargv unsigned long int e i j k r S flag ende max DEF unsigned long x GRP unsigned long long zI z2 23 Auswertung der Kommandozeile if argc gt 1 sscanf x argv 1 Sd amp max max max 0 max max if max gt MAX printf nZahl zu gross Maximal d n MAX exit 1 ende max gt END END max time amp z1 x Z
239. erbessert 78 C Programm return Anweisungen 80 C Programm Funktionsprototyp e 81 C Funktion Parameter bergabe by value 83 C Funktion Parameter bergabe by reference 83 FORTRAN Funktion Parameter bergabe by reference 83 PASCAL Funktion Parameter bergabe by value 84 PASCAL Funktion Parameter bergabe by reference 84 C Programm Parameter bergabe an C Funktionen 85 C Programm Parameter bergabe an FORTRAN Funktion 85 C Programm Parameter bergabe an PASCAL Funktionen 85 FORTRAN Programm Parameter bergabe an C Funktionen 86 FORTRAN Programm Parameter bergabe an FORTRAN Fkt 87 FORTRAN Programm Parameter bergabe an PASCAL Fkt 87 PASCAL Programm Parameter bergabe an C Funktionen 88 PASCAL Programm Parameter bergabe an FORTRAN Funktion 88 PASCAL Programm Parameter bergabe an PASCAL Funktionen 89 PASCAL Funktion Parameter bergabe by value 89 PASCAL Funktion Parameter bergabe by reference 90 Shellscript Parameter bergabe nn 90 xii Programme und andere Quellen xiii 1 51 C Programm Parameter bernahme von Shellscript 90 1 52 C Programm Kommandozeilenargumente 91 1 53 C Funktion Wechselnde Anzahl von Argumenten 94
240. ere are none The Cover Texts are certain short passages of text that are listed as Front Cover Texts or Back Cover Texts in the notice that says that the Document is released under this license A Front Cover Text may be at most 5 words and a Back Cover Text may be at most 25 words A Transparent copy of the Document means a machine readable copy represented in a format whose specification is available to the general public that is suitable for revising the Document straightforwardly with generic text editors or for images composed of pixels generic paint programs or for drawings some widely available drawing editor and that is suitable for input to text formatters or for automatic translation to a variety of formats suita ble for input to text formatters A copy made in an otherwise Transparent file format whose 220 ANHANG F GNU LIZENZEN markup or absence of markup has been arranged to thwart or discourage subsequent modi fication by readers is not Transparent An image format is not Transparent if used for any substantial amount of text A copy that is not Transparent is called Opaque Examples of suitable formats for Transparent copies include plain ASCII without mar kup Texinfo input format LaTeX input format SGML or XML using a publicly available DTD and standard conforming simple HTML PostScript or PDF designed for human modi fication Examples of transparent image formats include PNG XCF and JPG Opaque formats include p
241. ergleichen oft auf einer Seite Ausdr cke wie Konstan ten vorkommen die nicht auf der linken Seite einer Zuweisung stehen k nnen r values empfiehlt es sich diese auf die linke Seite des Vergleichs zu stellen if 0 x Bei dem falschen Operator protestiert dann der Compiler oder Syntaxpr fer Einfach eine kleine Angewohnheit die die Arbeit erleichtert Pfiffig ist die Bedingte Bewertung conditional operator auch Bedingter Ausdruck genannt Der Ausdruck z a lt 0 a a hat dieselbe Wirkung wie if a lt 0 z a else Z a Er weist der Variablen z den Betrag von a zu Rechts des Gleichheitszeichens stehen drei Ausdr cke die auch zusammengesetzt sein d rfen Die ganze Bedingte Bewertung ist selbst wieder ein Ausdruck wie eine Zuweisung und kann berall stehen wo ein Wert verlangt wird Die Bedingte Bewertung ist einer der seltenen tern ren oder triadischen Operatoren drei Operanden und f hrt zu schnellerem Code als if else Welchen Wert nimmt z in folgendem Beispiel an z a gt b a b Eine Anwendung finden Sie im Abschnitt 1 4 7 Rekursiver Aufruf einer Funktion auf Seite 96 68 KAPITEL 1 PROGRAMMIEREN IN C C 1 3 7 6 Bitoperationen Die Bit Operationen sind shift links lt lt shift rechts gt gt Bei vorzeichenlosen Ganzzahlen ist ein Shiften nach links gleichbedeutend mit einer Multi plikation mit 2 ein Shiften nach rechts mit einer Division durch 2 Auf die links oder recht
242. erhalb eines C Programms k nnen den Ablauf beschleunigen Einfacher wird das Programm dadurch nicht 1 4 10 bung Funktionen Jetzt verf gen Sie ber die Kenntnisse die zum Schreiben einfacher C Programme notwen dig sind Schreiben das Programm zur Weganalyse aufbauend auf der Aufgabenanalyse und der Datenstruktur die Sie bereits erarbeitet haben Falls Sie sich an den Vokabeltrainer wa gen wollen reduzieren Sie die Aufgabe zun chst auf ein Minimum sonst werden Sie nicht fertig damit 1 5 Funktions Bibliotheken 1 5 1 Zweck und Aufbau Eine Funktion kann auf drei Wegen mit einem C Hauptprogramm main verbunden wer den Die Funktion steht in derselben Datei wie main und wird daher gemeinsam kom piliert Sie muss wie main in C geschrieben sein mehrsprachige Compiler gibt es nicht 1 5 FUNKTIONS BIBLIOTHEKEN 103 Die Funktion steht unter Umst nden mit weiteren Funktionen in einer eigenen Da tei das getrennt kompiliert und beim Linken zu main gebunden wird Dabei werden alle Funktionen dieser Datei zu main gebunden ob sie gebraucht werden oder nicht Wegen der getrennten Compilierung darf die Datei in einer anderen Programmierspra che geschrieben mu aber f r dieselbe Maschine kompiliert sein Die getrennt kompilierte Funktion steht zusammen mit weiteren in einer Bibliothek und wird beim Linken zu main gebunden Dabei w hlt der Linker nur die Funk tionen aus der Bibliothek aus die in main
243. erneuten Aufruf des Blockes hat ein static Operand den Wert den er beim vorherigen Verlassen des Blockes hatte 1 8 6 10 Geltungsbereich Eine Variable gilt nur innerhalb des Bereiches Programmabschnittes zu dessen Beginn sie deklariert worden ist Ihr Sichtbarkeits oder Geltungsbereich scope ist dieser Be reich Au erhalb des zugeh rigen Bereiches ist die Variable unbekannt nicht existent oder unsichtbar existent aber nicht zug nglich Der Name der Variablen ist in diesem Zusam menhang bedeutungslos Ein Bereich ist ein Programm eine Funktion ein logischer Block zwischen und eine Datei Variable die vor allen Funktionen in der Regel vor main deklariert werden gelten infolgedessen global in allen Funktionen die in derselben Datei deklariert werden das hei t im ganzen Programm wenn dieses nur aus einer Datei besteht Variable die zu Beginn einer Funktion vor allen Anweisungen in der Funktion deklariert werden gelten innerhalb dieser Funktion aber nicht au erhalb Sie sind lokal g ltig Variable die zu Beginn eines Blockes vor allen Anweisungen im Block deklariert werden gelten nur in diesem Block Das kommt selten vor ist aber v llig in Ordnung Erstreckt sich ein Programm ber mehrere Dateien so gelten zu Beginn einer Datei vor den darin enthaltenen Funktionen deklarierte Operanden global f r die Funktionen in der Datei aber nicht f r das gesamte Programm So
244. ert verhalten Hier ein Makefile mit RCS Kommandos f r das nachstehende Sortierprogramm 4 makefile zu mysort c im RCS System f SHeader home debian prog quellen sortmakef tex v 1 1 1 1 2005 02 06 19 44 00 wu CC bin cc 30 KAPITEL 1 PROGRAMMIEREN IN C C CFLAGS Aa DDEBUG all mysort clean mysort mysort o bubble o CC S CFLAGS o mysort mysort o bubble o mysort o mysort c myheader h CC S CFLAGS c mysort c bubble o bubble c myheader h S CC CFLAGS c bubble c mysort c mysort c v co mysort c bubble c bubble c v co bubble c myheader h myheader h v co myheader h clean bin rm f c x o h makefile Quelle 1 12 Makefile zum Sortierprogramm mysort c Da dieses Beispiel sich voraussichtlich zu einer kleinen Familie von Quelltexten ausweiten wird legen wir eine privates include Datei mit unseren eigenen f r alle Teile g ltigen Wer ten an x myheader h zum Sortierprogramm RCS Beispiel W Alex Universitaet Karlsruhe 04 Juli 1995 Header home debian prog quellen sortinclude v 1 1 1 1 2005 02 06 19 44 int bubble char xtext int insert char xtext define USAGE Aufruf mysort filename define NOTEXIST File existiert nicht ddefine NOTREAD File ist nicht lesbar define NOTSORT Problem beim Sortieren define LINSIZ 64 Zeilenlaenge x define MAXLIN 256 Anzahl Zeilen Quelle 1 13 Inclu
245. estriebssystem gegeben sein und l sst sich daher nicht allgemein ange ben Ab 255 Zeichen wird es kritisch Signifikant sind mindestens die ersten sieben Zeichen nach ANSI die ersten einunddrei ig Verwendet man Funktionen fremder Herkunft sollte man mit nur sechs signifikanten Zeichen rechnen sowie damit dass Gro und Kleinbuchsta ben nicht unterschieden werden 1 3 5 Schl sselw rter In C C wie in jeder anderen Programmiersprache haben bestimmte W rter eine besondere Bedeutung beispielsweise main while und if Diese Wortsymbole oder Schl sselw r 21Real programmers don t comment their code 1 3 BAUSTEINE EINES QUELLTEXTES 49 ter d rfen auf keinen Fall als Namen verwendet werden die Namen der Standardfunktio nen wie printf oder fopen sollen nicht umfunktioniert werden C zeichnet sich durch eine geringe Anzahl von Schl sselw rtern aus etwa drei ig siehe Anhang D 1 C Lexikon Schl sselw rter auf Seite 198 Mit C kommen nochmal drei ig dazu Unterboten wird C C darin nur von SMALLTALK mit f nf Schl sselw rtern 1 3 6 Operanden Wir schr nken hier den Begriff Daten etwas ein und verstehen darunter nur die passiven Objekte mit denen ein Programm etwas tut also Text Zahlen Grafiken usw Diese Objekte und ihre Untereinheiten nennen wir Operanden operand Mit ihnen werden Operationen durchgef hrt Das Wort Objekt vermeide ich hier um keine Assoziationen an objektorien tiertes Programmier
246. et the Document within the aggregate or the electronic equivalent of covers if the Document is in electronic form Otherwise they must appear on printed covers that bracket the whole aggregate 8 TRANSLATION Translation is considered a kind of modification so you may distribute translations of the Document under the terms of section 4 Replacing Invariant Sections with translations requires special permission from their copyright holders but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections You may include a translation of this license and all the license notices in the Document and any Warranty Disclaimers provided that you also include the original English version of this license and the original versions of those notices and disclaimers In case of a disagreement between the translation and the original version of this license or a notice or disclaimer the original version will prevail If a section in the Document is entitled Acknowledgements Dedications or History the requirement section 4 to Preserve its title section 1 will typically require changing the actual title 9 TERMINATION You may not copy modify sublicense or distribute the Document except as expressly pro vided for under this license Any other attempt to copy modify sublicense or distribute the Document is void and will automatically terminate your rights under this license Howe
247. etzen von Punkten Ziehen von Linien zur Umwandlung von Koor dinaten und hnliche Dinge Leider nicht standardisiert sonst g be es nicht Starbase GKS OpenGL PHIGS Uniras 1 5 2 5 Weitere Teile der Standardbibliothek Die nicht zur Standard C Bibliothek geh renden curses 3 Funktionen aus usr lib libcurses a erm glichen die weitergehende Gestaltung eines alphanume rischen Bildschirms In diesem Fall ist die curses 3 Bibliothek beim Compileraufruf zu nennen CC lcurses Vergi t man die Nennung wei der Compiler mit den Namen der curses 3 Funktionen nichts anzufangen und meldet sich mit der Fehleranzeige unsatisfied symbols 1 5 FUNKTIONS BIBLIOTHEKEN 107 Bei Verwendung von curses 3 Funktionen ist die Include Datei curses hin das Pro gramm aufzunehmen das stdio h einschlie t 1 5 3 Xlib Xt und Xm X Window System Programme die von dem X Window System Gebrauch machen wollen greifen auf unterster Ebene auf Funktionen der Xlib Bibliothek zur ck Die Xlib stellt f r jede M glichkeit des X Protokolls eine C Funktion bereit sie ist die Schnittstelle zwischen C Programmen und dem X Protokoll Auf n chsth herer Ebene werden Funktionen einer Toolbox wie der Xt Bibliothek de finiert die ihrerseits auf der Xlib aufsetzt Die Xt Funktionen werden auch als Intrinsics bezeichnet Sie kennen z B Widgets das sind Window Gadgets oder Objekte im Sinne von C des Client Programms Zu einem Widget geh
248. f Bedingung then else Anweisung 1 Anweisung 2 Anweisung 4 Anweisung 3 Abb 1 2 Nassi Shneiderman Diagramm einer if else Verzweigung 17 18 KAPITEL 1 PROGRAMMIEREN IN C C Nassi Shneiderman Diagramme oder Struktogramme nach ISAAC NASSI und BEN SHNEIDERMAN sind ein weiterer Versuch den Programmablauf grafisch darzustellen Sie sind n her an eine Programmiersprache angelehnt so dass es leicht f llt nach dem Dia gramm eine Quelle zu schreiben Das l sst sich teilweise sogar mit CASE Werkzeugen in beide Richtungen automatisieren 1 1 12 Memo Grundbegriffe Maschinen verstehen nur Maschinensprache die hardwareabh ngig und f r Menschen unverst ndlich ist Programmierer verwenden h here an die Aufgaben angepasste Programmiersprachen die f r Maschinen unverst ndlich sind Was sie schreiben wird Quelle source genannt bersetzer Compiler Interpreter bersetzen Quelltexte h herer Programmierspra chen in Maschinensprache Der umgekehrte Weg ist praktisch nicht gangbar Deklarative Sprachen beschreiben die Aufgabe prozedurale den L sungsweg Innerhalb der prozeduralen Sprachen geh ren BASIC FORTRAN PASCAI COBOL und C zum imperativen Zweig JAVA SMALLTALK und C zum objektorientierten Die Objektorientierung ist ein Versuch mit der wachsenden Komplexit t der Program me fertig zu werden Die Herstellung eines Programms beginnt mit einer gr ndlichen Analyse der Aufga b
249. g 2 73 1 3 8 2 Zuweisung als Anweisung 73 1 3 8 3 Kontrolanweisungen 2 73 13 84 78 1 3 9 Memo Bausteine soor os os ROS ne an 80 1 3 10 bung Bausteine us S pr era ab Ende 81 l4 Funktionen X e ebat eos een 81 14 1 81 14 2 82 14 3 82 14 4 Kommandozeilenargumente main 90 14 5 Funktionen mit wechselnder Argumentanzahl 92 14 6 Iterativer Aufruf einer Funktion 94 14 7 Rekursiver Aufruf einer Funktion 96 1 4 8 Assemblerroutinen 9 7 14 9 102 1 4 10 bung Funktionen uon aid 102 15 Funktions Bibliotheken eA 102 15 1 Zweck und Aufbau 102 15 2 Standardbibliothek nern 103 15 215 Uhersiche EE EE 103 1 5 2 2 Standard C Bibliothek 000 103 1 5 2 3 Standard Mathematik Bibliothek 105 1 5 2 4 Standard Grafik Bibliothek 106 1 5 2 5 Weitere Teile der Standardbibl
250. g dekla riert worden ist bleibt dies w hrend des ganzen Programmes Einige Programmiersprachen erlauben auch variable Typen die erst zur Laufzeit bestimmt werden oder sich w hrend die ser ndern Typfreie Sprachen kennen nur das Byte oder das Maschinenwort als Datentyp Die Typisierung erleichtert die Arbeit und erh ht die Sicherheit sowie die Rechengeschwin digkeit Stellen Sie sich vor Sie m ssten bei Gleitkommazahlen Exponent und Mantisse je desmal selbst aus den Bytes herausdr seln Oder der Computer m sste jedesmal aus dem Zusammenhang einer Operation ermitteln um was f r einen Typ von Operanden es sich handelt Es gibt aber auch Aufgaben bei denen der Verzicht auf eine Typisierung Vorteile bringt Oft ist das bei Aufgaben der Fall die mittels Skriptsprachen bearbeitet werden Die Typdeklarationen in C C k nnen ziemlich schwierig zu verstehen sein vor allem bei mangelnder bung Im Netz findet sich ein Programm cdec1 das Typdeklarationen in einfaches Englisch bersetzt F ttert man dem Programm folgende Deklaration char xx 3 O0 5 so erh lt man zur Antwort declare x as array 3 of pointer to function returning pointer to array 5 of char So schnell wie cdec1 h tte ich die Antwort nicht gefunden 1 3 6 3 Einfache Typen In jeder Programmiersprache gibt es Grundtypen aus denen alle h heren Typen zusammen gesetzt werden In C C sind dies ganze Zahlen Gleitkommazahlen und Zeichen Real progra
251. gebraucht werden Man kann also viele Funktionen in einer Bibliothek zusammenfassen ohne bef rchten zu m ssen seine Programme mit Ballast zu befrachten Die Bibliothek kann auf Quellfiles unterschied licher Programmiersprachen zur ckgehen Sie m ssen nur f r dasselbe System kom piliert worden sein es macht keinen Sinn und ist auch nicht m glich Funktionen f r UNIX und PC DOS in einer Bibliothek zu vereinigen Das Erzeugen einer Bibliothek auf UNIX Systemen wurde bereits im Abschnitt 1 2 6 Bi bliotheken Archive auf Seite 25 im Rahmen der Programmer s Workbench erl utert Im fol genden geht es um die Verwendung von Bibliotheken 1 5 2 Standardbibliothek 1 5 2 1 bersicht Standardfunktionen sind die Funktionen die als Standardbibliothek zusammen mit dem Compiler geliefert werden Sie sind im strengen Sinn nicht Bestandteil der Program miersprache das bedeutet da sie ersetzbar sind aber der ANSI Standard f hrt eine minimale Standardbibliothek auf Ohne sie k nnte man kaum ein Programm in C schreiben Der Reichtum der Standardbibliothek ist eine St rke von C in ihr steckt viel Arbeit die an dere Programmierer vor und f r uns erledigt haben Die Systemaufrufe Sektion 2 geh ren dagegen nicht zur Standardbibliothek Sektion 3 sondern zum Betriebssystem Und Shell Kommandos sind eine Sache der Shell Sektion 1 Diese Unterscheidung spielt eine Rolle wenn Programme portiert werden Soweit m glich sind Standardfun
252. ger begin writeln Funktion mit P uebernahme by reference writeln P Fkt hat uebernommen x y ZRH A writeln P Fkt gibt folgenden Wert zurueck zi Aenderung der Summanden x 66 y 88 psr z end end Quelle 1 38 PASCAL Funktion die Parameter by reference bernimmt Die Funktionen werden f r sich mit der Option c ihres jeweiligen Compilers kompiliert wodurch Objektfiles mit der Kennung o entstehen die beim Kompilieren der Hauptpro gramme aufgef hrt werden Nun zu den Hauptprogrammen zuerst wieder in C C Programm csummec das C Funktionen aufruft x Compileraufruf cc o csummec csummec c csr o csv o include lt stdio h gt extern int csv int x int y csr int px int xpy int main Tnt az es puts Bitte die beiden Summanden eingeben scanf sd d amp a amp b printf Die Summanden sind d d n a b printf Die Summe direkt ist dWMn a b printf Die Summe ist d n csv a b 1 4 FUNKTIONEN 85 printf Die Summanden sind d dNn a b printf Die Summe ist d n csr amp a amp b printf Die Summanden sind d d n a b return 0 Quelle 1 39 C Programm das Parameter by value und by reference an C Funktionen ber gibt Nun das C Hauptprogramm das eine FORTRAN Funktion aufruft ein in der Numerik h ufiger Fall C Programm csummef das eine FORTRAN Funktion aufruft Compilerauf
253. ger Arbeit aufzuwenden braucht Unter Containern auch Collection genannt werden Datenstrukturen Klassen verstan den die andere Datenstrukturen oder Objekte enthalten Damit l sst sich eine Gruppe von Objekten unter einem Namen gemeinsam handhaben Sequentielle Container speichern ihre Objekte in einer Reihe linear auf sie kann entweder der Reihe nach oder wahlfrei zu gegriffen werden Daneben gibt es die assoziativen Container deren Objekte ber einen 118 KAPITEL 1 PROGRAMMIEREN IN C C Schl ssel oder Index zug nglich sind Der einfachste sequentielle Container ist der Vektor ein Array variabler Gr e Der einfachste assoziative Container ist die Menge Set in der jeder Schl ssel nur einmal vorkommen darf Zu jeder Art von Containern geh rt ein Satz von Methoden Auch hier braucht sich der Programmierer nicht um die Einzelheiten der Speiche rung und der Zugriffe zu k mmern das hat die Bibliothek bereits erledigt Ein Adaptor schlie lich macht das was auch andere Adapter machen er pa t das Aus sehen einer Schnittstelle an neue Erfordernisse an er verpackt einen Iterator oder einen Container in eine neue Umh llung Damit wird nicht ein neues Objekt geschaffen sondern nur seine Au enseite ver ndert Das ist oftmals effektiver als ein neues Objekt zu schreiben Um die STL ganz zu verstehen mu man sie benutzen Da sie auf einer hohen Abstrak tionsebene zu Hause ist machen sich ihre Vorteile erst bei umfangreicheren
254. germa en bequem Sie wurde als formula translator abgek rzt FORTRAN bezeichnet FORTRAN wurde im Laufe der Jahrzehnte weiter entwickelt zur Zeit ist FORTRAN 90 bzw 95 aktuell und ist auch heute noch die in der Technik am weitesten verbreitete Programmiersprache Kein Ingenieur kommt an FORTRAN vorbei Ein Beispiel findet sich in Abschnitt 1 4 3 Parameter bergabe auf Seite 82 3Recht betrachtet will man auch keine Gleichungen sondern Aufgaben wie die Dimensio nierung eines Maschinenteils oder das Zusammenstellen eines Sachregisters l sen 8 KAPITEL 1 PROGRAMMIEREN IN C C Die Kaufleute hatten mit Mathematik weniger am Hut daf r aber gro e Datenmengen Sie erfanden Ende der f nfziger Jahre ihre eigene Programmiersprache COBOL das hei t Common Business Oriented Language Dass Leutnant GRACE M HOPPER eine Frau zuletzt im Admiralsrang sowohl den ersten Bug erlegt wie auch COBOL erfunden habe ist eine Le gende um ein K rnchen Wahrheit herum COBOL ist ebenfalls unverw stlich und gilt heute noch als die am weitesten verbreitete Programmiersprache Kein Wirtschaftswissenschaftler kommt an COBOL vorbei Ein COBOL Programm liest sich wie gebrochenes Englisch 000100 IDENTIFICATION DIVISION 000200 PROGRAM ID HELLOWORLD 000300 DATE WRITTEN 02 05 96 21 04 000400x AUTHOR BRIAN COLLINS 000500 ENVIRONMENT DIVISION
255. gerufen wird 1 14 Exkurs ber Algorithmen Der Begriff Algorithmus benannt nach einem usbekischen Mathematiker des 9 Jahrhun derts kommt im vorliegenden Text selten vor taucht aber in fast allen Programmierb chern auf Ein betr chtlicher Teil der Informatik befa t sich damit Locker ausgedr ckt ist ein Al gorithmus eine Vorschrift die mit endlich vielen Schritten zur L sung eines gegebenen Pro blems f hrt Ein Programm ist die Umsetzung eines Algorithmus in eine Programmierspra che Algorithmen werden mit Worten Formeln oder Grafiken dargestellt Ein Existenzbeweis ist in der Mathematik schon ein Erfolg in der Technik brauchen wir einen L sungsweg einen Algorithmus Das klingt allt glich Das Rezept zum Backen einer Prinzregententorte oder die Be schreibung des Aufstiegs auf die Hochwilde in den tztaler Alpen sind demnach Algorith men Einige Anforderungen an Algorithmen sind Korrektheit Das klingt selbstverst ndlich ist aber meist schwierig zu beweisen Und Korrektheit in einem Einzelfall besagt gar nichts Umgekehrt beweist bereits ein Fehler die Inkorrektheit Eindeutigkeit Das stellt Anforderungen an die Darstellungsweise die Sprache den ken Sie an eine technische Zeichnung oder an Klaviernoten Verschiedene Ausf hrungs wege sind zul ssig bei gleichen Eingaben mu das gleiche Ergebnis herauskommen 39Dr Oetker Backen macht Freude Ceres Verlag Bielefeld Die Ausf hrung dieses Algo
256. gin Executor 1 Globales Filesystem 1 Altair Stern Alpha Aquilae 1 Gebirge in Zentralasien 0 fr her Personal Computer 2 Halbbitter Was zum Essen Schokolade 1 Strom und bitsparender Prozessor 0 Was zum Trinken 0 Eure Priorit t Anrede des Priors in einem Kloster 0 Anrede des Ersten Sekret rs im Vatikan 0 Anrede des System Managers 6 Z hlen Sie Ihre Punkte zusammen Die Auswertung ergibt Folgendes ber 170 Punkte berlassen Sie das Rechnen k nftig dem Computer 85 bis 170 Punkte Mit etwas Flei wird aus Ihnen ein EDV Experte 18 bis 84 Punkte Machen Sie eine m glichst steile Karriere au erhalb der EDV und suchen Sie sich f hige Mitarbeiter unter 18 Punkten Vielleicht hatten Sie schlechte Lehrer F GNU Lizenzen F 1 GNU General Public License Kopiert von http www gnu org copyleft Version 2 June 1991 Copyright O 1989 1991 Free Software Foundation Inc 59 Temple Place Suite 330 Boston MA 02111 1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document but changing it is not allowed PREAMBLE The licenses for most software are designed to take away your freedom to share and change it By contrast the GNU General Public License is intended to guarantee your freedom to share and change free software to make sure the software is free for all its users This General Public License applies to most of the Free Software Foundation s
257. gleichen Sie die beiden sinnvollen S tze Kaffee ist ein Getr nk Kaffee ist ein Substantiv Im ersten Satz ist die Fl ssigkeit gemeint im zweiten das Wort was gelegentlich durch Kur sivschreibung oder G nsef chen angedeutet wird Der erste Satz ist einfaches Deutsch der zweite geh rt einer Metasprache an in der Aussagen ber die deutsche Sprache vorgenom men werden verwirrenderweise mit denselben W rtern und derselben Grammatik Genauso kann x eine Variable oder ein Pointer auf ein Variable sein oder ein Pointer auf einen Pointer auf eine Variable Erst ein Blick auf die Deklaration schafft Klarheit In C Programmen wird gern von Pointern Gebrauch gemacht In der C Bibel von BRIAN W KERNIGHAN und DENNIS M RITCHIE ist ihnen daher ein ganzes gut lesbares Kapitel gewidmet 1 8 6 8 Weitere Namen f r Typen typedef Mithilfe der typedef Anweisung kann sich der Benutzer eigene zus tzliche Namen f r C Datentypen schaffen Der neue Name muss eindeutig sein darf also nicht mit einem be reits anderweitig belegten Namen bereinstimmen typedef erzeugt keinen neuen Daten typ sondern veranlasst den Compiler im Programm den neuen Namen w rtlich durch seine Definition zu ersetzen was man zur Pr fung auch von Hand machen kann Der neue Typna me ist ein Synonym Der Zweck neuer Typnamen ist eine Verbesserung der Lesbarkeit und Portierbarkeit des Quelltextes Einige Beispiele Wir wollen uns einen Typnamen BOOLEAN schaffen
258. grammbibliothek mittels des UNIX Kommandos ar 1 herzustellen Zun chst macht es Arbeit seine Programmierergebnisse in eine Bibliothek einzuordnen aber wenn man einmal einen Grundstock hat zahlt es sich aus 32Ein Gadget ist laut W rterbuch ein geniales Dingsbums 108 KAPITEL 1 PROGRAMMIEREN IN C C 1 5 6 Speichermodelle PC DOS Unter UNIX gibt es keine Speichermodelle infolgedessen auch nur eine Standardbibliothek Unter PC DOS hingegen ist die Speichersegmentierung zu beachten d h die Unterteilung des Arbeitsspeichers in Segmente zu je 64 kByte ein l stiges berbleibsel aus uralten Zeiten Die Adressierung der Speicherpl tze ist unterschiedlich je nachdem ob man sich nur inner halb eines Segmentes oder im ganzen Arbeitsspeicher bewegt F r jedes Speichermodell ist eine eigene Standardbibliothek vorhanden Das Speichermodell wird gew hlt durch die Angabe einer Compiler Option oder die Schl sselw rter near far oder huge im C Programm was unter UNIX C zu einem Fehler f hrt Wird keine der beiden M glichkeiten genutzt nimmt der Compiler einen Default an MS Quick C qc1 beispielsweise das Modell sma11 Das Modell t iny nicht von allen Compilern unterst tzt packt Code Daten und Stack in ein Segment f r die Adressen Pointer reichen 2 Bytes Das gibt die schnellsten Programme aber hinsichtlich des Umfangs von Programm und Daten ist man beschr nkt Das Modell small packt Code und Daten in je ein Seg
259. gramme Subroutinen Prozeduren usw sind in allesamt Funk tionen Eine Funktion ist die kleinste kompilierbare Einheit nicht ausf hrbare Einheit das ist ein Programm n mlich dann wenn sie zugleich allein in einer Datei steht Mit weniger als einer Funktion kann der Compiler nichts anfangen Da die Definitionen von Funktionen nicht geschachtelt werden d rfen wohl aber ihre Aufrufe gelten Funktionen grunds tzlich global In einem C Programm stehen alle Funktio nen einschlie lich main auf gleicher Stufe Das ist ein wesentlicher Unterschied zu PAS CAL wo Funktionen innerhalb von Unterprogrammen definiert werden d rfen In C gibt es zu einer Funktion keine bergeordnete Funktion deren Variable in der untergeordneten Funktion g ltig sind Eine Funktion bernimmt von der aufrufenden Anweisung einen festgelegten Satz von Argumenten oder Parametern tut etwas und gibt keinen oder genau einen Wert an die auf rufende Anweisung zur ck Vor dem ersten Aufruf einer Funktion mu ihr Typ d h der Typ ihres R ckgabewertes bekannt sein Andernfalls nimmt der Compiler den Standardtyp int an Entsprechend dem ANSI Vorschlag b rgert es sich zunehmend ein Funktionen durch ausf hrliche Prototypen vor Beginn der Funktion main zu deklarieren Beispiel fuer Funktionsprototyp float multipl float x float y Prototyp x es reicht auch float multipl float float frueher nach K R float multipl int ma
260. gton Rand bringt die erste UNIVAC heraus IBM die 650 Silizium beginnt das Germanium zu verdr ngen IBM entwickelt die erste h here Programmiersprache die Verbreitung erlangt FORTRAN Formula Translator und verwendet Transistoren in ihren Computern KONRAD ZUSE baut die Z 22 die mit R hren arbeitet Sie kommt 1958 auf den Markt Bis 1961 werden 50 St ck verkauft BARDEEN BRATTAIN und SHOCKLEY erhalten den Nobelpreis f r Physik IBM stellt die erste Festplatte vor IBM 350 Disk File f r den Computer RAMAC 305 Kapazit t 5 MByte gro wie ein Schrank Gewicht 1 to bestehend aus 50 Scheiben zu 24 Zoll 50 000 US Die IBM 709 braucht f r eine Multiplikation 0 12 ms Weltweit arbeiten rund 1300 Computer Seminar von Prof JOHANNES WEISSINGER ber Programm gesteuerte Rechenmaschinen im SS 1957 der TH Karlsruhe KARL STEINBUCH Firma SEL sp ter TH Karlsruhe pr gt den Begriff Informatik Erster Satellit Sputnik Sowjetunion kreist um die Erde Als eine Reaktion auf den Sputnik gr ndet das us amerikanische Verteidigungsministerium DoD die Denkfabrik Advanced Research Projects Agency ARPA die sp ter das ARPANET aufbaut MARVIN LEE MINSKY pr gt den Begriff Artificial Intelligence Die TH Karlsruhe erh lt ihren ersten Computer eine ZUSE Z 22 finanziert vom Land Baden W rttemberg Die Maschine verwendet 400 Vakuumr hren und wiegt 1 t Der Arbeitsspeicher fasst 16 W rter zu 38 Bits d h 76 Byte Der Massensp
261. h 9 dividieren Uebertrag ins naechst ergibt aktuelles zweite for Schleif sub for2 cmp 11 sub sbb inc jmp fertig Rest zurueckschreiben mov mov mov Schleifenzaehler um 4 add Ruecksprungbedingung cmp je jmp Ende der Funktion done ret ENDP END aadd OX X dx WORD PTR mill Element des Arrays Element Quotient ergibt Rest iarde 2 SHORT fertig iarde 0 ax WORD PTR mil dx WORD PTR mill iarde 2 Cx SHORT for2 in aktuelles Array bx y WORD PTR bx si 0 ax WORD PTR bx si 2 dx long erhoehen si 4 si grp SHORT done SHORT Zort Quelle 1 59 Assemblerfunktion 1 zur Addition von Feldern Die Fakult ten werden berechnet gespeichert und zum Schlu zusammen ausgegeben So k nnen wir die Rechenzeit von der Ausgabezeit trennen Es zeigt sich da die Rechenzeit bei Ganzzahl Arithmetik gegen ber der Bildschirmausgabe keine Rolle spielt 102 KAPITEL 1 PROGRAMMIEREN IN C C Auf diesem Weg kommen wir bis in die Gegend von 260 dann ist ein Speichersegement 64 KByte unter PC DOS voll Wir k nnen nicht mehr alle Ergebnisse speichern sondern nur die vorangegangene und die laufende Fakult t Sowie ein Ergebnis vorliegt wird es aus gegeben Die Assemblerfunktion 1aadd zur Addition unterscheidet sich in einer Zeile am Anfang Die im Programm vorgesehene Grenze MAX 1023 ist noch nicht die durch das Spe
262. haltens in der Absicht das Programm schneller zu machen Ein einfaches UNIX Werkzeug ist time 1 time prim 1000000 Die Ausgabe sieht so aus real Om 30 65s user Om 22 538 sys Om 1 07s und bedeutet da die gesamte Laufzeit des Programms prim 30 65 s betrug davon entfielen 22 53 s auf die Ausf hrung von Benutzeranweisungen und 1 07 s auf Systemt tigkeiten Die Ausgabe wurde durch einen Aufruf des Primzahlenprogramms aus dem Skriptum Program mieren in C C erzeugt das selbst Zeiten mittels des Systemaufrufs time 2 misst und rund 22 s f r die Rechnung und 4 s f r die Bildschirmausgabe meldet Ein weiterer Profiler ist gprof 1 Seine Verwendung setzt voraus da das Programm mit der Option G kompiliert worden ist Es wird gestartet und erzeugt neben seiner nor malen Ausgabe eine Datei gmon out das mit gprof 1 betrachtet wird Besser noch lenkt man die Ausgabe von gprof 1 in eine Datei um die sich lesen und editieren l t gprof prim prim gprofile Eine stark gek rzte Analyse mittels gprof 1 sieht so aus Stim the percentage of the total running time of the program used by this function cumsecs a running sum of the number of seconds accounted for by this function and those listed above it 16Real programmers don t use source language debuggers 1 2 PROGRAMMER S WORKBENCH 25 seconds the number of seconds accounted for by this function alone This is the major sort for this listing calls the
263. hen und relationalen Operatoren und den mathematischen Standardfunktionen Alle vordefinierten arithmetischen Operatoren liefern Ergebnisse mit einer Genauigkeit von wenigstens einer Einheit der letzten Stelle Auf diese Weise sind sie maximal genau im Sinne des wissenschaftlichen Rechnens Die von den arithmetischen Operatoren vorgenommenen Rundungen lassen sich durch den Gebrauch der Datentypen interval und cinterval steuern Funktionen zur Typumwandlung sind f r alle mathe matisch sinnvollen Kombinationen verf gbar Alle mathematischen Standardfunktionen f r einfache numerische Datentypen k nnen mit ihrem gewohnten Namen aufgerufen werden und liefern Ergebnisse von garantierter hoher Genauigkeit f r beliebige Argumente aus dem 33Dieser Abschnitt ist die gek rzte bersetzung eines Aufsatzes 1992 von Dipl Math ANDREAS WIETHOFF Mitarbeiter des genannten Institutes siehe www uni karlsruhe de iam html language cxsc cxsc html 1 7 KLASSEN BIBLIOTHEKEN 119 Definitosnbereich Die Standardfunktionen f r die Datentypen interval und cinterval liefern scharfe Einschl sse der Wertebereiche Zu den oben genannten einfachen Datentypen kommen die entsprechenden Felddatenty pen Vektoren und Matrizen rvector ivector cvector civector rmatrix imatrix cmatrix cimatrix Der Anwender kann Speicherplatz f r diese Arrays zur Laufzeit zuordnen und freigeben Auf diese Weise kann dasselbe Programm f r Arrays unterschiedlicher Gr e be
264. her Ausdr cke sind die sogenannten Skalarproduktausdr cke Sie sind als eine Summe einfacher Ausdr cke definiert Ein einfacher Ausdruck ist entweder eine Variable eine Konstante oder ein einzelnes Produkt von zweien solcher Objekte Die Variablen d rfen vom Typ Skalar Vektor oder Matrix sein Nur die mathematisch sinnvollen Operationen sind f r die Addition und die Multiplikation zugelassen Das Ergebnis der Aus wertung eines solchen Ausdrucks ist entweder ein Skalar ein Vektor oder eine Matrix In der numerischen Analysis sind Skalarprodukte von entscheidender Bedeutung Beispielsweise gr nden sich Verfahren zur Fehlerkorrektur oder zur iterativen Verbesserung bei linearen oder nichtlinearen Aufgaben auf Skalarprodukte Eine Auswertung dieser Ausdr cke mit maximaler Genauigkeit vermeidet Fehler durch Ausl schung F r eine Auswertung mit einer Genauigkeit von einer Einheit der letzten Stelle stellt C XSC die folgenden Dotprecision Datentypen zur Verf gung dotprecision cdotprecision idotprecision cidotprecision Zwischenergebnisse eines Skalarproduktes k nnen ohne jeden Rundungsfehler in einer Dotprecision Variablen errechnet und gespeichert werden Die folgende Funktion berechnet eine maximal genaue Einschlie ung des Defektes b Ax eines linearen Gleichungssystems Ax b ivector defect rvector b rmatrix A rvector x idotprecision accu ivector INCL Lb x Ub x for int i Lb x i lt Ub x itt b i accu
265. hts ahnt Ferner gibt es einige Werkzeuge zur Ermittlung und Bearbeitung von Strings in Quellfiles und ausf hrbaren Programmen teilweise beschr nkt auf C Programme tt strings 1 xstr 1 Weitere wichtige Werkzeuge sind ein Lineal und Buntstifte mit denen man zusammen geh rende Namen oder Teile im Quelltext markiert 1 2 8 Versionsverwaltung mit RCS SCCS und CVS Gr ere Projekte werden von zahlreichen unter Umst nden wechselnden Programmierern oder Autoren gemeinsam bearbeitet In der Regel werden die so entstandenen Programmpa kete ber Jahre hinweg weiterentwickelt und vielleicht auf mehrere Systeme portiert Die Arbeit vollzieht sich in mehreren Stufen parallel zur Zeitachse Aufgabenstellung Aufgabenanalyse Umsetzung in eine Programmiersprache Testen Dokumentieren vorl ufige Freigabe endg ltige Freigabe Weiterentwicklung Pflege 1 2 PROGRAMMER S WORKBENCH 29 Des weiteren wird ein Programmpaket in viele berschaubare Module aufgeteilt Von jedem Modul entstehen im Verlauf der Arbeit mehrere Fassungen oder Versionen Der Zustand des ganzen Projektes l t sich in einem dreidimensionalen Koordinatensystem mit den Achsen Modul Stufe Zeit und Version darstellen Das von WALTER F TICHY entwickelte Revision Control System RCS ist ein Werkzeug um bei dieser Entwicklung Ordnung zu halten Es ist einfach handzuhaben und vertr gt sich gut mit make 1 Das RCS erledigt drei Aufgaben Es f hrt B
266. i usr include sys stat h deklariert das seinerseits Bezug nimmt auf Deklarationen in usr include types h Auch einige Informationen wie 5 IFREG sind in sys stat h definiert Die Zeitangaben werden wie im vorigen Abschnitt umgerechnet In UNIX Datei Systemen enth lt jede Datei am Anfang eine Magic Number die ber die Art der Datei Auskunft gibt man magic Mittels des Systemaufrufs open 2 wird die fragliche Datei zum Lesen ge ffnet mittels 1seek 2 der Lesezeiger auf die Magic Number gesetzt und mittels read 2 die Zahl gelesen Der Systemaufruf close 2 schlie t die Datei wieder Die Systemaufrufe findet man unter ihren Namen in Sektion 2 eine Erl uterung der Magic Numbers unter magic 4 Nun das Programm Informationen ueber eine Datei define MEZ 3600 include lt stdio h gt include lt sys types h gt include lt sys stat h gt include lt time h gt include lt fcntl h gt include magic h void exit long lseek int main argc argv envp int argc char argv envp int i fildes struct stat buffer long asec msec csec struct tm xpa pm pc 1 2 PROGRAMMER S WORKBENCH 39 if argc lt 2 puts Dateiname fehlt return 1 Za Informationen aus dem Environment for i 0 envp i NULL i if strncmp envpli LOGNAME 4 printf n s n envp i Informationen mittels Systemaufruf
267. i POST nur einmal aufgerufen werden keine R EQUEST METHOD ur getenv QUERY STRING strlen p malloc len return q PR De else i p s if len TE Oz SE 6 if Seet Fall f stromp p POST 0 ENGTH POST return NULL len MAX QUERY LEN E return NULL len 1 getenv CON ENT p NULL strtoul p len 1 malloc len q NULL fread q 1 return NULL return NULL len gt LA return NULL len Laenge von stdin CONTENT LENGTH NULL poQJys AX QUERY LEN stdin len kein QUERY STRING bei return NULL keine CONTENT LENGTH return NULL ET spart Linken von strcpy 169 170 KAPITEL 1 PROGRAMMIEREN IN C C allen N0 return q 3 Fall weder noch kann von diesem Programm nicht behandelt werden else return NULL Gibt eine linked list des geparsten query string zurueck wenn keine Fehler auftreten ansonsten NULL Veraendert den uebergebenen String struct list item parse_list char query struct list item first NULL last amp first while query N0 neues Listenelement allozieren last gt next malloc sizeof last if last NULL return first next
268. ichenketten In C C sind Strings oder Zeichenketten chaine de carac teres Arrays of characters abgeschlossen durch das ASCII Zeichen Nr 0 nicht zu verwech seln mit der Ziffer 0 entsprechend ASCII Nr 48 Strings d rfen nicht beliebig lang werden Wenn nicht Arbeitsspeicher Editor oder andere Faktoren vorher zuschlagen muss man ab 32 kByte auf Probleme gefasst sein wohlgmerkt beim einzelnen String nicht bei einem aus vielen Strings bestehenden Text Man st t selten an diese Grenze deshalb wird sie in vielen B chern nicht erw hnt Wir bevorzugen das Wort String um hervorzuheben dass es sich hierbei um Zeichenfol gen in einem bestimmten sprachenspezifischen Format handelt Zum Speichern des Strings Alex ist ein Array of characters mit wenigstens f nf Elementen zu deklarieren char myname 5 In anderen Sprachen werden Strings anders dargestellt Ein String l sst sich am St ck ver arbeiten oder durch Zugriff auf seine Elemente Man kann fertige String Funktionen verwen den oder eigene Funktionen schreiben muss sich dann aber auch selbst um die ASCII Null k mmern Will man bei der Eingabe von Werten mittels der Tastatur jeden beliebigen Unsinn zulas sen dann muss man die Eingaben als lange einige Zeilen Strings bernehmen die Strings pr fen und dann sofern sie vern nftig sind in den gew nschten Typ umwandeln Ein gutes Programm vertraut Eingaben niemals blindlings sondern pr ft sie vor der weiteren Verarbeitu
269. ichersegment bestimmte Grenze sondern willk rlich Irgendwann erheben sich Zweifel am Sinn gro er Zahlen Selbst als Tapetenmuster wirken sie etwas eint nig 1 4 9 Memo Funktionen C Programme sind aus gleichberechtigten Funktionen aufgebaut Zu diesen geh rt auch main Eine Funktion bernimmt bei ihrem Aufruf einen festgelegten Satz von Parametern oder Argumenten Der Satz beim Aufruf mu mit dem Satz bei der Definition nach Anzahl Typ und Reihenfolge bereinstimmen wie Stecker und Kupplung einer elektri schen Steckverbindung Bei der Parameter bergabe by value arbeitet die Funktion mit Kopien der bergebenen Parameter kann also die Originalwerte nicht ver ndern Bei der Parameter bergabe by reference erf hrt die Funktion die Adressen Pointer der Originalwerte und kann diese ver ndern Das ist gef hrlicher aber manchmal gewollt Beispiel scanf Auch die Funktion main kann Argumente bernehmen und zwar aus der Komman dozeile Die Argumente stehen in einem Array of Strings Argumentvektor Es gibt auch Funktionen wie printf die eine von Aufruf zu Aufruf wechselnde An zahl von Argumenten bernehmen Der Mechanismus ist an einige Voraussetzungen gebunden Eine Funktion gibt keinen oder genau einen Wert als Ergebnis an die aufrufende Funk tion zur ck Dieser Wert kann ein ein Pointer sein n C darf eine Funktion sich selbst aufrufen rekursiver Aufruf Assemblerfunktionen inn
270. ichtigen Leben gibt es keine Hausnummer Null Sein Auftreten kennzeichnet eine Ausnahme oder einen Fehler Der Wert NULL ist der einzige der direkt einem Pointer zugewiesen werden kann jede Zuweisung einer Ganzzahl ist ein Fehler da Pointer keine Ganzzahlen sind Ansonsten d rfen nur Werte die sich aus einer Pointer operation oder einer entsprechenden Funktion deren Ergebnis ein Pointer ist einem Pointer zugewiesen werden F r Pointer sind die Operationen Inkrementieren Dekrementieren und Vergleichen zu l ssig Die Multiplikation zweier Pointer d rfen Sie versuchen es kommt aber nichts Brauch bares heraus meist ein Laufzeitfehler memory fault Inkrementieren bedeutet Erh hung um eine oder mehrere Einheiten des Typs auf den der Pointer verweist Dekrementieren entsprechend eine Verminderung Sie brauchen nicht zu ber cksichtigen um wieviele By tes es geht das wei der Compiler aufgrund der Deklaration Diese Pointer Arithmetik erleichtert das Programmieren erheblich in typlosen Sprachen muss man Bytes z hlen Wir wollen anhand einiger Beispiele mit Arrays den Gebrauch von Pointern verdeutlichen und deklarieren ein eindimensionales Array von vier Ganzzahlen int a 4 Der Name a f r sich allein ist der Pointer Pointerkonstante auf den Anfang des Arrays Es sei mit den Zahlen 4 7 1 und 2 besetzt Dann hat es folgenden Aufbau Pointer Speicher Variable Wert a e 4 xa a 0 4 a l 7 x a 1
271. ie FORTRAN und 9SMALLTALK ist ungewohnt und sehr interessant auch f r LINUX verf g bar N heres siehe www software ibm com ad smalltalk www exept de www cetus links org oo_smalltalk html oder www gsug org Real programmers can write FORTRAN programs in any language 0 1 1 GRUNDBEGRIFFE 11 COBOL sind historisch bedingt und werden wegen ihrer weiten Verbreitung noch lange le ben Andere Sprachen wie BASIC und C wenden sich an unterschiedliche Benutzerkreise Wiederum andere eignen sich f r spezielle Aufgaben besser als allgemeine Sprachen Mit ei ner einzigen Sprache wird man auch in der Zukunft nicht auskommen Die Schwierigkeiten beim Programmieren liegen im brigen weniger in der Umsetzung in eine Programmierspra che der Codierung sondern in der Formulierung und Strukturierung der Aufgabe Was hei t eine Sprache sei f r ein System verf gbar Es gibt einen Interpreter oder Com piler f r diese Sprache auf diesem System Hardware plus Betriebssystem Die Bezeichnung FORTRAN Compiler f r UNIX reicht nicht da es UNIX f r verschiedene Hardware und zu dem in verschiedenen Versionen gibt Drei Dinge m ssen zusammenpassen Interpreter oder Compiler Betriebssystem und Hardware 1 1 6 Interpreter Compiler Linker In h heren Programmiersprachen wie C oder FORTRAN geschriebene Programme werden als Quellcode source code Quellprogramm oder Quelltext bezeichnet Mit diesem Quellco de kann der Computer unmittel
272. ie Standard Include Dateien wie stdio h d rfen in beliebiger Reihenfolge im Pro gramm aufgef hrt werden auch mehrmals Es d rfen auch zwei Standard Include Dateien aufgef hrt werden die beide dasselbe Makro definieren Eine Standard Include Datei schlie t niemals eine andere Standard Include Datei ein Wie sich Nichtstandard Include Dateien verhalten ist offen 1 9 3 Bedingte Kompilation ifdef Bei der Programmentwicklung m chte man gelegentlich leicht voneinander abweichende Fassungen eines ausf hrbaren Programms erzeugen ohne daf r verschiedene Quellfiles schreiben zu m ssen Unser C Programm 1 89 auf Seite 153 zur Berechnung von Prim zahlen hat verschiedene Obergrenzen je nachdem ob es unter PC DOS oder UNIX l uft Im Programmkopf vor main stehen daher folgende Zeilen ifdef UNIX define MAX unsigned long 1000000 else define MAX unsigned long 100000 endif Die symbolische benamte Konstante MAX soll offenbar auf UNIX Systemen einen h heren Wert haben als auf PC DOS Systemen Das h ngt mit der Speichersegmentierung unter PC DOS zusammen Ruft man den Compiler mit einer entsprechenden Option auf cc o prim prim c DUNIX so wird eine Konstante namens UNIX definiert und infolgedessen der if Zweig vom Pr prozes sor ausgewertet mit der Folge da die Konstante MAx die den untersuchten Zahlenbereich nach oben begrenzt auf eine Million gesetzt wird Beim Kompilieren unter PC DOS entf l
273. iebt Fazit die Kenntnis von GW BASIC auf dem PC reicht f r einen Programmierer nicht aus aber f r viele Aufgaben ist ein modernes BASIC ein brauchbares Werkzeug Anfang der sechziger Jahre wurde ALGOL 60 aufgrund theoretischer berlegungen ent wickelt und nach einer umfangreichen berarbeitung als ALGOL 68 ver ffentlicht Diese Programmiersprache ist nie in gro em Umfang angewendet worden spielte aber eine be deutende Rolle als Wegbereiter f r die heutigen Programmiersprachen beziehungsweise die heutigen Fassungen lterer Sprachen Viele Konzepte gehen auf ALGOL zur ck Ende der sechziger Jahre hatte sich das Programmieren vom Kunsthandwerk zur Wis senschaft entwickelt und NIKLAUS WIRTH von der ETH Z rich brachte PASCAL heraus um seinen Studenten einen anst ndigen Programmierstil anzugew hnen PASCAL ist eine strenge und logisch aufgebaute Sprache daher gut zum Lernen geeignet Turbo PASCAL 4No programmers write in BASIC after the age of 12 51964 bot keine andere Programmiersprache nennenswerte M glichkeiten zur Verarbei tung von Strings 1 1 GRUNDBEGRIFFE 9 von Borland ist auf PCs weit verbreitet Ein PASCAL Beispiel findet sich in Abschnitt 1 4 3 Parameter bergabe auf Seite 82 Eine Weiterentwicklung von PASCAL ist MODULA Die Sprache C wurde von BRIAN KERNIGHAN DENNIS RITCHIE und KEN THOMPSON in den siebziger Jahren entwickelt um das Betriebssystem UNIX damit portabel zu gestalten Lange Zeit hindurch gab das Bu
274. ies so that distribution is permitted only in or among countries not thus excluded In such case this License incorporates the limitation as if written in the body of this License The Free Software Foundation may publish revised and or new versions of the General Public License from time to time Such new versions will be similar in spirit to the present version but may differ in detail to address new problems or concerns Each version is given a distinguishing version number If the Program specifies a ver sion number of this License which applies to it and any later version you have the option of following the terms and conditions either of that version or of any later versi on published by the Free Software Foundation If the Program does not specify a version number of this License you may choose any version ever published by the Free Software Foundation If you wish to incorporate parts of the Program into other free programs whose distri bution conditions are different write to the author to ask for permission For software which is copyrighted by the Free Software Foundation write to the Free Software Foun dation we sometimes make exceptions for this Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally NO WARRANTY BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE THERE IS NO WARRANTY FOR THE PROGRAM T
275. if DEBUG puts Array J 0 while j i printf dWNn line j t puts Ende Array endif j 0 while j lt i printf s array line j Ende return 0 Quelle 1 15 C Funktion Bubblesort 1 2 PROGRAMMER S WORKBENCH 33 Bubblesort eignet sich f r kleine Sortieraufgaben mit bis zu etwa hundert Elementen Ko pieren Sie sich die Bausteine in ein eigenes Verzeichnis und entwickeln Sie das Programm unter Verwendung des RCS weiter N heres siehe rcsintro 5 Anfangs erscheint das Arbeiten mit RCS bei kleinen Projekten als l stig hnlich wie das Anlegen eines Makefiles Man gew hnt sich aber schnell daran und spart sofort das Ein tragen des nderungsdatums von Hand Nach kurzer Zeit ist man f r die selbst auferlegte Ordnung dankbar Das Source Code Control System SCCS verwaltet die Versionen der Module indem es die erste Fassung vollst ndig speichert und dann jeweils die Differenzen zur n chsten Version w hrend RCS die j ngste Version speichert und die lteren aus den Differenzen rekonstruiert Alle Versionen eines Programmes samt den Verwaltungsdaten werden in einer einzigen SCCS Datei namens s filename abgelegt auf das schreibend nur ber besondere SCCS Kommandos zugegriffen werden kann Das erste dieser Kommandos ist admin 1 und er zeugt aus einem C Quellfile program c das zugeh rige SCCS Dokument admin iprogram c s program c Mit admin 1 lassen si
276. iffe in C einbringt 1 7 2 Standard Template Library STL Ein wichtiger Schritt vorw rts in der Standardisierung von C war die Annahme der Stan dard Template Library STL als Erweiterung der C Standard Bibliothek durch das ANSI Komitee im Jahr 1993 Die STL enth lt f nf Gruppen von Komponenten Allgemeine Algorithmen teratoren Container Funktionen Adaptoren Wenn man in einem C Programm ein Array linear sequentiell nach einem bestimmten Wert durchsuchen will sieht die Funktion f r Ganzzahlen anders aus als f r Strings obwohl der Suchalgorithmus derselbe ist Die Algorithmen der STL sind dagegen allgemein g ltig indem sie mit Hilfe von Templates den Algorithmus vom Datentyp trennen Ein Template Vorlage Muster Schablone ist eine allgemeine Vorstufe zu einer Funktion oder einer Klas se der die Typen der verwendeten Daten als Parameter mitgegeben werden hnlich wie bei einem Funktionsaufruf die Typen der Argumente Der Compiler erzeugt dann aus dem Template die gew nschte Klasse oder Funktion und nimmt so dem Programmierer Arbeit ab Iteratoren sind eine Verallgemeinerung der Pointer Sie werden eingesetzt um auf Ele mente von Containern zuzgreifen so wie man mittels Pointerarithmetik auf die Elemente eines Arrays zugreift Im Gegensatz zu Pointern bringen sie jedoch eine gewisse eigene Intel ligenz mit so da der Programmierer wenn er erst einmal ihre Funktionsweise begriffen hat weni
277. ile buffer printf n s zeile putstf n nBitt ine Zeil ingeben gets zeile puts zeile strcat zeile Prima puts zeile printf zeile Quelle 1 60 C Programm zur Stringverarbeitung Internet Funktionen Eine bersicht ber diese Funktionen findet sich in intro 3N Beispiele sind Funktionen zur Verarbeitung von Netzadressen Protokolleintr gen Remote Procedure Calls zum Mounten ferner Datei Systeme zur Verwaltung von Benutzern und Passw rtern im Netz Geht ber den Rahmen dieses Textes hinaus Falls Sie sich ein eigenes Programm telnet oder ftp schreiben wollten m ten Sie hier tiefer einsteigen 1 5 2 3 Standard Mathematik Bibliothek Die Standard Mathematik Bibliothek wird vom C Compilertreiber nicht automatisch aufgerufen anders als in FORTRAN F r C ist die Option 1m hinzuzuf gen cc o myprogram myprogram c lm Ferner mu im Programmkopf die Zeile include lt math h gt stehen Dann verf gt man ber Logarithmus Wurzel Potenz trigonometrische und hyper bolische Funktionen Weiteres siehe math 5 Eigentlich sollte man bei diesen Funktionen den zugrunde liegenden Algorithmus und seine Programmierung kennen da jedes numerische Verfahren und erst recht seine Umset zung in ein Programm Grenzen haben aber das Referenz Handbuch beschr nkt sich unter trig 3 usw auf die Syntax der Funktionen Ein Beispiel f r die Verwendung der mathe matischen Bibliothek Poten
278. in float a Drez z multipl a b Funktionsaufruf float multipl float x float y F definition return x y Quelle 1 33 C Programm mit Funktionsprototyp Durch die Angabe der Typen der Funktion und ihrer Argumente zu Beginn des Pro gramms herrscht sofort Klarheit Die Namen der Parameter sind unerheblich Anzahl Typ und Reihenfolge sind wesentlich Noch nicht alle Compiler unterst tzen die Angabe der Ar gumenttypen Auch den Standardtyp int sollte man deklarieren um zu verdeutlichen da man ihn nicht vergessen hat nderungen werden erleichtert 82 KAPITEL 1 PROGRAMMIEREN IN C C 1 4 2 Pointer auf Funktionen Der Name einer Funktion ohne die beiden runden Klammern ist der Pointer auf ihren Ein gang entry point Damit kann ein Funktionsname berall verwendet werden wo Pointer zu l ssig sind Insbesondere kann er als Argument einer weiteren Funktion dienen In funktio nalen Programmiersprachen ist die M glichkeit Funktionen als Argumente h herer Funk tionen zu verwenden noch weiter entwickelt Arrays von Funktionen sind nicht zul ssig wohl aber Arrays von Pointern auf Funktionen siehe Programm 1 90 auf Seite 155 Makros define sind keine Funktionen infolgedessen gibt es auch keine Pointer auf Makros Zu Makros siehe Abschnitt 1 9 Pr prozessor auf Seite 129 1 4 3 Parameter bergabe Um einer Funktion die Argumente oder Parameter zu bermitteln gibt es mehrere Wege
279. ing distribution and modification are not covered by this Li cense they are outside its scope The act of running the Program is not restricted and the output from the Program is covered only if its contents constitute a work based on the Program independent of having been made by running the Program Whether that is true depends on what the Program does 1 You may copy and distribute verbatim copies of the Program s source code as you receive it in any medium provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty keep intact all the notices that refer to this License and to the absence of any warranty and give any other recipients ofthe Program a copy of this License along with the Program You may charge a fee for the physical act of transferring a copy and you may at your option offer warranty protection in exchange for a fee 2 You may modify your copy or copies ofthe Program or any portion of it thus forming a work based on the Program and copy and distribute such modifications or work under the terms of Section 1 above provided that you also meet all of these conditions a You must cause the modified files to carry prominent notices stating that you chan ged the files and the date of any change b You must cause any work that you distribute or publish that in whole or in part contains or is derived from the Program or any part thereof to be lic
280. ingt in den USA den IBM PC heraus mit PC DOS 1 0 MS DOS als wichtigstem Betriebssystem In Berlin wird der Chaos Computer Club gegr ndet Xanadu Projekt von TED NELSON ein Vorl ufer des Web Die Firma Sun Microsystems wird gegr ndet entscheidet sich f r UNIX und baut die ersten Workstations JIM CLARK gr ndet Silicon Graphics Inc SGI 230 1983 1984 1985 1986 1987 1988 1989 ANHANG G ZEITTAFEL Beginn des EuNETs einer der ersten deutschen Internet Provider an der Universit t Dortmund WILLIAM GIBSON pr gt das Wort Cyberspace MORTON HEILIG pr sentiert einen Spielautomaten f r Motorrad und Auto Simulationen mit Stereotonfilm Gebl se Ger chen und vibrierenden Sitzen echt multimedial aber erfolglos da zu teuer Die Universit t Karlsruhe erh lt einen Vektorrechner Cyber 205 und eine Siemens 7865 Die Cyber leistet 400 Mio Flops Beginn des Lokalen Informatiknetzes Karlsruhe LINK ab 1984 Xlink in der Fakult t f r Informatik der Universit t Karlsruhe IBM bringt den PC auf den deutschen Markt UNIX kommt als System V von AT amp T in den Handel die erste Ausgabe der Zeitschrift Computertechnik c t erscheint Nr 12 83 vom Oktober 1983 Gr ndung der X Open Gruppe MS DOS 2 0 PC DOS 2 0 und Novell Netware kommen heraus Microsoft Windows wird angek ndigt Das ARPAnet wechselt von NCP auf TCP IP Der erste Apple Macintosh 128K und der Hewlett Packard Thinkjet der erste Tinte
281. iothek 106 1 5 3 Xlib Xt und Xm X Window 107 15 4 NAG Bibliothek 107 15 5 Eigene Bibliotheken e 107 15 6 8 108 15 7 MemoBibliotheken 108 1 5 8 bung ET EE 108 1 6 Klassen 7 uai eR BE uS ie IIS 109 1 6 1 109 1 6 2 Datenabstraktion Klassenbegriff 2 2 22 222mm a 109 1 6 3 Klassenhierarchie abstrakte Klassen Vererbung 111 164 116 1 6 5 bung Klassen 116 17 Klassen Bibliotheken 117 17 1 C Standardbibliothek 117 1 7 2 Standard Template Library STL 117 viii 118 XSQueccccRe eio dX a eb AERS 1 7 3 1 WasistC XSC ees 1 7 3 2 Datentypen Operatoren und Funktionen 1 7 3 3 Teilfelder von Vektoren und Matrizen 1 7 3 4 Genaue Auswertung von Ausdr cken 1 7 8 5 Dynamische Langzahl Arithmetik 1 7 3 6 Ein und Ausgabe inC XSC 1 4 8 7 C XSC Numerikbibliothek 1 7 8 8 Beispiel Intervall Newton Verfahren 17 4 X11 Programmierung mit dem Qt Toolkit 18 berladenvonOperatoren 18 Pr prozessor ean SS 19 1
282. ir einen arithmetischen Operator und eine Zuweisung Dies ist ein fortgeschrittenes C Programm x define NUMBER 2 include lt stdio h gt int main int i 53 x x i NUMBER printf nDer Wert betraegt d n x return 0 1 11 WEITERE C PROGRAMME 139 Quelle 1 79 C Programm fortgeschritten Da ein Ausdruck sein Ergebnis zur ckgibt k nnen wir in der Funktion printf 3 an stelle von x auch die Summe hinschreiben Als R ckgabewert unseres Hauptprogrammes wollen wir den R ckgabewert der Funktion printf 3 haben n mlich die Anzahl der aus gegebenen Zeichen Das Programm wird k rzer aber auch schwieriger zu verstehen falls man nicht ein alter C Hase ist Dies ist ein kleines C Programm x define NUMBER 2 include lt stdio h gt int main int i 53 return printf nDer Wert betraegt d n i NUMBER Quelle 1 80 C Programm fortgeschritten Variante Der ausf hrbare Code ist damit auf 35 KB angewachsen Jetzt wollen wir die beiden Summanden im Dialog erfragen und die Summe als Makro schreiben Au erdem soll die Rechnung wiederholt werden bis wir eine Null eingeben Endlich mal was Vernuenftiges define SUMME x y x y include lt stdio h gt int main int a 1 b i 0 while a 0 printf Ersten Summanden eingeben scanf d kal printf Zweiten Summanden eingeben
283. ischer Speicher Sie arbeitet von 1950 bis 1960 in der Schweiz An der Harvard University bauen HOWARD AIKEN und GRACE HOPPER die Mark I in Relaistechnik Die Maschine l uft bis 1959 KONRAD ZUSE entwickelt den Plankalk l die erste h here Programmiersprache WILLIAM BRADFORD SHOCKLEY startet ein Forschungsprojekt zur Halbleiterphysik in den Bell Labs VANNEVAR BUSH entwickelt ein System zur Informationsspeicherung und suche das auf Mikrofilmen beruht JOHN VON NEUMANN ver ffentlicht sein Computerkonzept JOHN PRESPER ECKERT und JOHN WILLIAM MAUCHLY bauen in den USA die ENIAC Electronic Numerical Integrator and Computer Die ENIAC rechnet dezimal enth lt 18000 Vakuumr hren wiegt 30 t ist 5 5 m hoch und 24 m lang braucht f r eine Addition 0 2 ms ist an der Entwicklung der Wasserstoffbombe beteiligt und arbeitet bis 1955 Sie ist der Urahne der UNIVAC CLAUDE ELWOOD SHANNON begr ndet die Informationstheorie JOHN BARDEEN WALTER HOUSER BRATTAIN und 1949 1950 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 227 WILLIAM BRADFORD SHOCKLEY entwickeln in den Bell Labs den Transistor der 10 Jahre sp ter die Vakuumr hre abl st Erster Schachcomputer Manchester MADM Das Wort Bit kreiert An der ETH Z rich geht die Zuse Z 4 in Betrieb IBM bringt ihre erste elektronische Datenverarbeitungs anlage die IBM 701 heraus IBM baut die erste Magnetbandmaschine zur Datenspeicherung 726 Remin
284. isflaeche lf n area r printf Bitte zwei Woerter eingeben scanf s s wl w2 printf Das laengere Wort ist s n maxi wl w2 return 0 Funktion ohne Returnwert Typ void void text puts nDiese Funktion gibt nichts zurueck return Funktion mit richtig falsch Returnwert Typ int int eingabe inc x printf Bitte die Zahl 37 eingeben scanf d amp i if i 37 return 0 lse return 1 Funktion di in Rechenergebnis liefert Typ double double area float rad return rad x rad PI Funktion die einen Pointer zurueckgibt Typ char x x char xmaxi char xwl char xw2 int 1 5 for i 0 wl i N0O i 79 80 KAPITEL 1 PROGRAMMIEREN IN C C for j 0 w2 j N0 j return j i w2 w1 Quelle 1 32 C Programm mit return Anweisungen Im Hauptprogramm main haben return n und exit n dieselbe Wirkung In anderen Funktionen f hrt return zur R ckkehr in die n chsth here Einheit exit zum Ab bruch des gesamten Programmes In der Syntax unterscheiden sich beide Aufrufe return ist ein Schl sselwort von C exit ein Systemaufruf von UNIX also eine Funktion Weiter hin sind exit und return auch eingebaute Shell Kommandos siehe sh 1 oder ksh 1 die aber nicht in C Programmen vorkommen k nnen 1 3 9 Memo Bausteine Kommentar ist f r d
285. ist immer damit zu rechnen dass die Eingabe leer ist leerer String nur ASCII Nr 0 oder zu lang ist berlauf Ein gewiefter Programmierer sieht solche Fehler oder Ausnahmen voraus gets fgets 158 KAPITEL 1 PROGRAMMIEREN IN C C 1 11 9 Dynamische Speicherverwaltung malloc Wir haben gelernt da die Gr e eines Arrays oder einer Struktur bereits zur bersetzungs zeit bekannt sein d h im Programm stehen mu Dies f hrt in manchen F llen zur Ver schwendung von Speicher da man Arrays in der maximal m glichen Gr e anlegen m te Die Standardfunktion malloc 3 samt Verwandtschaft hilft aus der Klemme Im folgenden Beispiel wird ein Array zun chst nur als Pointer 1a deklariert dann mittels calloc 3 Speicher zugewiesen mittels realloc 3 vergr ert und schlie lich von free 3 wieder freigegeben x Programm allo c zum Ueben von malloc 3 1994 06 01 x define MAX 40 define DELTA 2 include stdio h include lt stdlib h gt long 18 Pointer auf long x int main int i x calloc belegt Speicher fuer Array von MAX Elementen der Groesse sizeof long initialisert mit 0 gibt Anfangsadresse zurueck In stdlib h wird size t als unsigned int definiert la long calloc size_t MAX size t sizeof long if la NULL puts Zuordnung ok else puts Ging daneben exit 1 Array anschauen printf
286. it 1 return 0 Quelle 1 64 C Programm zur Berechnung geometrischer Formen Geometrische Formen legen eine objektorientierte Programmierung nahe da sie eine Hierarchie bilden hnlich wie Pflanzen oder Tiere Im Beispiel wird als erstes eine abstrakte Basisklasse Form definiert die das enth lt was allen Formen gemeinsam ist Das ist nicht viel und steht in den beiden rein virtuellen Funktionen lesen und schreiben Aus der Klasse Form werden die beiden immer noch abstrakten Klassen Flaeche und Koerper abgeleitet Von Fl chen l t sich sagen dass sie einen Umfang und einen Inhalt haben ausgedr ckt durch die beiden rein virtuellen Funktionen umfang und inhalt F r K rper haben wir entsprechend die abstrakte Klasse Koerper mit den rein virtuellen Funktionen flaeche Oberfl che und volumen Im n chsten Schritt gelangen wir endlich zu konkreten Klassen Aus der Klasse flaeche werden die Klassen Kreis und Rechteck abgeleitet aus der Klasse Rechteck noch die Klasse Quadrat W hrend aus abstrakten Klassen nur weitere abstrakte oder konkrete Klassen abgeleitet werden k nnen lassen sich aus konkreten Klassen weitere konkrete Klas sen ableiten oder Objekte bilden Bei den K rpern leiten wir analog aus der abstrakten Klasse Koerper die konkreten Klassen Kugel und Quader ab aus Quader nochmals Wuerfel In den konkreten Klassen erhalten die virtuellen Funktionen auch einen konkreten In halt das hei t die Platzh
287. it exit wird das Script verlassen Mehr solcher Scherze findet man im Netz oder in dem Buch von DON LIBES Eine hnliche intellektuelle Herausforderung stellen die Quine Programme dar Das sind Programme die ihren eigenen Quellcode ausgeben N heres unter http www nyx net gthompso quine htm 1 13 PORTIEREN VON PROGRAMMEN 173 1 13 Portieren von Programmen 1 13 1 Regeln Unter dem bertragen oder Portieren von Programmen versteht man das Anpassen an ein anderes System unter Beibehaltung der Programmiersprache oder das bersetzen in eine andere Programmiersprache auf demselben System schlimmstenfalls beides zugleich Ein Programm l t sich immer portieren indem man bis zur Aufgabenstellung zur ck geht Das ist mit dem maximalen Aufwand verbunden es l uft auf Neuschreiben hinaus Unter g nstigen Umst nden kann ein Programm Zeile f r Zeile bertragen werden ohne die Aufgabe und die Algorithmen zu kennen In diesem Fall reicht die Intelligenz eines Com puters zum Portieren es gibt auch Programme f r diese T tigkeit Die wirklichen Aufgaben liegen zwischen diesen beiden Grenzf llen Schon beim ersten Schreiben eines Programmes erleichtert man ein k nftiges Portieren wenn man einige Regeln beherzigt Man vermeide Annahmen ber Eigenheiten des Datei Systems z B L nge der Namen Annahmen ber die Reihenfolge der Auswertung von Ausdr cken Funktions argumenten oder Nebeneffekten z B bei printf 3
288. it under certain conditi ons type show c for details The hypothetical commands show w and show c should show the appropriate parts of the General Public License Of course the commands you use may be called something other than show w and show c they could even be mouse clicks or menu items whatever suits your program You should also get your employer if you work as a programmer or your school if any to sign a copyright disclaimer for the program if necessary Here is a sample alter the names Yoyodyne Inc hereby disclaims all copyright interest in the program Gnomovision which makes passes at compilers written by James Hacker signature of Ty Coon 1 April 1989 Ty Coon President of Vice This General Public License does not permit incorporating your program into proprietary programs If your program is a subroutine library you may consider it more useful to permit linking proprietary applications with the library If this is what you want to do use the GNU Library General Public License instead of this License F 2 GNU Free Documentation License Kopiert von http www gnu org copyleft 2 GNU FREE DOCUMENTATION LICENSE 219 Version 1 2 November 2002 Copyright 2000 2001 2002 Free Software Foundation Inc 59 Temple Place Suite 330 Boston MA 02111 1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document but changing it is not allowed Preamble
289. k n nen zu einem durch geschweifte Klammern zusammengefa ten Block vereinigt werden Nach au en wirkt dieser Block wie eine einzige Anweisung Der Block ist zugleich die kleins te Einheit f r den Geltungsbereich von Variablen Mehrere Anweisungen oder Bl cke werden zu einer Funktion zusammengefa t Die Funktion ist die kleinste kompilierbare Einheit Eine oder mehrere Funktionen k nnen in einer Datei abgelegt sein Dem Compiler bergibt man im Minimum eine Datei die eine Funktion enth lt Mehrere Dateien hinwiederum k nnen ein vollst ndiges nach dem Kom pilieren lauff higes Programm bilden Erinnern Sie sich an das Werkzeug make 1 Das Minimalprogramm in C und C besteht aus einer Funktion n mlich main deren Rumpf leer ist in einer Datei main Quelle 1 76 Minimales C Programm 138 KAPITEL 1 PROGRAMMIEREN IN C C Der Name main ist f r das Hauptprogramm vorgeschrieben main ist eine Funkti on daher die beiden runden Klammern Der durch die geschweiften Klammern umschlossene Block ist leer main tut nichts Der Syntaxpr fer lint 1 beanstandet da der R ckga bewert von main undefiniert ist was stimmt uns aber nicht weiter st rt Der Compiler erzeugt aus diesem Quellcode etwa 16 kB ausf hrbaren Code Hinter main steckt einiges was dem Programmierer verborgen ist Als n chstes wollen wir main als ganzzahlig deklarieren f r einen definierten R ck gabewert sorgen und
290. keine ganzen Zahlen die Arithmetik l uft anders Ein Pointer auf eine noch nicht oder nicht mehr existierende Variable h ngt in der Luft dangling pointer und ist ein Programmfehler Nun einige Beispiele zu bestimmten Anwendungen von Pointern 148 KAPITEL 1 PROGRAMMIEREN IN C C 1 11 7 1 Nullpointer Die Zahl Null ist die einzige Konstante die sinnvollerweise einem Pointer zugewiesen werden kann Auf dieser Adresse liegt kein g ltiges Datenobjekt sie tritt nur in Verbindung mit Fehlern oder Ausnahmen auf Um die Besonderheit dieser Adresse hervorzuheben schreibt man sie meist nicht als Ziffer sondern als Wort NULL In der Include Datei stdio h ist das Wort als symbolische Konstante mit dem Wert 0 definiert Im Programm 1 94 Sortieren nach Duden auf Seite 162 kommen beim ffnen einer Datei zum Lesen folgende Zeilen vor if fp fopen argv 1 r NULL printf Datei 55 kann nicht goeffnet werden n argv 1 exit 1 Die Funktion fopen die die Datei ffnet gibt bei Mi erfolg aus welchen Gr nden auch immer anstatt eines Dateipointers den Nullpointer zur ck Falls der Vergleich positiv aus f llt also bei Mi erfolg wird eine Fehlermeldung ausgegeben und das Programm mit dem Systemaufruf exit verlassen Bei Erfolg enth lt der Pointer fp die Adresse des Dateian fangs 1 11 7 2 Pointer auf Typ void Man braucht gelegentlich einen Pointer der auf eine Variable von einem zun chst noch
291. kriptum das komplett als Report formatiert werden soll dazu noch die Kapitel in jeweils einem eigenen Unterverzeichnis als Artikel samt Folien Nat rlich sind die Makefiles in den Unterverzeich nissen weiche Links auf ein einziges Makefile Ohne make 1 und eine entsprechende Ver zeichnisstruktur w rde man sich dumm und d mlich tippen Im GNU Projekt wird Software im Quellcode f r verschiedene Systeme ver ffentlicht In der Regel mu man die Quellen auf der eigenen Anlage kompilieren Infolgedessen geh ren zu den GNU Programmen fast immer umfangreiche Makefiles oder sogar Hierarchien davon bung im Gebrauch von make 1 erleichtert die Einrichtung von GNU Software daher er heblich Oft wird ein an das eigene System angepa tes Makefile erst durch ein Kommando configure erzeugt Die Reihenfolge bei solchen Programmeinrichtungen lautet dann configure vi Makefile make make install make clean wobei make install Schreibrechte in den betroffenen Verzeichnissen erfordert also meist Superuserrechte Gelegentlich wird make 1 aus einem Shellskript heraus aufgerufen das einige Dinge vorbereitet So wird zum Beispiel sendmail 1 durch den Aufruf des mitgelie ferten Shellskripts Build erzeugt 1 2 PROGRAMMER S WORKBENCH 23 Das Skript configure erlaubt oft die Option prefix DIR wobei DIR das Verzeichnis ist in dem das ganze Ger del eingerichtet werden soll defaultm ig meist usr local aber manchmal besser usr oder o
292. kte Basisklasse public nach aussen sichtbar virtual void lesen 0 reine virt Funktionen virtual void schreiben 0 protected public fuer abg Klasse ansonsten private private nach aussen unsichtbar class Flaeche public Form abgel abstr Klasse public Flaeche u i 0 Constructor void schreiben cout Umfang u endl cout Inhalt i endl protected double u i virtual double umfang double double 0 rein virtuelle Fkt virtual double inhalt double double 0 private D I class Koerper public Form abgel abstr Klasse public Koerper f v 0 Constructor void schreiben cout Oberflaeche f endl cout Volumen v endl protected double f v virtual double flaeche double double double 0 rein virtuelle Fkt virtual double volumen double double double 0 private class Kreis public Flaeche abgel konkr Klasse public Kreis a x y 0 Constructor 1 6 KLASSEN 113 void lesen cout Radius cin a u umfang a a i inhalt a a protected private double a x y double umfang double x double y return PI x y double inhalt double x double y return PI x x y class Rechteck public Flaeche abgel konkr Klasse public Rechteck a b x y 0 void lesen cou
293. ktion printf 3 nachempfunden ist es ist damit nicht gesagt da printf 3 tats chlich so aussieht Funktion printi Ersatz fuer printf nur fuer dezimale Ganzzahlen Zeichen und Strings Siehe Referenz Handbuch unter varargs 5 22 02 91 x Returnwert O0 ok 1 Fehler sonst wie printf 7 Compileraufruf cc c printi c finclude lt stdio h gt finclude lt varargs h gt int fputc void int print Funktion printi variable Anzahl von Argumenten x int printi va alist va dcl va_list pvar unsigned long arg int field sig char format string long ivar Uebernahme und Auswertung des Formatstrings x va start pvar format va arg pvar char while 1 Ausgabe von Literalen while format amp amp format N0 fputc format stdout Ende des Formatstrings if format 0 va_end pvar return 0 Prozentzeichen Platzhalter x format t field 0 Auswertung Laengenangabe x 1 4 FUNKTIONEN 93 while format gt 0 amp amp format 9 field field 10 format 0 format t Auswertung Typangabe und Ausgabe des Arguments z switch format case d sig ivar long va_arg pvar int 0 1 0 arg unsigned long ivar 0 ivar ivar int_print arg sig field break case u arg unsigned
294. ktionen oder Funktionen zur Abfrage von Me ger ten am Bus Damit man diese Funktionen nicht jedesmal neu zu erfinden braucht werden sie in Bi bliotheken gepackt die dem Programmierer zur Verf gung stehen Teils stammen sie vom Hersteller des Betriebssystems also urspr nglich AT amp T teils vom Hersteller der Compiler bei uns Hewlett Packard und GNU oder der Anwendungssoftware teils von Benutzern Bi bliotheken enthalten Programmbausteine es lassen sich aber auch andere Dateien Texte Grafiken in gleicher Weise zusammenfassen Dann spricht man allgemeiner von Archiven Au er den Dateien enthalten Archive Verwaltungsinformationen Index zum schnellen Fin den der Inhalte Diese Informationen wurden fr her mit dem Kommando ranlib 1 eigens erzeugt heute erledigt ar 1 das mit Die Verwendung von Bibliotheken beim Programmie ren wird im Skriptum Programmieren in C C erl utert Au er den mit dem Compiler gelieferten Bibliotheken kann man zus tzlich erworbene oder selbst erstellte Bibliotheken verwenden Im Handel sind beispielsweise Bibliotheken mit Funktionen f r Bildschirmmasken zur Verwaltung index sequentieller Dateien f r Grafik 26 KAPITEL 1 PROGRAMMIEREN IN C C zur Me werterfassung und aufbereitung und f r besondere mathematische Aufgaben Auch aus dem Netz laufen Bibliotheken zu Eigene Bibliotheken erzeugt man mit dem UNIX Kommando ar 1 das Datei Format ist unter ar 4 beschrieben Ein Beispiel zeige den
295. ktionen zu verwenden da sie Eigenheiten des Systems verdecken Die mit dem C Compiler eines UNIX Systems mitgelieferte Standardbibliothek wird im Referenz Handbuch unter intro 3 vorgestellt und umfa t mehrere Teile die Standard C Bibliothek meist gekoppelt mit der Standard Input Output Bibliothek den Netzfunktionen und den Systemaufrufen weil sie zusammen gebraucht werden die mathematische Bibliothek gegebenenfalls eine grafische Bibliothek gegebenenfalls eine Bibliothek mit Funktionen zum Messen und Regeln gegebenenfalls Datenbankfunktionen und weitere Spezialit ten Au er Funktionen enth lt sie Include Dateien mit Definitionen und Makros die von den Funktionen ben tigt werden im UNIX Datei System aber in einem anderen Verzeichnis usr include liegen als die Funktions Bibliotheken 1ib und usr lib 1 5 2 2 Standard C Bibliothek Die Standard C Bibliothek 1ib libc a wird vom C Compilertreiber cc 1 eines UNIX Systems aufgerufen und braucht daher nicht als Option mitgegeben zu werden F r einen getrennten Linker Aufruf lautet die Option 1c Mit dem Kommando ar t lib libc a schauen Sie sich das Inhaltsverzeichnis der Bibliothek an Au er bekannten Funktionen wie printf und Systemaufrufen wie stat 2 werden Sie viele Unbekannte treffen Auskunft ber diese erhalten Sie mittels der man Seiten beispielsweise 104 KAPITEL 1 PROGRAMMIEREN IN C C man ruserok man insque sofern die Fu
296. last last gt next last gt next NULL einen Parameter extrahieren last gt key query do querytt while query N0 query amp query 1 N0 if query N0 queryt in key und value splitten last gt value last gt key do last gt valuett while xlast value N0 amp amp last gt value if xlast value N0 x last gt valuet xx Tripel umwandeln unescape_str last gt key unescape_str last gt value return first next Gibt ein Array von Strukturen zurueck mit den geparsten Parametern falls keine Fehler auftreten ansonsten NULL Geht dabei zweimal ueber den query string was aber nicht weiter schlimm ist Das Array wird durch eine Struktur abgeschlossen bei der beide Wert key und value NULL sind Veraendert den uebergebenen String struct array item parse_array char xquery int count char xtemp struct array item first last tox xXx Anzahl Parameter bestimmen for count 0 temp query xtemp count do tempt t while temp N0 amp amp xtemp amp temp 1 N0 if count 0 return NULL Array allozieren 1 12 OBFUSCATED C 171 last first malloc sizeof first x count 1 if last NULL return NULL first count key first count value N
297. lease the Modified Version under precisely this license with the Modified Version filling the role of the Document thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it In addition you must do these things in the Modified Version A Use in the Title Page and on the covers if any a title distinct from that of the Docu ment and from those of previous versions which should if there were any be listed in the History section of the Document You may use the same title as a previous version if the original publisher of that version gives permission B List on the Title Page as authors one or more persons or entities responsible for aut horship of the modifications in the Modified Version together with at least five of the principal authors of the Document all of its principal authors if it has fewer than five unless they release you from this requirement C State on the Title page the name of the publisher of the Modified Version as the publis her D Preserve all the copyright notices of the Document E Add an appropriate copyright notice for your modifications adjacent to the other copy right notices F Include immediately after the copyright notices a license notice giving the public per mission to use the Modified Version under the terms of this license in the form shown in the Addendum below G Preserve in that license notice the full lists of Invariant Sections
298. leichtern kann auch hei en nderungen von vornherein zu vermeiden indem man die Programmteile so allgemein wie mit dem Aufwand vereinbar gestaltet Effizienz ist immer gefragt Fr her bedeutete das vor allem sparsamer Umgang mit dem Arbeitsspeicher Das ist heute immer noch eine Tugend tritt aber hinter den vorgenann ten Kriterien zur ck Die moderne Software scheint zur Unterst tzung der Chiphersteller geschrieben zu werden An zweiter Stelle kam Ausf hrungsgeschwindigkeit trotz aller Ge schwindigkeitssteigerungen der Hardware ebenfalls noch eine Tugend wenn sie mit Ein fachheit und bersichtlichkeit einhergeht Mit anderen Worten erst ein bersichtliches Pro gramm schreiben und dann nachdenken ob man Speicher und Zeit einsparen kann Ein Programm soll benutzerfreundlich sein Der Benutzer am Terminal will bei all t glichen Aufgaben ohne das Studium pfundschwerer Handb cher auskommen und bei den h ufigsten Fehlern Hilfe vom Bildschirm erhalten Er will andererseits auch nicht mit ber fl ssigen Informationen und nutzlosen Spielereien bel stigt werden Der Schwerpunkt der Programmentwicklung liegt heute weniger bei den Algorithmen sondern bei der Interakti on mit dem Benutzer F r einen Programmierer ist es nicht immer einfach sich in die Rolle eines EDV Laien zu versetzen Schlie lich ist daran zu denken dass man ein Programm nicht nur f r den Computer schreibt sondern auch f r andere Programmierer Erstens kommt es oft
299. leitkomma Zahl eingeben n if xread amp y float printf Die Eingabe war f n y else puts Fehler von xread error 1 Stringeingabe printf Bitte String eingeben Mn if xread z char printf Die Eingabe war s n z else puts Fehler von xread error 1 exit error Funktion xread x Parameter Variable als Pointer C Typ als String define MAXLAENGE 200 max Laenge der Eingabe include lt string h gt int atoi Standard C Bibliothek x long atol Standard C Bibliothek x double atof Standard C Bibliothek x int xread p typ void xp char typ char input MAXLAENGE int rwert 0 if gets input NULL switch typ case c Typ char x strcpy char p input break case i Typ int case s Typ short int p atoi input break case ls Typ long x x long p atol input break case d Typ double 7 case f Typ float double p atof input break default puts xread Unbekannter Typ rwert 1 else puts xread Fehler bei Eingabe rwert 2 150 KAPITEL 1 PROGRAMMIEREN IN C C return rwert Quelle 1 88 C Programm mit Pointer auf void Die Funktion xread braucht als erstes Argument einen Pointer aus demselben Grund wie scanf
300. lement 172 257
301. len zul ssige Operationen f r Pointer definiert Vergleich zweier Pointer auf denselben Typ Inkrementierung Addition einer ganzen Zahl Dekrementierung Subtraktion einer ganzen Zahl e Subtraktion zweier Pointer desselben Typs Der Vergleich zweier gleichartiger Pointer auf bereinstimmung ist immer m glich ein Ver gleich gr er kleiner setzt eine bestimmte Ordnung der Adressen voraus und ist problema tisch man l sst besser die Finger davon double pl xp2 if pl 2 ok x if pl p2 Ok x if pl NULL ok 7 if pl lt p2 gefaehrlich Bei der Addition oder Subtraktion einer ganzen Zahl bedeutet die ganze Zahl nicht eine An zahl von Bytes sondern eine Anzahl von Objekten des zum Pointer geh rigen Datentyps Man braucht sich also nicht darum zu k mmern wieviele Bytes der Datentyp belegt double x vektor 10 x xvektor erstes Element Index 0 x x vektor 2 uebernaechstes Element Die selten vorkommende Subtraktion zweier gleichartiger Pointer liefert die Anzahl der zwi schen den beiden Pointern liegenden Datenobjekte 1 8 7 8 Ein und Ausgabe Operationen In C gibt es keine Operatoren zur Ein oder Ausgabe vergleichbar mit read oder write in PASCAL oder FORTRAN Stattdessen greift man entweder auf Systemaufrufe des Be triebssystems z B UNIX zur ck oder besser auf Funktionen der C Standardbibliothek die letzten Endes auch Systemaufrufe
302. lfe beim Eingeben von LISP Quellen Steht der Cursor auf einer Klammer so l t das Kommando den Cursor zur Gegenklam mer springen und dort verbleiben Auch beim emacs 1 gibt es einige Wege das Schreiben von Quellen zu erleichtern ins besondere nat rlich falls es um LISP geht Der Editor nedit 1 l sst sich auf den Stil aller g ngigen Programmiersprachen einschlie lich LaTeX einstellen und ist in vielen Linux Distributionen enthalten 1 2 2 Compiler und Linker cc ccom ld Auf das Schreiben der Quelltexte mit einem Editor folgt ihre bersetzung in die Sprache der jeweiligen Maschine mittels eines bersetzungsprogrammes meist eines Compilers Jedes vollst ndige UNIX System enth lt einen C Compiler Compiler f r weitere Program miersprachen sind optional Auf unserer Anlage sind zus tzlich ein FORTRAN und ein PASCAL Compiler vorhanden wobei von FORTRAN gegenw rtig die Versionen 77 und 90 nebeneinander laufen Kompilieren bedeutete vor der EDV Zeit zusammentragen Im alten Rom hatte es auch noch die Bedeutung von pl ndern In unseren Herzensergie ungen haben wir viel aus B chern Zeitschriften WWW Seiten und Netnews kompiliert Ein Compiler bersetzt den Quellcode eines Programmes in Maschinensprache Die meis ten Programme enthalten Aufrufe von externen Programmodulen die bereits vor bersetzt und in Bibliotheken zusammengefa t sind Beispiele sind Ausgaberoutinen oder mathemati sche Funktionen Der ausf hrba
303. ll ein Operand global im gesamten Programm gelten so ist er in jeder Datei erneut zu deklarieren Dies widerspricht jedoch der Forderung dass ein und derselbe Operand nur einmal deklariert werden darf Der Ausweg liegt darin ihn nur einmal in beschriebener Weise zu deklarieren und in allen anderen Dateien vor die Deklaration das Wort extern zu setzen Damit ist der Forderung nach Eindeutigkeit Gen ge getan und der Compiler weif trotzdem bei jeder Datei mit welchen Typen er es zu tun hat Wird ein Operand desselben Namens innerhalb eines Bereiches nochmals deklariert so hat f r diesen Bereich die lokale Deklaration Vorrang vor der u eren Deklaration Es wird ein neuer lokaler Operand erzeugt Der Geltungsbereich des u eren Operanden hat eine L cke der u ere Operand wird verschattet Das Konzept des Geltungsbereiches l sst sich ber ein Programm hinaus erweitern Die exportierten Umgebungs Variablen der Sitzungsshell gelten f r alle Prozesse einer Sitzung und k nnen von diesen abgefragt oder ver ndert werden Dar ber hinaus sind auch Variable denkbar die in einem Verzeichnis einem Datei System oder in einer Netz Domain gelten Je gr er der Geltungsbereich ist desto sorgf ltiger muss man mit der Schreibberechtigung umgehen 29 n C d rfen Variable an beliebiger Stelle innerhalb eines Bereiches deklariert werden jedoch muss dies vor ihrer ersten Verwendung erfolgen 64 KAPITEL 1 PROGRAMMIEREN IN C C 1 3 6 11 L
304. long va arg pvar unsigned int_print arg 0 field break case switch x format 1 case d sig ivar va arg pvar long 0 1 0 arg unsigned long ivar 0 ivar ivar int print arg sig field break case u arg va arg pvar unsigned long int_print arg 0 field break default va end pvar return 1 unbekannter Typ format t break case fputc format stdout break case fputc va arg pvar char stdout break case s string va arg pvar char x while fputc string t stdout break default va end pvar return 1 unbekannter Typ format t Funktion zur Ausgabe der dezimalen Ganzzahl x void int_print unsigned long number int signum int field int 15 char table 21 long radix 10 for i 0 i lt 21 i x table i ff Umwandlung Zahl nach ASCII Zeichen x 94 KAPITEL 1 PROGRAMMIEREN IN C C for i 0 i lt 20 i table i 0123456789 number radix number radix if number 0 break Vorzeichen if signum table i ror x Ausgabe x if field 0 amp amp field 20 i field 1 while i gt 0 fputc table i stdout x Ende Quelle 1 53 C Funktion mit wechselnder Anzahl von Argumenten Nach der include Datei varargs h folgt in gewohnter Weise die Funktio
305. lszahlen bereinstimmen F r viele Zwecke reicht das f r einen Vokabeltrainer sicherlich Eine ausf hrliche Diskussion findet sich bei DONALD E KNUTH 1 11 7 Ein Herz f r Pointer Pointer sind nicht schwierig sondern allenfalls gew hnungsbed rftig Sie sind bei C Programmierern beliebt weil sie zu eleganten und schnellen Programmen f hren Wir wollen uns an Hand einiger Beispiele an ihren Gebrauch gew hnen Eine Wiederholung Der Computer kennt nur Speicherpl tze in Einheiten von einem Byte Jedes Byte hat eine absolute Adresse Hausnummer die uns aber nichts angeht Die Deklaration einer Variablen erzeugt eine Variable mit einem Namen und bestimm ten Eigenschaften darunter den durch den Typ bestimmten Speicherbedarf in Bytes Die Definition einer Variablen weist ihr einen Wert zu belegt Speicherplatz und damit eine Adresse Der Pointer auf eine Variable enth lt ihre Speicheradresse Da uns der absolute Wert der Adresse nicht interessiert greifen wir auf den Pointer mittels seines Namens zu Hei t die Variable x so ist amp x der Name des Pointers Deklariert man zuerst den Pointer px so erh lt man die Variable durch Dereferen zierung px Es ist nicht immer gleichg ltig ob man den Pointer oder die Variable deklariert und das Gegenst ck durch Referenzieren bzw Dereferenzieren handhabt Eine Variable kann notfalls auf einen Namen verzichten aber niemals auf ihren Poin ter Pointer sind
306. lt die Option DUNIX Eine zweite Anwendung ist die Erzeugung von Programmversionen die zwecks Fehler suche etwas gespr chiger sind als die Endfassung Man gibt beispielsweise Zwischenwerte folgenderma en aus 34Manche Compiler verlangen da das Doppelkreuz in jedem Fall am Beginn der Zeile steht 1 9 PR PROZESSOR 133 define DEBUG 1 int main dif DEBUG printf Variable x hat den Wert d n x endif Hier definieren wir in der Programmquelle ein symbolische Konstante DEBUG zu 1 true und veranlassen damit den Pr prozessor die printf Zeile einzubeziehen L uft das Pro gramm fehlerfrei setzt man im Quellcode DEBUG auf null Ein anderes im folgenden Pro gramm angewendetes Verfahren fragt nur danach ob die Konstante DEBUG definiert ist oder nicht Programm itox zum Umrechnen von positiven ganzen Zahlen zur Basis 10 auf eine andere Basis z B 16 define DEBUG falls gewuenscht x define MAX 8 max Stellen Ergebnis x include lt stdio h gt int umwandeln int int int x Prototyp x int main int b x neue Basis als Dezimalzahl int x umzurechnende Dezimalzahl int d Schleifenzaehler int r MAX x Array des Ergebnisses while 1 printf n nNeue Basis einlesen scanf Sd amp b printf Dezimalzahl scanf d amp x if b lt 2 puts Basis muss 1 sein c
307. lude Datei 130 info 1 137 Initialisierung 49 173 inkrementieren 65 69 Inode Informationen aus der I 38 INRIA 230 int C 51 Interface Sprachen 37 Internet 105 Interpreter 11 258 ISO IEC 14882 9 ISO IEC 9899 9 Iteration 94 Iterator 117 JAVA 5 10 K amp R C 9 Karlsruhe Beginn der Informatik in K 225 Informatikstudium in K 225 Rechenzentrum der Universit t K 225 ZUSE Z 22 225 Karlsruher Test 206 Klammer C 72 Klasse C 109 Klasse abstrakte 111 Komma Operator 71 75 76 Kommandozeile 90 Kommentar C 46 47 129 135 138 C 48 109 make 21 Konstante Konstante 46 Literal 50 symbolische K 49 129 Kontrollanweisung 73 Kreuzreferenz 28 Wert 64 Label C 77 Langzahl Arithmetik 121 large Speichermodell 108 1 19 Lebensdauer Operand 49 63 64 libQt 124 linken Programme 19 102 Linker 4 11 lint 20 43 LISP 5 Literal 46 long C 51 long double C 52 15 45 lseek 38 magic 38 magic h 38 Magic Number 38 main 137 main 37 90 91 make 21 45 make 1 156 Makefile 21 Makro 254 C 82 129 make 21 malloc 3 158 man 1 136 man Seite 136 MANPATH 136 Mantisse 52 Maschinencode 11 Maschinensprache 4 Maschinenwort 51 55 math h 105 medium Speichermodell 108 Member Access Specifier 110 Meta Object Compiler 124 method HTML 167 Methode C 109 Minus un res 172 mknod 41 moc 124 Modul 19 MODULA 8 Modulus 65 144 monitor 25 Motif 107 NAG Bibliothek 107 Name
308. man hier noch einiges verbessern und vor allem auch andere Sortieralgorithmen nehmen Man sollte auch das Einlesen und die Ausgabe vom Sortieren time2 home debian prog quellen mysort tex v 1 1 1 1 2005 02 06 19 44 00 wulf timel Quelle 1 14 C Programm Sortieren f r RCS trennen x Funktion bubble W Alex Universitaet Karlsruhe SHeader incl incl incl lude amp 60 stdio h amp 62 lude amp 60 string h amp 62 lude myheader h int bubble char xtext Bubblesort als Beispiel fuer RCS Juli 1995 P home debian prog quellen bubble tex v 1 1 1 1 2005 02 06 19 44 00 wulf 32 KAPITEL 1 PROGRAMMIEREN IN C C int i 0 j 0 flag 0 z line MAXLIN char array MAXLIN LINSIZ FILE fp if DEBUG printf Bubblesort s n text endif Einlesen if fp fopen text r NULL return 1 while feof fp amp amp i MAXLIN fgets array it LINSIZ fp fclose fp if DEBUG puts Array J 0 while j lt i printf s array jtt puts Ende Array endif Sortieren Bubblesort 7 for j 0 j lt MAXLIN j line j J while flag 0 flag 1 for j 0 j lt i j if strcmp array line j l array line j 111 gt 0 z line j 1 line j 1 line jl line j z flag 0 Ausgeben nach stdout x
309. ment von 64 kByte Damit lassen sich viele Aufgaben aus der PC DOS Welt bew ltigen Das Modell medium stellt ein Segment f r Daten und mehrere Segmente f r Programm code zur Verf gung bis zur Grenze des freien Arbeitsspeichers Typische Anwendungen sind l ngere Programme mit wenigen Daten Das Modell compact verh lt sich umgekehrt wie medium ein Segment f r den Code meh rere Segmente f r die Daten Geeignet f r kurze Programme mit vielen Daten Ein einzelnes Datenelement ein Array beispielsweise darf nicht gr er als ein Segment sein Das Modell large l t jeweils mehrere Segmente f r Code und Daten zu wobei wieder ein einzelnes Datenelement nicht gr er als ein Segment sein darf Das Modell huge schlie lich hebt auch diese letzte Beschr nkung auf aber die Beschr n kung auf die Gr e des freien Arbeitsspeichers bleibt PC DOS schwoppt nicht Die Schl sselw rter near far und huge in Verbindung mit Pointern oder Funktionen haben Vorrang vor dem vom Compiler benutzten Speichermodell Bei near sind alle Adressen 16 Bits lang bei far sind die Adressen 32 Bits lang die Pointerarithmetik geht jedoch von 16 Bits aus und bei huge schlie lich l uft alles mit 32 Bits und entsprechend langsam ab Falls Ihnen das zu kompliziert erscheint steigen Sie einfach um auf UNIX 1 5 7 Memo Bibliotheken Eine Bibliothek vereint eine Menge von Funktionen in einer einzigen Datei Eine Bibliothek hat nichts mit Verschl ssel
310. mer zeitaufwendig In vielen Programmen geht f r diese Aufgabe so gar der gr te Teil der Zeit drauf Also unn tigen I O vermeiden Den gr ten Gewinn an Geschwindigkeit und manchmal auch zugleich an Speicherplatz erzielt man durch eine zweckm ige Datenstruktur und einen guten Algorithmus Diese berlegungen geh ren jedoch an den Anfang der Programmentwicklung Wenn das alles noch nicht reicht ist es Zeit sich mittels eines Profilers anzusehen wo die Zeit verbraten wird und vielleicht auch einige kritische Programmteile in Assembler schreiben 1 11 5 curses Fluch oder Segen Im Englischen ist ein curse so viel wie ein Fluch und die curses 3 Bibliothek ist fr her wegen ihrer vielen Fehler oft verw nscht worden Andererseits erleichtert sie den Um gang mit dem Terminal unabh ngig von dessen Typ Wir beginnen mit einem einfachen 142 KAPITEL 1 PROGRAMMIEREN IN C C Programm das terminfo Funktionen aus der curses 3 Bibliothek verwendet um den Bildschirm zu l schen wobei der Terminaltyp aus der Umgebungsvariablen TERM und die zugeh rigen Steuersequenzen aus der Terminalbeschreibung in usr lib terminfo 4 entnommen werden Das Programm soll au erdem wenn ihm Dateinamen als Argumente bergeben werden die Dateien leeren ohne sie zu l schen der Bildschirm wird ja auch nicht verschrottet C Programm das Bildschirm oder Files loescht x x Compile cc o xclear xclear c lcurses falls terminf
311. mit for die aber stets durch eine while Schleife ersetzt werden kann Sie sieht so aus for Initialisierung Bedingung Inkrementierung Block von Anweisungen Vor Eintritt in die Schleife wird der Ausdruck initialisierung ausgewertet also immer dann wird der Ausdruck bedingung gepr ft und falls ungleich 0 der Schleifenrumpf betre ten Zuletzt wird der Ausdruck inkrementierung ausgewertet und zur Bedingung zur ck gesprungen Die for Schleife in C hat also eine andere Bedeutung als die for Schleife der Shell oder der Programmiersprache PASCAL Jeder der drei Ausdr cke darf fehlen 76 KAPITEL 1 PROGRAMMIEREN IN C C for i2 ist die ewige und zugleich leere Schleife Die Initialisierung und die Inkrementierung d rfen mehrere durch den Komma Operator getrennte Ausdr cke enthalten die Bedingung muss einen Wert gleich oder ungleich 0 ergeben Zwei Beispiele x Beispiel fuer for Schleife 04 03 1993 define MAX 10 include lt stdio h gt int main Int d for i 0 i lt MAX i printf Der Schleifenzaehler spricht d n i return 0 Quelle 1 28 C Programm mit einfacher for Schleife Der Schleifenz hler i wird mit O initialisiert F r MAX ist bereits vom Compiler die Zahl 10 eingesetzt worden die Eintrittsbedingung i 10 ist anfangs erf llt der Schleifenrumpf wird ausgef hrt Dann wird der dritte Teil der or Zeile ausgef hrt n mlich der Schleifen z hler i um 1 erh ht un
312. mmers don t worry about types 1 3 BAUSTEINE EINES QUELLTEXTES 51 Ganze Zahlen In C C gibt es ganze Zahlen mit oder ohne Vorzeichen sowie in halber einfacher oder doppelter L nge int ganze Zahl mit Vorzeichen unsigned int ganze Zahl ohne Vorzeichen short kurze ganze Zahl mit Vorzeichen unsigned short kurze ganze Zahl ohne Vorzeichen long ganze Zahl doppelter L nge mit Vorzeichen unsigned long ganze Zahl doppelter L nge ohne Vorzeichen Die Deklaration von Variablen als ganzzahlig sieht so aus int x y 7 unsigned long anzahl Die L nge der ganzen Zahlen in Bytes ist nicht festgelegt und beim Portieren zu beachten H ufig sind int und long gleich und belegen ein Maschinenwort auf unserer Anlage also 4 Bytes gleich 32 Bits 32 Bit Architektur Festgelegt ist nur die Reihenfolge char lt short lt int lt long Alle Annahmen die dar ber hinausgehen sind Vermutungen die auf einer Maschine zutref fen auf einer anderen nicht Auch die Annahme dass die Typen int und Pointer immer gleich viele Bytes belegen ist schierer Aberglaube Mit dem Aufkommen von 64 Bit Maschinen ist die Diskussion der L nge von Datentypen neu entfacht Beim bergang von 16 auf 32 Bit gegen Ende der siebziger Jahre waren der Kreis der UNIX und C Programmierer und damit das ganze Problem wesentlich kleiner als heute Wenn 128 Bit Maschinen die Regel werden wird sich die Diskussion nochmals wiederholen aller
313. n n 1 for i 1 i lt 10 i printf tZwischen 6lu und 6lu gibt es 6u Primzahlen n xh i 1 xh i h 1 i putsiq printf NtDifferenz 3d kommt 6u mal vor n 1 x d 1 for i 2 i lt dmax i 2 printf NtDifferenz 533 kommt 6u mal vor n qui vds my printf n tGroesste Differenz 1u kommt erstmals bei 1u und 1u vor n dmax d2 d1 time amp zeit3 printf n tDie Rechnung brauchte 1d s zeit2 zeitl printf die Ausgabe 1d s n zeit3 zeit2 1 11 WEITERE C PROGRAMME 153 return 0 Ende Hauptprogramm Funktion zum Testen der Teilbarkeit Parameteruebergabe zwecks Zeitersparnis vermieden x void ttest register int i for i 1 p i p i lt z i if z p i return z teilbar x x p n 2 z prim return Quelle 1 89 C Programm zur Berechnung von Primzahlen mit Pointern anstelle von Array indizes Zur Laufzeit zeigt sich da die meiste Zeit auf die Ausgabe verwendet wird Daher die Programmiererweisheit Eingabe Ausgabe vermeiden Am Algorithmus und seiner Verwirk lichung etwas zu optimieren bringt f r die Gesamtdauer praktisch nichts Die Ausgabe Funktion printf 3 lie e sich durch eine selbstgeschriebene schnellere Funktion ersetzenr unter Abstrichen an die Allgemeing ltigkeit 1 11 7 4 Arrays von Funktionspointern Der Name einer Funktion ohne
314. n Eine zweckm ige Datenstruktur erleichtert das Programmieren und f hrt zu besseren Pro grammen Eine nachtr gliche nderung der Datenstruktur erfordert meist einen gro en Aufwand weil viele Programme oder Programmteile davon betroffen sind Die Namen der Operanden sollen ihre Bedeutung erkl ren erforderlichenfalls ist ihre Bedeutung im Kom mentar oder in einer Aufz hlung festzuhalten 1 3 6 1 Konstanten und Variable Operanden k nnen w hrend des Ablaufs eines Programmes konstant bleiben wie die Zahl oder sich ndern wie die Anzahl der Iterationen zur L sung einer Gleichung oder das 32 gibt die Bezeichnungen Wortsymbol Schl sselwort und reserviertes Wort Gemeint ist in jedem Fall dass das Wort eine bestimmte Zeichenfolge nicht uneingeschr nkt als Namen verwendet werden darf In C d rfen diese W rter au er im Kommentar keines falls f r einen anderen als ihren besonderen Zweck verwendet werden In FORTRAN d rfen diese W rter in Zusammenh ngen die eine Deutung als Schl sselwort ausschlie en auch als Namen verwendet werden Man darf also eine Variable if nennen und in der Zuweisung if 3 wird die Zeichenfolge if als Variable und nicht als Wortsymbol im Sinne von falls verstanden 23KERNIGHAN RITCHIE gebrauchen Objekt im Sinne eines Speicherbereiches auf den mittels eines Namens zugegriffen wird 50 KAPITEL 1 PROGRAMMIEREN IN C C Ergebnis einer Berechnung oder Textsuche Es kommt a
315. n hier printi Ihre Argumentenliste hei t va alist und ist vom Typ dc1 ohne Semiko lon Innerhalb der Funktion brauchen wir einen Pointer pvar auf die Argumente dieser ist vom Typ va_list nicht zu verwechseln mit der Argumentenliste alist Die weiteren Variablen sind unverbindlich Zu Beginn der Arbeit mu das Makro start pvar aufgerufen werden Es initia lisiert den Pointer pvar mit dem Anfang der Argumentenliste Am Ende der Arbeit mu entsprechend mit dem Makro end pvar aufger umt werden Das Makro va arg pvar type gibt das Argument zur ck auf das der Pointer pvar zeigt und zwar in der Form des angegebenen Typs den man also kennen mu Gleichzeitig wird der Pointer pvar eins weiter geschoben Die Zeile format va arg pvar char x weist dem Pointer auf char ormat die Adresse des Formatstrings in der Argumentenliste von printi zu Damit ist der Formatstring wie jeder andere String zug nglich Zugleich wird der Pointer pvar auf das n chste Argument gestellt blicherweise eine Konstante oder Variable Aus der Auswertung des Formatstrings ergeben sich Anzahl und Typen der weite ren Argumente Damit wird auch klar was geschieht wenn die Platzhalter d 6u usw im Format string nicht mit der Argumentenliste bereinstimmen Gibt es mehr Argumente als Platz halter werden sie nicht beachtet Gibt es mehr Platzhalter als Argumente wird irgendein undefinierter Speicherinhalt gelesen unter Umst
316. n Komponenten enthalten und soll m glichst vom Ba sistyp unsigned sein Ein einzelnes Bitfeld darf maximal die L nge eines Maschinenwortes haben es kann also nicht ber eine Wortgrenze hinausragen Bitfelder sind keine Arrays es gibt keinen Index Ebensowenig lassen sich Bitfelder referenzieren amp Operator Bitfelder werden verwendet um mehrere Ja nein Angaben in einem Wort unterzubringen Der Name einer Strukturvariablen ist ein gew hnlicher Variablenname kein Pointer 56 KAPITEL 1 PROGRAMMIEREN IN C C 1 3 6 5 Union Eine Variable des Typs union kann Werte unterschiedlichen Typs aufnehmen zu einem Zeitpunkt jedoch immer nur einen Es liegt in der Hand des Programms ber den augen blicklichen Typ Buch zu f hren In FORTRAN dient die equivalence Anweisung demselben Zweck in PASCAL der variante Record Eine Union belegt so viele Bytes wie der l ngste in ihr untergebrachte Datentyp Die Deklaration einer Variablen als Union sieht aus wie bei einer Struktur union unioneins int i double x char c ux Damit wird ein Unionstyp mit dem Namen unioneins deklariert und zugleich eine Variable ux dieses Typs Auf die jeweilige Variable wird zugegriffen wie auf die Komponenten einer Struktur printf ZdNn ux i printf f n ux x printf ceXn OS Man darf nur jeweils die Variable herausholen die als letzte hineingesteckt worden ist an dernfalls gibt es berraschungen Die Union habe ich noch nie ge
317. n oder Komprimieren zu tun Beim Einbinden einer Bibliothek in den Kompiliervorgang werden genau die ben tigten Funktionen ausgew hlt und ins Programm eingebunden Es gibt Standardbibliotheken die zum Compiler geh ren und von diesem automatisch herangezogen werden Weiter gibt es Standardbibliotheken die zum Compiler geh ren aber eigens ber ei ne Option herangezogen werden m ssen Hierzu z hlt die C Standard Mathematik Bibliothek die die Option 1m beim Compiler Aufruf erfordert Auf dem Markt oder im Netz findet sich eine Vielzahl von Bibliotheken beispielsweise f r numerische Aufgaben oder das X Window System Man kann auch eigene Funktionen in Privatbibliotheken zusammenfassen Das lohnt sich wenn man l ngere Zeit f r ein bestimmtes Thema programmiert 1 5 8 bung Bibliotheken Fassen Sie die Funktionen des Weganalyse Projektes au er main in einer Privatbibliothek zusammen und binden sie diese beim Kompiliervorgang dazu 1 6 KLASSEN 109 1 6 Klassen 1 6 1 Warum C mit Klassen Objektorientiert oder prozedural ist nicht die Programmiersprache sondern die Aufgaben analyse Sie f hrt auf Programmbausteine Module die entweder Objekte oder Prozedu ren Funktionen Prozeduren Subroutinen sind Erst an zweiter Stelle kommen dann die Programmiersprachen die die eine oder andere Denkweise unterst tzen Man kann mit ob jektorientierten Sprachen prozedural aufgebaute Programme schreiben und mit prozed
318. n scheinbar richtiges Ergebnis ausgibt Die Fehlerbehandlung macht oft den gr eren Teil eines Programmes aus und wird h ufig vernachl ssigt Die Sprache C erleichtert diese Aufgabe Ein Programm ist niemals fertig und soll daher leicht zu ndern sein Die Entdeckung von Fehlern die Ber cksichtigung neuer W nsche die Entwicklung der Hardware Bestre bungen zur Standardisierung und Lernvorg nge der Programmierer f hren dazu dass Pro gramme immer wieder berarbeitet werden Kleinere Korrekturen werden durch Patches behoben w rtlich Flicken Das sind Erg nzungen zum Code die nicht gleich eine neue Versi on rechtfertigen F r manche Fehler lassen sich auch ohne nderung des Codes Umgehun gen finden sogenannte Workarounds Nach umfangreichen nderungen m glichst Verbes serungen erscheint eine neue Version des Programmes Ein Programm von dem nicht einmal j hrlich eine berarbeitung erscheint ist tot Jede Woche eine neue Version ist na t rlich auch keine Empfehlung Leichte nderbarkeit beruht auf bersichtlichkeit ausf hr licher Dokumentation und Vermeidung von Hardwareabh ngigkeiten Die bersichtlichkeit wiederum erreicht man durch eine zweckm ige Strukturierung verst ndliche Namenswahl 1 1 GRUNDBEGRIFFE 13 und Verzicht auf besondere Tricks einer Programmiersprache die zwar erlaubt aber nicht allgemein bekannt sind Gerade C erlaubt viel was nicht zur bersichtlichkeit beitr gt nderungen zu er
319. n uns am Beispiel eines C Programmes zur Berechnung von Primzahlen nach dem Divisionsverfahren an wie ein Operator berladen wird prim C C Programm zur Berechnung von Primzahlen zu compilieren mit CC o prim prim C SHeader home debian prog quellen primplus tex v 1 1 1 1 2005 02 06 19 44 00 wu include lt iostream h gt include lt stdio h gt KKKRKK KKK e x x Klassen x class PRIM Definition der Klasse PRIM public nach aussen sichtbar Methoden PRIM int int Default Constructor PRIM amp operator Veberladen von Praefix int get_count Zugriff auf Anzahlen int get_prim Zugriff auf Primzahlen private nicht nach aussen sichtbar Daten int prim_count Anzahl der Primzahlen int prim_number aktuelle Primzahl Methoden x PRIM PRIM int anzahl 1 int primzahl 2 Constructor prim_count anzahl 128 KAPITEL 1 PROGRAMMIEREN IN C C prim_number primzahl Folgende triviale Zugriffsmethoden sind erforderlich da die Variablen prim_count und prim_number privat sind int PRIM get_count return prim_count int PRIM get prim return prim_number Ueberladen des Praefix Operators x KKK KK KKK KKK KK HH HH
320. nd Quelle 1 47 PASCAL Programm das Parameter by value und by reference an PASCAL Funktionen bergibt Sollten Sie die Beispiele nachvollzogen haben m te Ihr Linker in zwei F llen mit ei ner Fehlermeldung unsatisfied symbol output data die Arbeit verweigert haben Die PASCAL Funktionen psv und psr geben etwas auf das Terminal aus Bei getrennt kompilierten Modulen erfordert dies die Zeile import StdOutput Das importierte vorgefertigte PASCAL Modul StdOutput macht von einem Textfile output Gebrauch das letzten Endes der Bildschirm ist Im PASCAL Programm ffnet die Zeile program psummep input output dieses Textfile In C Programmen wird die Datei mit dem Dateipointer stdout ebenso wie in FORTRAN Programmen die Unit 6 automatisch ge ffnet Hinter dem Dateipointer bzw der Unit steckt der Bildschirm Leider sehen wir in bereinstimmung mit unseren Handb chern keinen Weg die PASCAL Datei output mit stdout von C oder der Unit 6 von FORT RAN zu verbinden Wollen wir PASCAL Funktionen in ein C oder FORTRAN Programm einbinden m ssen die Funktionen auf Terminalausgabe verzichten eine Ausgabe in eine Datei w re m glich Pascal Funktion Summe call by value ohne Output Compileraufruf pc c xpsv p module b export function psv x y integer integer implement function psv var z integer begin Z Ze X y Aenderung der Summanden x ie UY 99 PSV 2 end end
321. nehmen in FORTRAN 90 ist es m glich Es bleibt daher bei nur einer Funktion die wie in FORTRAN blich ihre Parameter by reference bernimmt Fortran Funktion Summe call by reference G Compileraufruf 77 c fsr f integer function fsr x y integer x y Z write 6 write 6 Z ty write 6 F Fkt gibt zurueck I8 z Aenderung der Summanden x 66 y 88 fsr z F Fkt mit Uebernahme by reference F Fkt hat uebernommen 216 x y end Quelle 1 36 FORTRAN Funktion die Parameter by reference bernimmt PASCAL Funktionen kennen wieder beide M glichkeiten aber wir werden auf eine ande re Schwierigkeit sto en Vorl ufig sind wir jedoch hoffnungsvoll Pascal Funktion Summe call by value Compileraufruf pc c psv p 84 KAPITEL 1 PROGRAMMIEREN IN C C module b import StdOutput export function psv x y integer integer implement function psv var z integer begin writeln Funktion mit P uebernahme by value writeln P Fkt hat uebernommen x y Zo mov yy writeln P Fkt gibt folgenden Wert zurueck z Aenderung der Summanden x 77 y 99 PSV s 2 end end Quelle 1 37 PASCAL Funktion die Parameter by value bernimmt Pascal Funktion Summe call by reference Compileraufruf pc c psr p module a import StdOutput export function psr var x y integer integer implement function psr var z inte
322. nenleben von der Au enseite streng getrennt Black Box Klassen sind in einer Programmiersprache formulierte Beschreibungen abstrakter Da tentypen Objekte sind Verwirklichungen von Klassen so wie Variable Verwirklichungen von Ty pen sind Eine Klasse oder ein Objekt enth lt Daten data members und Methoden member functions Daten und Methoden sind ffentlich public gesch tzt protected oder privat Die Da ten sind meist privat Mindestens eine Methode mu ffentlich sein sonst n tzt die Klasse nicht viel Aus Klassen k nnen Unterklassen abgeleitet werden die die ffentlichen und gesch tz ten protected Daten und Methoden erben Die Klassen bilden Hierarchien Von einer abstrakten Klasse k nnen nur Unterklassen aber keine Objekte abgeleitet werden Meist in den oberen Etagen der Hierarchie anzutreffen 1 6 5 bung Klassen Es gibt Aufgaben deren Struktur eine Modellierung durch eine Klassenhierarchie nahelegt Bei anderen hinwiederum wirkt die Objektorientierung verkrampft Mit C C sind alle We ge offen berlegen Sie welche Klassen und Objekte man bei der Aufgabe zur Weganalyse zweck m ig einrichtet Sind die Wegstrecken oder die Fahrzeuge Personen als Objekte anzusehen Skizzieren Sie ohne genau auf die Syntax zu achten eine Klassenhierarchie samt Daten und Methoden In dem Beispielprogramm zur Befeuerung von Binnenschiffen kann man sich gut eine Hierarchie von Fahrzeugen und e
323. ng gr ndlich Ein Programmbeispiel dazu findet sich im Abschnitt 1 11 7 2 Poin ter auf Typ void xread c auf Seite 148 Merke Es gibt Arrays of characters die keine Strings sind n mlich solche die nicht mit dem ASCII Zeichen Nr 0 abgeschlossen sind Sie m ssen als Array angesprochen werden wie ein Array von Zahlen Merke zweitens Ein einzelnes Zeichen kann als Zeichen character a oder als String array of characters a dargestellt werden F r ein Programm sind das verschiedene Din ge Strukturen Eine Struktur auch als Verbund und in PASCAL als Record bezeichnet vereint Komponenten ungleichen Typs im Gegensatz zum Array Eine Ordnung der Kompo nenten liegt nicht vor ebenfalls anders als beim Array Strukturen d rfen geschachtelt wer den aber nicht sich selbst enthalten keine Rekursion M glich ist jedoch dass eine Struktur einen Pointer auf sich selbst enth lt ein Pointer ist ja nicht die Struktur selbst womit Ver kettungen hergestellt werden Das Schl sselwort lautet struct 1 3 BAUSTEINE EINES QUELLTEXTES 55 Ein typisches Beispiel f r eine Struktur ist eine Personal oder Mitgliederliste bestehend aus alphanumerischen und numerischen Komponenten Mit den numerischen wird gerech net auf die alphanumerischen werden Stringfunktionen angewendet Telefonnummern oder Postleitzahlen sind alphanumerische Gr en da Rechenoperationen mit ihnen sinnlos sind Wir erzeugen einen Strukturtyp ohne eigenen Namen
324. ngehenden Punkte schlecht erledigt wor den sind kann auch ein Meister in C C nichts mehr retten Der Zeitbedarf der einzelnen Stufen ist schwierig abzusch tzen da Kleinigkeiten manch mal f rchterlich aufhalten Lassen wir Betrieb und Pflege als zeitlich unbegrenzt heraus und nehmen wir an dass das Schreiben der Dokumentation parallel erfolgt so lassen sich ungef hr folgende Anteile als Ausgangswerte f r eine Zeitplanung nehmen e Aufgabenanalyse 20 96 Entwurf 30 Codierung 20 96 e Test 30 Wer Softwareprojekte zu seinem Broterwerb macht sollte ein Tagebuch oder Protokoll f h ren um Erfahrungen auf dem Papier festzuhalten und sie beim n chsten Projekt zu verwer ten Bei der Codierung rechnet man mit 60 Zeilen Programmcode ohne Kommentar und Leer zeilen pro Tag und Programmierer Das sind zwei bis drei Seiten DIN A4 mit Kommentar und Leerzeilen Gleichzeitig ist das die Obergrenze f r ein Programmmodul in C eine Funk tion Haben Sie f r ihr Projekt 100 Arbeitstage Zeit und einen Programmierer so ergeben sich 20 Arbeitstage r die Codierung gleich 20 Modulen zu je 60 Zeilen Code Das sind grobe Werte aber sie reichen f r eine erste Absch tzung aus Bei Texten kann man von einer Seite pro Tag ausgehen Liegt das Rohmaterial samt al len Abbildungen fertig vor kommt man auch auf zehn Seiten pro Tag Umgekehrt k nnen schwierige Rechnungen oder das Beschaffen exotischer Literatur ein Manuskript beliebig verz
325. ngin unsigned long Wert um Filebehandlung Ein remove l scht File rename ndert Namen eines Files und Ausgabe clearerr l scht Fehlermeldung eines Filepointers fclose schlieft Filepointer fflush leert Puffer eines Filepointers 202 ANHANGD C LEXIKON fgetc liest Zeichen von Filepointer fgetpos ermittelt Stand des Lesezeigers fgets liest String von Filepointer fopen ffnet Filepointer fprintf schreibt formatiert nach Filepointer fputc schreibt Zeichen nach Filepointer fputs schreibt String nach Filepointer fread liest Bytes von Filepointer freopen ersetzt ge ffneten Filepointer fscanf liest formatiert von Filepointer fseek setzt Lesezeiger auf bestimmte Stelle fsetpos setzt Lesezeiger auf bestimmte Stelle ftell ermittelt Stellung des Lesezeigers fwrite schreibt Bytes nach Filepointer getc liest Zeichen von Filepointer getchar liest Zeichen von stdin gets liest String von Filepointer printf schreibt formatiert nach stdout putc schreibt Zeichen nach Filepointer putchar schreibt Zeichen nach stdout puts schreibt String nach Filepointer rewind setzt Lesezeiger auf Fileanfang scanf liest formatiert von stdin setbuf ordnet einem Filepointer einen Puffer zu setvbuf ordnet einem Filepointer einen Puffer zu sprintf schreibt formatiert in einen String sscanf liest formatiert aus einem String tempnam erzeugt einen tempor ren Filenamen tmpfile erzeugt ein tempor res Fil
326. ngsaufgaben K Schmaranz Softwareentwicklung in C Springer Berlin Heidelberg 2002 400 S 242 13 ANHANG H ZUM WEITERLESEN K Schmaranz Softwareentwicklung in C Springer Berlin Heidelberg 2003 570 S B Stroustrup The C Programming Language bzw Die C Programmiersprache Addison Wesley Boston Bonn 2000 1024 S Lehrbuch f r Fortgeschrittene der Klassiker f r C Netze allgemein Internet OSI Newsgruppen comp infosystems comp internet comp protocols alt best of internet alt bbs internet alt internet de comm internet de comp infosystems EFF s Guide to the Internet http www eff org pub Publications EFFN Mer Guide Einf hrung in die Dienste des Internet S Carl Mitchell J S Quarterman Practical Internetworking with TCP IP and UNIX Addison Wesley Boston 1993 432 S D E Comer Internetworking with TCP IP 4 B nde Prentice Hall Englewood Cliffs I Band 1991 550 S II Band 1991 530 S 88 DM IIIa Band BSD 1993 500 S IITb Band AT amp T 1994 510 S Prinzipien Protokolle und Architektur des Internet H Hahn R Stout The Internet Complete Reference Osborne MacGraw Hill Berkeley 1994 818 S Das Netz und seine Dienste von Mail bis WWW Lehrbuch und Nachschlagewerk f r Benutzer des Internet C Hunt TCP IP Netzwerk Administration O Reilly Sebastopol 1998 632 S B P Kehoe Zen and the Art of the Internet ftp ftp ciw uni karlsruhe de pub docs net gener
327. nktionen zum Gebrauch durch Programmierer und nicht etwa nur f r interne Zwecke bestimmt sind Input Output F r die Ein und Ausgabe stehen in C keine Operatoren zur Verf gung sondern nur die Systemaufrufe des Betriebssystems unter UNIX open 2 write 2 read 2 usw und die Standardfunktionen aus der zum Compiler geh renden Biblio thek In der Regel sind die Funktionen vorzuziehen da die Programme dann leichter auf andere Systeme bertragen werden k nnen Die Eigenheiten der Systeme werden durch die Bibliothek verdeckt In diesem Fall ist im Programmkopf stets die Include Datei stdio h einzubinden include lt stdio h gt Diese Zeile ist fast in jedem C Programm zu finden In der Standardbibliothek stehen rund 40 Funktionen zur Ein und Ausgabe bereit von denen die bekanntesten printf 3 zur formatierten Ausgabe nach stdout und scanf 3 zur formatierten Eingabe von st din sind Stringfunktionen Strings sind in C Arrays of Characters abgeschlossen mit dem ASCII Zeichen Nr 0 also nichts Besonderes Trotzdem machen sie wie in vielen Programmierspra chen Schwierigkeiten wenn man ihre Syntax nicht beachtet In der Standard C Bibliothek steht eine reiche Auswahl von Stringfunktionen bereit Gewarnt wird vor der Funktion gets 3 die einen String von stdin in ein Array einliest und dabei einen Uberlauf ver ursachen kann Grunds tzlich soll man beim Arbeiten mit Strings den Fall ber cksichtigen dass ein String gelegentli
328. nn dazu 100 addiert und schlie lich dem gesamten Aus druck der Wert 999 zugewiesen j hat also nach den Operationen den Wert 111 i den Wert 999 der ausgegeben wird Der Komma Operator wird oft im Kopf von or Schleifen verwen det Das Komma zwischen Variablennamen in Deklarationen oder in einer Argumentliste ist kein Operator Die Reihenfolge der Abarbeitung solcher Listen ist unsicher Der sizeof Operator gibt die Gr e des Operanden in Bytes zur ck Der Operand kann eine Variable ein Ausdruck oder ein Datentyp sein auch ein zusammengesetzter Ein Aus druck wird dabei nicht ausgewertet Dagegen k nnen Funktionen oder Bitfelder nicht als Operand von sizeof auftreten Mit Hilfe des Operators vermeidet man Annahmen ber die Gr e von Variablen bei Speicherreservierungen das Programm wird portabler Der Aus druck sizeof x liefert die Gr e von x in Bytes als vorzeichenlose Ganzzahl zur ck sizeof wird w hrend der bersetzung ausgewertet nicht jedoch vom Pr prozessor und verh lt sich zur Laufzeit wie eine konstante ganze Zahl 72 KAPITEL 1 PROGRAMMIEREN IN C C 1 3 7 10 Vorrang und Reihenfolge Es gibt in C C hnlich wie in der Mathematik genaue Regeln ber den Vorrang prece dence der Operatoren Es ist jedoch nicht sicher dass alle C Compiler sich genau an die Vorgaben des ANSI Vorschlags halten Zudem hat man beim Programmieren meist nicht al le Regeln im Kopf so dass es besser ist die Ausdr cke durch rund
329. nstrahldrucker kommen auf den Markt GNU Projekt von RICHARD MATTHEW STALLMAN gegr ndet Der IBM PC AT mit Prozessor Intel 80 286 und MS DOS 3 0 kommen heraus Siemens steigt in UNIX Sinix ein Die Universit t Karlsruhe wird Email Relay f r Deutschland zum Computer Science Net CSNet in den USA Als erste Mail erh lt Prof ZORN U Karlsruhe einen Gru vom CSNet Entwicklung des X Window Systems am MIT MS Windows 1 0 IBM 3090 und IBM Token Ring Netz XLink an der Universit t Karlsruhe stellt als erstes deutsches Netz eine Verbindung zum nordamerikanischen ARPANET her Hewlett Packard bringt den ersten Laserjet Drucker heraus Weltweit etwa eine halbe Million UNIX Systeme und 3000 ffentliche Datenbanken Mit dem Computer Investitionsprogramm des Bundes und der L nder CIP kommen mehrere HP 9000 550 unter UNIX an die Universit t Karlsruhe Microsoft XENIX ein UNIX f r den IBM PC AT IBM bringt die PS 2 Reihe unter MS OS 2 heraus Weltweit mehr als 5 Millionen Apple Computer und etwa 100 Millionen PCs nach Vorbild von IBM Das MIT ver ffentlicht das X Window System Version 11 X11 In Berkeley wird die RAID Technologie entwickelt Beginn des baden w rttembergischen BelWue Netzes JARKKO OIKARINEN Finnland entwickelt den IRC Das Karlsruher Campusnetz KARLA wird durch das Glasfasernetz KLICK ersetzt VBN Strecke Karlsruhe Stuttgart im BelWue Netz Frankreich geht ans Internet INRIA Rocquencourt bei Paris
330. nt des Ergebnisses Auf Variablen kann mittels ihres Namens oder ihrer Speicheradresse Hausnummer zu gegriffen werden Die Speicheradresse braucht nicht absolut oder relativ zu einem Anfangs wert bekannt zu sein sondern ist wiederum ber einen Namen ansprechbar den Namen eines Pointers Genaugenommen geh ren die Adressen zur Hardware und sind f r den Pro grammierer fast immer bedeutungslos w hrend die Pointer Operanden der Programmier sprache sind denen zur Laufzeit als Wert Adressen zugewiesen werden Deshalb werden sie auch als Adressvariable bezeichnet Pointer haben Namen Adressen sind hexadezima le Zahlen Das Arbeiten mit Adressen beziehungsweise Pointern erlaubt gelegentlich eine elegante Programmierung ist manchmal unvermeidlich und im brigen lter als die Ver wendung von Variablennamen Man muss nur stets sorgf ltig die Variable von ihrem Pointer unterscheiden Wenn man Arrays von Pointern auf Strings verwaltet wird das schnell un bersichtlich Es ist gute Praxis aber nicht zwingend Pointernamen mit einem p beginnen oder aufh ren zu lassen Ein Pointer ist immer ein Pointer auf einen Variablentyp unter Umst nden auf einen weiteren Pointer Typlose Pointer gibt es nicht in C Der Wert eines Pointers ist keine Ganz zahl int und darf nicht wie eine Ganzzahl behandelt werden obwohl letzten Endes die Speicheradressen Hausnummern ganze Zahlen sind Die zul ssigen sinnvollen Operatio nen sind andere als bei gan
331. ntsprechenden Klassen vorstellen wobei an der Spitze die Klasse der Hohlk rper von nicht ganz unbedeutender Gr e steht Auch bei dem Beispiel des Vokabeltrainers ist eine Hierarchie denkbar Wie k nnten die Klassen Daten und Methoden aussehen Welche Vorteile h tte hier die Objektorientierung vor der prozeduralen Denkweise 1 7 KLASSEN BIBLIOTHEKEN 117 1 7 Klassen Bibliotheken 1 7 1 C Standardbibliothek Standardbibliotheken sind eine Erg nzung der Compiler ohne die man nicht weit kommt Die Benutzer betrachten sie als festen Bestandteil der Compiler obwohl sie im strengen Sinn nicht Bestandteil der Sprache sind Zu C geh rt ebenso wie zu C eine Standardbibliothek deren Umfang und Funktionalit t durch eine ISO ANSI Norm festgelegt ist Im wesentlichen geh ren dazu die C Standardbibliothek damit man sie nicht extra zu nennen braucht Input Output Klassen wie basic ios String Klassen wie basic string numerisches Klassen wie complex Klassen zur Ausnahmebehandlung wie exception sonstige Klassen wie pair und Klassen zur Lokalisation Anpassung an rtliche Gege benheiten die Standard Template Library STL Die C Standardbibliothek ist wesentlich umfangreicher als die C Standardbibliothek sie erfordert mehr Zeit zum Einarbeiten aber sie spart viel M he Es ist Zeitverschwendung die Klasse Rad neu zu erfinden Die Standard Template Library spielt eine besondere Rolle weil sie einige neue Begr
332. nutzt wer den begrenzt nur durch den Arbeitsspeicher Es wird nicht mehr Speicher von den Daten belegt als wirklich ben tigt wird Beim Zugriff auf Arrays wird der Indexbereich zur Lauf zeit gepr ft um Programmabst rze durch unzul ssige Speicherzugriffe memory faults zu verhindern Hier ein Beispiel f r die dynamische Gr en nderung einer Matrix int mp m cout Dimensionen n m eingeben cin gt gt gt gt imatrix B C A n m A 1 1 Aln m x Resize B m n B 1 1 B m n C A zs B TE Sepp Mit Hilfe des C ostream Objektes cout wird ein String nach stdout geschrieben dann werden mit cin die beiden Indexgrenzen n und m von stdin eingelesen Die Vereinbarung eines Vektors oder einer Matrix ohne Angabe der Indexgrenzen liefert einen Vektor mit einer Komponente oder eine Matrix mit je einer Zeile und Spalte Speicher f r diese Objekte wird erst an einer sp teren Stelle im Programm zur Laufzeit zugewiesen Die Matrix A wird gleich in der richtigen Gr e angelegt Die Resize Anweisung bringt die Matrix B zur Laufzeit an dieser Programmstelle auf die erforderliche Gr e Die Belegung von Speicherplatz f r einen Vektor oder eine Matrix kann auch implizit ohne eine ausdr ckliche Anweisung wie Resize durch eine Zuweisung erfolgen Falls die Indexgrenzen des Objektes auf der rechten Seite einer Zuweisung nicht mit den Indexgrenzen des Objektes auf der linken Seit
333. o Fkt verwendet werden sollen noch DTERMINFO anhaengen include curses h enthaelt stdio h ifdef TERMINFO include lt term h gt x nur fuer terminfo endif int main argc argv int argc char xargv int i if argc gt 1 Files leeren nicht loeschen x for i 1 i lt argc i if access argv i 0 close creat argv i 0 else printf File s unzugaenglich n argv i else ifdef TERMINFO Za Bildschirm leeren terminfo setupterm 0 1 0 putp clear_screen resetterm else Bildschirm leeren curses initscr refresh endwin endif return 0 Quelle 1 82 C Programm zum Leeren des Bildschirms oder von Dateien Das Kommando usr local bin xclear ist eine recht praktische Erweiterung von bin clear Die Funktion setupterm ermittelt vor allem den Terminaltyp putp schickt die Steuersequenz zum Terminal und reset_shell_mode bereinigt alle Dinge die setupterm aufgesetzt hat Mit diesen terminfo Funktionen soll man nur in ein fachen F llen wie dem obigen arbeiten in der Regel sind die intelligenteren curses 3 Funktionen vorzuziehen 1 11 WEITERE C PROGRAMME Im folgenden Beispiel verwenden wir curses 3 Funktionen zur Bildschirmsteuerung zum Erzeugen eines Hilfe Fensters help c Programm mit curses Funktionen x Compiler cc o help help c lcur
334. ogrammieren um den Terminaltyp nicht zu sorgen Andererseits kann man nichts verwirklichen was in terminfo nicht vorgesehen ist Grafik zum Beispiel 1 11 6 Mehr oder weniger zuf llig Man braucht im Leben manchmal Zufallszahlen random number zum Beispiel wenn eine Reihe von Vokabeln bunt durcheinander abgefragt werden soll Sind die Anforderungen nicht so hoch geschraubt da man erst einmal ein Philosophisches Seminar ber den Begriff Zufall absolvieren mu reichen einige Funktionen aus der C Standard Bibliothek Das folgende Programm erzeugt eine Folge mehr oder weniger zuf lliger nat rlicher Zahlen und gibt sie auf stdout aus random c zur Erzeugung von Zufallszahlen MAX Zufallszahlen von 1 bis MOD define MAX 100 define MOD 200 include lt stdio h gt include lt time h gt include lt stdlib h gt int main TIE Le Xs S int time time t 0 srand unsigned s for i 0 i lt MAX i 1 11 WEITERE C PROGRAMME 145 r 1 rand MOD printf dNn x srandom unsigned s for i 0 i lt MAX i r 1 random MOD printf d n return 0 Quelle 1 84 C Programm zur Erzeugung von MAX Zufallszahlen im Bereich von 1 bis MOD Wir definieren die Anzahl MAX von Zufallszahlen die wir brauchen sowie den Modulus MOD der die gr te Zufallszahl bestimmt Weiter binden wir die Include Dateien stdio h f r die F
335. ontinue et qd puts Dezimalzahl muss gt 0 sein continue ifdef DEBUG printf nb x d n n b x endif for i 0 i lt MAX i Array nullen x r i 0 umwandeln b x r rechnen xausgeben printf Die Dezimalzahl d lautet zur Basis d x b for 1 MAX 1 i gt 0 i printf d ela 1 134 KAPITEL 1 PROGRAMMIEREN IN C C x Ende while Schleife mit control c verlassen return 0 Funktion umwandeln x int umwandeln int b int z int xr int i j yi while z 0 y lt z itt y y i eins zuviel ifdef DEBUG printf y i Sd n y i endif for j 0 y lt z J Soe y ifdef DEBUG printf z d j d n n z J endif r i J x Ausgabe in Array Ende while return 0 Quelle 1 75 C Programm itox c zur Umrechnung von Dezimalzahlen auf eine andere Basis 1 9 4 Memo Pr prozessor m ersten Schritt des Kompiliervorgangs durchl uft die Programmquelle den Pr pro zessor Der Pr prozessor entfernt Kommentar ersetzt symbolische Konstanten und Makros zeichengetreu f gt den Inhalt von Include Dateien ein und ber cksichtigt bzw verwirft Programmzeilen die bedingt zu kompilieren sind 1 9 5 bung Pr prozessor Erg nzen Sie das Programm zur Weganalyse dahingehend da es in der DEBUG Version
336. or 0 212 Dom ne Bridge Email Baum Internet Split Mini Cut 2B 2B Shell Slip ANHANG E KARLSRUHER TEST Geist 0 Bereich 2 Blume 0 Kartenspiel 1 internationales Computernetz 0 Verbindung zweier Computernetze 2 Glasur 1 elektronische Post 2 Sultanspalast 0 was im Wald Wurzel unten 1 was auf einem Schiff keine Wurzel 1 was aus der Informatik Wurzel oben 2 Schule mit Schlafgelegenheit 0 Zwischenraum 0 Weltweites Computernetz 2 UNIX Kommando 2 kantige Steinchen 0 Stadt in Dalmatien 1 Damenoberbekleidung 1 kleiner Computer 2 Frau von Mickey Mouse 0 Herrenoberbekleidung 1 Colonia Ulpia Traiana 1 UNIX Kommando 2 Parallelprozessor 0 Assembler Befehl 0 ein Wort Hamlets 2 Filmschauspielerin Maria S 0 Kommando Interpreter 2 Mineral l Gesellschaft 1 Unterbekleidung 1 Schlupfschuh 0 Internet Protokoll 2 213 Di resis Durchfall 0 Diakritisches Zeichen Umlaute 2 Ern hrungslehre 0 Space Bar Kneipe im Weltraum www spacebar com 0 Ma einheit f r den Druck im Weltraum 0 Gr te Taste auf der Tastatur 2 Popper Popcorn R ster 0 Mail Programm 2 Philosoph aus Wien 1 Rohling W ster Kerl 1 Noch zu beschreibende CD DVD 2 Rohkost Liebhaber 0 Schleife Kleidungsst ck 1 Schlitterbahn 1 Kontrollanweisung eines Programmes 2 Alex Altlasten Expertensystem 1 Automatic Lo
337. otyping iti Eee ev RS ngo a Rettore 1 1 11 1 1 12 Memo Grundbegriffe 1 1 13 bung Grundbegriffe 2 0 ae RE Er aan 12 Programmers Workbench 12 1 Nochmals die Editoren 1 2 2 Compiler und Linker ccom ld 1 2 8 Unentbehrliceh make e 12 4 3 12 5 Profiler time gprof 1 2 6 Archive Bibliotheken ar 1 2 7 Weitere 1 2 8 Versionsverwaltung mit RCS SCCS und 8 1 2 9 Systemautr fe 2 1 a es ee Rte 1 2 9 1 Was sind Systemaufrufe 1 2 9 2 Beispiel Systemzeit 8 1 2 9 8 Beispiel Datei Informationen access stat open close 1 2 9 4 Beispiel Prozesserzeugung exec fork 1 2 10 Begriffe Programmers Workbench 1 2 11 Memo Programmer s Workbench 1 2 12 1 2 13 Fragen Programmers 13 Bausteine eines Quelltextes 13 15 STIBerslglbur a S on accen CS doute E RUE ROS De OE ue lo tetra ew che che 1 3 2 Syntax Diagramme ee EN
338. ouble sind Gleitkommarechnungen sind aufwendiger als Rechnungen mit ganzen Zahlen und ha ben zudem noch T cken infolge von Rundungsfehlern Eine Gleitkomma Null ist nicht immer 1 11 WEITERE C PROGRAMME 141 wirklich null Wer mit Geldbetr gen rechnet sollte mit ganzzahligen Centbetr gen anstel le von gebrochenen Eurobetr gen arbeiten Wenn schon mit Gleitkommazahlen gerechnet werden mu und der Speicher ausreicht ist der Typ double vorzuziehen der intern aus schlie lich verwendet wird Von zwei m glichen Operationen ist immer die einfachere zu w hlen Beispielsweise ist eine Addition einfacher als eine Multiplikation eine Multiplikation einfacher als eine Potenz und eine Bitverschiebung einfacher als eine Multiplikation mit 2 Eine Abfrage if x lt sqrt y schreibt man besser if x x y Manchmal kann man durch Umstellen einer Formel die Anzahl der Rechenschritte verrin gern Ob man mehrfach ben tigte Zwischenergebnisse speichert oder besser jedesmal neu berechnet ist nicht allgemein zu entscheiden Kleine Funktionen lassen sich durch Makros ersetzen die vom Pr prozessor in In line Code umgewandelt werden Damit erspart man sich den Funktionsaufruf samt Parameter bergabe Der ausf hrbare Code wird geringf gig l nger Enth lt eine Schleife nur einen Funktionsaufruf ist es besser die Schleife in die Funktion zu verlegen da jeder Funktionsaufruf Zeit kostet Die ma volle Verwendung globaler Variabler ver
339. oundation with no Invariant Sections no Front Cover Texts and no Back Cover Texts A copy of the license is included in the section entitled GNU Free Documentation License 224 ANHANG F GNU LIZENZEN If you have Invariant Sections Front Cover Texts and Back Cover Texts replace the with Texts line with this with the Invariant Sections being LIST THEIR TITLES with the Front Cover Texts being LIST and with the Back Cover Texts being LIST If you have Invariant Sections without Cover Texts or some other combination of the three merge those two alternatives to suit the situation If your document contains nontrivial examples of program code we recommend releasing these examples in parallel under your choice of free software license such as the GNU Gene ral Public License to permit their use in free software G Zeittafel Ausf hrlichere Angaben sind den im Anhang Zum Weiterlesen in Abschnitt Geschichte auf Seiete aufgef hrten Werken zu entnehmen Die meisten Errungenschaften entwickelten sich ber manchmal lange Zeitspannen so dass vor einige Jahreszahlen um etwa zu setzen ist 10E8 2000 400 20 600 1200 1550 1617 1623 1642 1674 1714 1801 1821 1840 1847 1861 1873 1876 1877 1885 1890 1894 Der beliebte Tyrannosaurus hatte zwei Finger an jeder Hand und rechnete vermutlich im Dualsystem wenn tiberhaupt Die Babylonier verwenden fiir besondere Aufgaben ein gemischtes
340. p XCreatePixmap mydisplay DefaultRootWindow mydisplay 400 200 DefaultDepth mydisplay myscreen GC creation and initialization x mygcl XCreateGC mydisplay mywinl 0 0 mygcl2 XCreateGC mydisplay mywin2 0 0 164 KAPITEL 1 PROGRAMMIEREN IN C C newgc XCreateGC mydisplay mywin2 0 0 determination of default color map for a screen x cmap DefaultColormap mydisplay myscreen yellow red 65535 yellow green 65535 yellow blue 0 allocation of a color cell if XAllocColor mydisplay cmap amp yellow 0 fprintf stderr Cannot specify color exit 2 allocation of color cell using predefined color name x if XAllocNamedColor mydisplay cmap red amp exact amp colorl 0 fprintf stderr Cannot use predefined color exit 3 if XAllocNamedColor mydisplay cmap blue amp exact amp color2 0 fprintf stderr Cannot use predefined color exit 3 if XAllocNamedColor mydisplay cmap green amp exact amp color3 0 fprintf stderr Cannot use predefined color exit 3 XSetWindowBackground mydisplay mywinl color2 pixel changing the background of window XSetWindowBackground mydisplay mywin2 color3 pixel XSetBackground mydisplay mygcl color2 pixel x setting foreground attribute in GC structure XSetForeground mydisplay mygcl yellow pixel setting backg
341. pt Da von configure alles Weitere abh ngt sollte man sich die zugeh rige Protokoll Datei con ig log ansehen auch wenn anscheinend keine Probleme aufgetreten sind Statt make clean kann man auch make distclean versuchen das r umt noch gr nd licher auf so da hinterher wieder mit configure ein Neubeginn m glich ist 1 2 4 Debugger xdb gdb Programme sind Menschenwerk und daher fehlerhaft Es gibt keine M glichkeit die Feh lerfreiheit eines Programmes festzustellen oder zu beweisen au er in trivialen oder idealen F llen Die Fehler lassen sich in drei Klassen einteilen Verst e gegen die Regeln der jeweili gen Programmiersprache hei en Grammatikfehler oder Syntaxfehler Sie f hren bereits zu einem Abbruch des Kompiliervorgangs und lassen sich schnell lokalisieren und beheben Der C Syntax Pr fer lint ist das beste Werkzeug zu ihrer Entdeckung wihle statt while w re ein einfacher Syntaxfehler Fehlende oder unpaarige Klammern sind auch beliebt des halb enth lt der vi 1 eine Funktion zur Klammerpr fung Unzul ssige Operationen mit Pointern sind ebenfalls an der Tagesordnung Geht es um Texte so fallen Tippfehler und Grammatikfehler in diese Klasse Falls das Programm die Kompilation ohne Fehlermeldung hinter sich gebracht hat star tet man es Dann melden sich die Laufzeitfehler die unter Umst nden nur bei bestimmten und wom glich seltenen Parameterkonstellationen auftreten Ein typischer Laufzeitfehler ist di
342. r E Dyson Release 2 1 A Design for Living in the Digital Age Petersen Hamburg 2000 370 S D R Hofstadter G del Escher Bach ein Endloses Geflochtenes Band dtv Klett Cotta M nchen 1992 844 S J Ladd Computer Informationen und Verantwortung in Wissenschaft und Ethik herausgegeben von H Lenk Reclam Band 8698 Ph Reclam Stuttgart H Lenk Chancen und Probleme der Mikroelektronik und K nnen Informationssysteme moralisch verantwortlich sein in Hans Lenk Macht und Machbarkeit der Technik Reclam Band 8989 Ph Reclam Stuttgart 1994 152 S P Schefe u a Informatik und Philosophie BI Wissenschaftsverlag Mannheim 1993 326 S 18 Aufs tze verschiedener Themen und Meinungen K Steinbuch Die desinformierte Gesellschaft Busse Seewald Herford 1989 269 S vergriffen J Weizenbaum Die Macht der Computer und die Ohnmacht der Vernunft Computer Power and Human Reason From Judgement to Calculation Suhrkamp Taschenbuch Wissenschaft 274 Frankfurt Main 1990 369 S H Zemanek Das geistige Umfeld der Informationstechnik Springer Berlin Heidelberg 1992 303 S Zehn Vorlesungen ber Technik Geschichte und Philosophie des Computers von einem der Pioniere Zeitschriften ct Verlag Heinz Heise Hannover vierzehnt gig f r alle Fragen der Computerei technisch http www ix de IX Verlag Heinz Heise Hannover monatlich f r Anwender von Multi User Systemen technisch http www ix de
343. r prozessor Anweisungen siehe Ab schnitt 1 9 Pr prozessor auf Seite 129 aus Ruft man den Compiler mit der Option P auf so erh lt man die Ausgabe des Pr prozessors in einer lesbaren Datei mit der Kennung i Der eigentliche Compiler ccom 1 bersetzt den Quellcode in maschinenspezifischen les baren Assemblercode Die Compileroption s liefert diesen Code in einer Datei mit der Ken nung s Bei einem einfachen Programm sollte man sich einmal das Vergn gen g nnen und den Assemblercode anschauen Der Assembler ist ein zweiter bersetzer der Assemblercode in Maschinensprache ber setzt Mit der Compileroption c erh lt man den Maschinencode Objektcode relocatable code in einer nicht lesbaren Datei mit der Kennung o Gro e Programme werden in mehrere Dateien aufgeteilt die einzeln kompiliert werden aber nicht einzeln ausf hrbar sind weil erst das Programm als Ganzes einen Sinn ergibt Das Verbinden der einzeln kompilierten Dateien zu einem ausf hrbaren Programm besorgt der Binder oder Linker Die Compileroption c unterdr ckt das Linken und erzeugt eine nicht lesbare Datei mit der Kennung o Unter UNIX werden blicherweise Pr prozessor Compiler Assembler und Linker von einem Compilertreiber aufgerufen so dass der Benutzer nichts von den vier Schritten be merkt Man arbeitet mit dem Treiber cc 1 gcc 1 oder CC 1 und erh lt ein ausf hrbares Programm Im Alltag meint man den Treiber wenn man vom Compiler spricht
344. r C Programme D Gries The Science of Programming Springer Berlin Heidelberg 1981 366 S Grunds tzliches zu Programmen und ihrer Pr fung mit praktischer Bedeutung R H G ting M Erwig bersetzerbau Springer Berlin Heidelberg 1999 368 S 240 12 ANHANG H ZUM WEITERLESEN M Marcotty H Ledgard The World of Programming Languages Springer Berlin Heidelberg 1987 360 S S Pfleeger Software Engineering The Production of Quality Software Macmillan 1991 480 S I W Ricketts Managing Your Software Project A Student s Guide Springer London 1998 103 S Detaillierte Anweisung an Studenten zur Planung Durchf hrung und berwachung von Projekten R W Sebesta Concepts of Programming Languages Benjamin Cummings Redwood City 1993 560 S I Sommerville Software Engineering Addison Wesley Boston 1992 688 S Wie man ein Programmierprojekt organisiert Werkzeuge Methoden sprachenunabh ngig N Wirth Systematisches Programmieren Teubner Stuttgart 1993 160 S Allgemeine Einf hrung ins Programmieren PASCAL nahe Programmieren in C C Objective C Newsgruppen comp lang c comp std c comp lang object comp lang c comp lang objective c comp std c de comp lang c de comp lang c G Booch Object Oriented Analysis and Design with Applications Benjamin Cummings Redwood City 1994 590 S U Breymann Designing Components with the C STL Addison Wesley Boston 2000 320 S
345. r POSIX Standard offen l sst ob diese vom Betriebssystem zur Verf gung gestellten Funktionen als Systemaufrufe oder als Bibliothek verwirklicht sind Auf jeden Fall geh ren sie zum Betriebssystem nicht zum Compiler Die Unterscheidung spielt eine Rolle wenn man f r verschiedene Betriebssysteme und oder Compiler program miert Der Programmierer muss wissen woher seine Funktionen stammen In Sektion 3 finden sich vorgefertigte Unterprogramme Subroutinen oder Stan dardfunktionen standard function fonction l mentaire f r h ufig vorkommende Auf gaben F r den Anwender besteht kein Unterschied zu den Systemaufrufen Streng genom men geh ren diese Standardfunktionen jedoch zu den jeweiligen Programmiersprachen zum Compiler und nicht zum Betriebssystem Der Kreis der Standardfunktionen ist beliebig er g nzbar Um den Benutzer zu verwirren sind die Systemaufrufe und die Standardfunktionen in einer Funktionsbibliothek 1ib libc a und andere vereinigt Die Aufgabenverteilung zwischen Schl sselw rtern Systemaufrufen und Standardfunk tionen ist in gewissem Umfang willk rlich Systemaufrufe erledigen Aufgaben die aus dem Aufbau und den kennzeichnenden Eigenschaften des Betriebssystems herr hren bei UNIX also in erster Linie Ein und Ausgabe auf unterster Stufe Umgang mit Prozessen Umgang mit dem Datei System Sicherheitsvorkehrungen Das ffnen einer Datei zum Lesen oder Schreiben ist Sache eines Systemaufruf
346. r this free software If the software is modified by someone else and passed on we want its recipients to know that what they have is not the original so that any problems introduced by others will not reflect on the original authors reputations Finally any free program is threatened constantly by software patents We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses in effect making the program proprietary To prevent this we have made it clear that any patent must be licensed for everyone s free use or not licensed at all The precise terms and conditions for copying distribution and modification follow GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING DISTRIBUTION AND MODIFICATION 214 F1 GNU GENERAL PUBLIC LICENSE 215 0 This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License The Program below refers to any such program or work and a work based on the Program means either the Program or any derivative work under copyright law that is to say a work containing the Program or a portion of it either verbatim or with modifications and or translated into another language Hereinafter translation is included without limitation in the term modification Each licensee is addressed as Di 2 you Activities other than copy
347. r w h rend der Ausf hrung des Programmes zur Laufzeit Der zweite Weg wird als statische Bindung bezeichnet der dritte als dynamische Bindung Die Gr e einer Ganzzahl 2 By tes 4 Bytes ist durch den Compiler gegeben Die Gr e eines Arrays k nnte im Programm festgelegt sein oder w hrend der Ausf hrung berechnet werden Es ist auch denkbar aber in C nicht zugelassen den Typ einer Variablen erst bei der Ausf hrung je nach Bedarf zu bestimmen Einen Weg zur ck vom ausf hrbaren Programm zum Quellcode gibt es nicht Das u Berste ist mit einem Disassembler aus dem ausf hrbaren Code Assemblercode zu erzeu gen ohne Kommentar und typografische Struktur Nur bei kurzen einfachen Programmen ist dieser Assemblercode verst ndlich 1 1 7 Qualit t und Stil Unser Ziel ist ein gutes Programm Was hei t das im einzelnen Ein Programm soll selbstver st ndlich fehlerfrei sein in dem Sinn dass es aus zul ssigen Eingaben richtige Ergebnisse erzeugt Au er in seltenen F llen l sst sich die so definierte Fehlerfreiheit eines Programms nicht beweisen Man kann nur nach einer Vielzahl von Tests und l ngerem Gebrauch davon reden dass ein Programm zuverl ssig ist ein falsches Ergebnis also nur mit geringer Wahrscheinlichkeit auftritt Ein Programm soll robust sein das hei t auf Fehler der Eingabe oder der Peripherie vern nftig reagieren nicht mit einem Absturz Das Schlimmste ist wenn ein Programm trotz eines Fehlers ei
348. re Code dieser externen Module wird erst vom Linker mit dem Programmcode vereinigt so da ein vollst ndiges ausf hrbares Programm entsteht Es gibt die M glichkeit die externen Module erst zur Laufzeit hinzuzunehmen das hei t dyna misches Linken und spart Speicherplatz Dabei werden die Module entweder beim Laden des Programms in den Arbeitsspeicher oder erst bei ihrem Aufruf hinzugeladen load on de mand Benutzen mehrere Programme ein in den Arbeitsspeicher kopiertes Modul gemein sam anstatt jeweils eine eigene Kopie anzulegen so kommt man zu den Shared Libraries und spart nochmals Speicherplatz Die Aufrufe lauten cc 1 77 1 90 1 und pc 1 Diese Kommandos rufen Compi lertreiber auf die ihrerseits die eigentlichen Compiler 1ib ccom 77comp 90comp und pascomp starten und noch weitere Dinge erledigen Ohne Optionen rufen die Compilertrei ber auch noch den Linker bin 1d 1 auf so dass das Ergebnis ein lauff higes Programm ist das als Default den Namen a out 4 tr gt Mit dem Namen a out 4 sollte man nur vor bergehend arbeiten mit mv 1 ndern Der Aufruf des C Compilers sieht beispielswei se so aus MT inker werden auch Binder Mapper oder Loader genannt Manchmal wird auch zwischen Binder und Loader unterschieden soll uns hier nicht besch ftigen 20 KAPITEL 1 PROGRAMMIEREN IN C C CC source c cc g source c lm L lib I DMAX 100 Die erste Zeile stellt den minimalen Aufruf dar die zwei
349. reiben Die Datenbank Abfragesprache SQL Structured Query Language geh rt hierher in den Programmen SQL Script steht was man wissen will nicht wie man dazu kommt Die deklarativen Sprachen unterteilt man in die funktionalen und die logischen oder pr dikativen Sprachen 6 KAPITEL 1 PROGRAMMIEREN IN C C Wir haben also folgende Einteilung wobei die tats chlich benutzten Sprachen Mischlinge sind und die Einordnung ihrem am st rksten ausgepr gten Charakterzug folgt Prozedurale Sprachen im weiteren Sinn imperative algorithmische operative oder im engeren Sinn prozedurale Sprachen BASIC FORTRAN COBOL C PASCAL objektorientierte Sprachen SMALLTALK C Java Deklarative Sprachen funktionale oder applikative Sprachen LISP SCHEME HASKELL logische oder pr dikative Sprachen PROLOG Diese Sprachentypen werden auch Paradigmen Beispiel Muster genannt Auf imperative und objektorientierte Sprachen gehen wir bald ausf hrlich ein Zuerst ein kurzer Blick auf funktionale und pr dikative Sprachen Programme in funktionalen Programmiersprachen wie LISP oder SCHEME bestehen aus Definitionen von Funktionen u erlich hnlich einem Gleichungssystem die auf Listen von Werten angewendet werden Hier das Hello World Programm in LISP LISP DEFUN HELLO WORLD PRINT LIST HELLO WORLD Quelle 1 1 LISP Programm Hello World und auch noch in SCHEME define hello world lambda
350. ren sein Fenster sein Aussehen look sein Verhalten feel und ein Satz von Methoden die sein Verhalten realisieren Ein Men oder ein anklickbarer Druckknopf ist ein Widget Die dritte Schicht bilden Bibliotheken wie der Motif Toolkit Xm der eine Menge nach ein heitlichen Regeln gebauter Widgets zur Verf gung stellt W hrend Xt nur abstrakte Fenster und Menus kennt legt Xm fest wie ein Motif Fenster oder Men aussieht und wie es sich verh lt W hrend der Quellcode von Xlib und Xt ver ffentlicht ist kostet die Xm eine Klei nigkeit Ein Programmierer versucht immer mit der h chsten Bibliothek zu arbeiten weil er sich dabei am wenigsten um Einzelheiten zu k mmern braucht 1 5 4 NAG Bibliothek Die NAG Bibliothek der Numerical Algorithms Group Oxford soll hier als ein Beispiel f r eine umfangreiche kommerzielle Bibliothek stehen die bei vielen numerischen Aufga ben die Arbeit erleichtert Die FORTRAN Bibliothek umfa t etwa 1200 Subroutinen die C Bibliothek etwa 250 Funktionen Sie stammen aus folgenden Gebieten Nullstellen Extremwerte Differential und Integralgleichungen Fourier Transformation Lineare Algebra nichtlineare Gleichungen Statistik N herungen Interpolation Ausgleichsrechnung e Zufallszahlen usw N heres unter http www nag co uk 80 numeric html 1 5 5 Eigene Bibliotheken Wir haben bereits in Abschnitt 1 2 6 Bibliotheken Archive auf Seite 25 gelernt eine eigene Pro
351. rithmus l t sich teilweise parallelisieren 40H KLIER Alpenvereinsf hrer tztaler Alpen Bergverlag Rudolf Rother M nchen Der Algorithmus muf sequentiell abgeschwitzt werden 1 14 EXKURS BER ALGORITHMEN 179 Endlichkeit Die Beschreibung des Algorithmus mu eine endliche L nge haben sonst k nnte man ihn endlichen Wesen nicht mitteilen Er mu ferner eine endliche Ausf h rungszeit haben man m chte seine Fr chte ja noch zu Lebzeiten ernten Er darf zur Ausf hrung nur eine endliche Menge von Betriebsmitteln belegen Allgemeinheit 3 x 4 12 ist kein Algorithmus wohl aber die Vorschrift wie man die Multiplikation auf die Addition zur ckf hrt Man kann die Anforderungen herabschrauben und kommt dabei zu reizvollen Fragestellun gen aber f r den Anfang gilt obiges Eine f nfte technisch wie theoretisch bedeutsame For derung ist die nach einem guten zweckm igen Algorithmus oder gar die nach dem besten Denken Sie an die vielen Sortierverfahren keines ist das beste f r alle F lle Es gibt sogar ziemlich leicht verst ndliche Aufgaben die nicht mittels eines Algorith mus zu l sen sind Falls Sie Bedarf an solchen N ssen haben suchen Sie unter dem Stichwort Entscheidbarkeit in Werken zur Theoretischen Informatik aber die Daten fehlen um den ganzen Nonsens richtig zu berblicken Benn Drei alte M nner A Zahlensysteme Au er dem Dezimalsystem sind das Dual das Oktal und das Hexa
352. ritten einer real Zahl 64 Bit Maschinenwort Die Genauigkeit einer Langzahl ist als die Anzahl von real Zahlen defi niert die zur Speicherung der langen Zahl verwendet werden Ein Objekt des Typs 1_real oder 1_interval kann seine Genauigkeit zur Laufzeit ndern Komponenten eines Vektors oder einer Matrix d rfen von unterschiedlicher Genauigkeit sein Alle Standardfunktionen und sonstigen Funktionen der Langzahl Arithmetik berechnen numerische Ergebnisse mit einer Genauigkeit die durch den augenblicklichen Wert von stagprec bestimmt ist Spei cherzuweisung das ndern der Gr e von Arrays und das Arbeiten mit Subarrays verlaufen hnlich wie bei den entsprechenden Datentypen einfacher Genauigkeit 1 7 3 6 Ein und Ausgabe in C XSC Unter Verwendung des Stream Konzeptes und der berladbaren Operatoren lt lt und gt gt von C erm glicht C XSC das Runden und Formatieren aller seiner Datentypen w hrend der Ein und Ausgabe auch f r die Dotprecision und Langzahldatentypen Ein Ausgabe Parameter wie die Richtung der Rundung Feldbreite usw benutzen auch die berlade nen I O Operatoren zum Formatieren der Ein und Ausgabe Falls ein neuer Satz von I O Parametern verwendet werden soll kann der alte auf einem internen Stack gespeichert und bei Bedarf zur ckgeholt werden Das folgende Beispiel zeigt die M glichkeiten von C XSC zur Ein und Ausgabe main real a b interval c cout lt lt Bitte r
353. rlangt Pointer als amp a heissen Heimtueckischer gibt eine irrefuehrende Warnung merkt nichts Zur Laufzeit ein memory fault 4 Fehler Es wird durch nichts verhindert dass fuer b eine Null eingegeben wird Das kann zu einem Laufzeitfehler fuehren wird weder von lint noch vom Compiler bemerkt 5 Fehler Es sollte die Summe ausgerechnet werden nicht der Quotient Logischer Fehler wird weder von lint noch vom Compiler bemerkt 6 Fehler Abschliessende Klammer fehlt wird von lint und Compiler beanstandet Syntaxfehler Darueberhinaus spricht lint noch Hinweise bezueglich main printf und scanf aus Diese Funktionen sind aber in Ordnung Warnungen ueberhoeren x define PI 3 14159 include lt stdio h gt int main E Oe ek ZE a 2 Summanden eingeben amp b puts Bitte scanf d puts Bitte scanf d c a JB printf Die Summanden eingeben Summe ist d n c Quelle 1 20 C Programm mit Fehlern Als erstes lassen wir den Syntaxpr fer lint 1 auf das Programm los lint fehler c und erhalten das Ergebnis fehler c 36 warning a may be used before set 41 syntax error 41 warning main returns random value to environment 44 KAPITEL 1 PROGRAMMIEREN IN C C function returns value which is always ignored printf scanf Zeile 41 ist das Programmende dort steckt ein Fehler Die Warn
354. rogramm wird zun chst die Obergrenze aus der Kommandozeile oder im Dia log ermittelt Dann wird eine berschrift ausgegeben Der Witz kommt im Rumpf der while Schleife Offenbar wird die jeweils n chste Primzahl durch den Pr fix Operator erreicht mit dem man vor der berladung nur Ganzzahlen um jeweils 1 inkrementieren konnte Hin ter dem berladenen Operator versteckt sich der Algorithmus zur Berechnung der n chsten Primzahl Hier wird die Teilbarkeit der aktuellen Zahl prime_number dadurch ermittelt da sie durch die kleineren ungeraden Zahlen i ganzzahlig dividiert und gleich wieder mit dem Divisor multipliziert wird Ergibt sich der alte Dividend so verlief die Division ohne Rest die aktuelle Zahl war teilbar und somit keine Primzahl So geht es auch wir werden im Programm 1 89 auf Seite 153 den modulo Operator verwenden Die berladung bewirkt da der Pr fix Operator angewandt auf ein Objekt der Klas se PRIM die jeweils n chste Primzahl erzeugt Man h tte auch einen anderen Operator neh men k nnen Die f r Klassen definierten Operatoren wie d rfen nicht berladen werden da sie gebraucht werden Bei Operatoren wie der Bedingten Bewertung ist schwer vor stellbar welche neue Bedeutung sie erhalten sollten 1 9 Pr prozessor Beim Aufruf des Compilers wird der Quelltext als erstes von einem Pr prozessor bearbei tet Dieser f hrt die define und include Anweisungen aus und entfernt Kommentare so wie Zeich
355. rom the previous publisher that added the old one The author s and publisher s of the Document do not by this license give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version 5 COMBINING DOCUMENTS You may combine the Document with other documents released under this license under the terms defined in section 4 above for modified versions provided that you include in the combination all of the Invariant Sections of all of the original documents unmodified and list them all as Invariant Sections of your combined work in its license notice and that you preserve all their Warranty Disclaimers The combined work need only contain one copy of this license and multiple identical Invariant Sections may be replaced with a single copy If there are multiple Invariant Sections with the same name but different contents make the title of each such section unique by adding at the end of it in parentheses the name of the original author or publisher of that section if known or else a unique number Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work In the combination you must combine any sections entitled History in the various original documents forming one section entitled History likewise combine any sections entitled Ack nowledgements and any sections entitled Dedications You must delete all sections entitled Endors
356. roprietary formats that can be read and edited only by proprietary word processors SGML or XML for which the DTD and or processing tools are not generally available and the machine generated HTML PostScript or PDF produced by some word processors for output purposes on y The Title Page means for a printed book the title page itself plus such following pages as are needed to hold legibly the material this license requires to appear in the title page For works in formats which do not have any title page as such TTitle Pagemmeans the text near the most prominent appearance of the work s title preceding the beginning of the body of the text A section Entitled XYZ means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language Here XYZ stands for a specific section name mentioned below such as Acknow ledgements Dedications Endorsements or History To Preserve the Title of such a section when you modify the Document means that it remains a section Entitled XYZ accor ding to this definition The Document may include Warranty Disclaimers next to the notice which states that this license applies to the Document These Warranty Disclaimers are considered to be included by reference in this license but only as regards disclaiming warranties any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of
357. round attribute in GC structure XSetForeground mydisplay mygcl2 colorl pixel XSetBackground mydisplay mygcl2 color3 pixel XSetBackground mydisplay newgc mybackground XSetFont mydisplay mygcl XLoadFont mydisplay SrEb 257 753 setting font attribute in GC structure XSetFont mydisplay mygcl2 XLoadFont mydisplay NXET2257m y3 XSetFont mydisplay newgc XLoadFont mydisplay U Yrq225 ys window mapping XMapRaised mydisplay mywinl XMapRaised mydisplay mywin2 input event selection XSelectInput mydisplay mywinl KeyPressMask ExposureMask XSelectInput mydisplay mywin2 KeyPressMask ExposureMask ButtonPressMask main event reading loop while 1 XNextEvent mydisplay amp myevent read next event switch myevent type process keyboard input 1 11 WEITERE C PROGRAMME 165 case KeyPress i XLookupString amp myevent text 10 amp mykey 0 if i 1 amp amp text 0 ai text 0 Q XFreeGC mydisplay mygcl XFreeGC mydisplay mygc12 XFreeGC mydisplay newgc if win XDestroyWindow mydisplay newwin XDestroyWindow mydisplay mywinl if del XDestroyWindow mydisplay mywin2 XFreePixmap mydisplay mypixmap XCloseDisplay mydisplay exit 0 else if i 1 amp amp text 0 c text 0 C amp amp myevent xkey
358. rray n while param_array gt key NULL printf s s n param_array gt key param_array gt value param_arraytt return 0 1 11 WEITERE C PROGRAMME Quelle 1 96 C Programm cgi_test c zum Ausprobieren der cgi Schnittstelle Teil einer Implementation der CGI Schnittstelle in C Cgi c Funktionen x include lt stdio h gt include lt stdlib h gt include lt string h gt include lt ctype h gt include cgi h Wandelt all in inzelne Z ichen um und xx Tripel wobei der uebergeben void unescape str char xs size t i for i strlen s i gt 2 if xs ass else if s amp amp xs isdigit s 1 isdigit s 2 memmove s 1 s Gibt den query string zurueck ansonsten NULL String veraendert wird i s isxdigit s 1 E 13 9S2 3 i 2 wenn kein amp amp isxdigit tolower tolower 147 in 5 1 2 S S 2 char xget query char xp size_t len x REQUE GT METHOD suchen p Le 1 p TE len if Oz if p NULL p NULL len lt 1 T q NULL memmove q p Fall GET strcmp p GET 0 getenv REQUEST METHOD return NULL Fehler auftreten Unterscheidet dabei zwischen GET und POST Darf be
359. rt 0 und bei Fehlern Werte ungleich 0 zur ckgeben Leerer Typ Der leere Datentyp void wird zum Deklarieren von Funktionen verwendet die kein Ergebnis zur ckliefern sowie zum Erzeugen generischer allgemeiner Pointer die auf Variablen eines vorl ufig beliebigen Typs zeigen Der Typ hat keine Gr e Der Bytebe darf eines Pointers dagegen liegt fest auch wenn der zugeh rige Variablentyp noch offen ist Zur Pointer Arithmetik muss jedoch der Typ das hei t der Bytebedarf der zugeh rigen Va riablen bekannt sein Variablen vom Typ void lassen sich nicht verarbeiten weil sie nicht existieren Man bezeichnet den Typ void als unvollst ndig da er nicht alle F higkeiten ei nes vollst ndigen Typs wie int aufweist Man braucht diesen schr gen Typ aus hnlichen Gr nden wie die leere Menge in der Mathematik Vor der Erfindung des Typs void wurde f r generische Pointer der Typ char genommen der ein Byte umfasst woraus sich alle anderen Typen zusammensetzen lassen Man h tte den Typ auch byte nennen k nnen 1 3 6 4 Zusammengesetzte Typen Arrays Strukturen Arrays Die meisten Programmiersprachen kennen Arrays auch als Vektoren oder un gl cklicherweise als Felder bezeichnet das sind geordnete Mengen von Gr en desselben Typs Jedem Element ist ein fortlaufender Index Hausnummer zugeordnet der in C stets mit 0 beginnt In einem Array von zw lf Elementen l uft also der Index von 0 bis 11 aufpas sen Elemente eines Arrays
360. rtragung nach C geschrieben worden ist Es geht um die Bestimmung des gr ten gemeinsamen Teilers mit dem Algorithmus von EUKLID Da wir die Aufgabe und den Algo rithmus kennen erleichtert die Arbeit da au er einigen Graub rten niemand mehr ALGOL kennt erschwert sie BEGIN COMMENT BEISPIEL 12 INTEGER A B X Y R Tid READ A B A NOT LESS B THEN BEGIN X A ELSE BEGIN X B L2 R X Y ENTIER X Y IF R NOT EQUAL 0 THEN BEGIN X Y Y R GO TO L2 END sn gt D PRINT A B Y GO TO L1 END Quelle 1 100 ALGOL Programm ggT nach Euklid Die Einlese und bersetzungszeit auf einer Z22 betrug 50 s die Rechen und Druckzeit 39 s Damals hatten schnelle Kopfrechner noch eine Chance Eine Analyse des Quelltextes ergibt Das Programm besteht aus einer Datei mit dem Hauptprogramm war kaum anders m glich Schl sselw rter stehen in Hochkommas logische Bl cke werden durch begin und end begrenzt es kommen nur ganzzahlige Variable vor es wird Ganzzahl Arithmetik verwendet an Funktionen treten read und print auf an Kontrollanweisungen werden if then lse und goto verwendet Das sieht hoffnungsvoll aus Die bertragung nach C 1 13 PORTIEREN VON PROGRAMMEN 175 Groesster gemeinsamer Teiler nach Euklid Uebertragung eines AL
361. ruf cc o csummef csummef c fsr o lcl x include lt stdio h gt extern int fsr int xx int xy int main ant lt a be scanf d amp a amp b printf Die Summanden sind d dNn a b printf Die Summe direkt ist dWMn a b printf Die Summe ist dWMn fsr amp a amp b printf Die Summanden sind d d n a b return 0 Quelle 1 40 C Programm das Parameter by reference an eine FORTRAN Funktion bergibt Die Linker Option 1cl ist erforderlich wenn FORTRAN oder PASCAL Module in C Programme eingebunden werden Sie bewirkt die Hinzunahme der FORTRAN und PASCAL Laufzeitbibliothek usr lib libcl a ohne die Bez ge Referenzen auf FORTRAN oder PASCAL Routinen unter Umst nden offen bleiben Anders gesagt in den FORTRAN oder PASCAL Funktionen kommen Namen vor zum Beispiel write deren Definition in besagter Laufzeitbibliothek zu finden ist C und PASCAL sind sich im gro en ganzen hnlich es gibt aber Unterschiede hinsichtlich des Geltungsbereiches von Variablen die hier nicht deutlich werden C Programm csummep das PASCAL Funktionen aufruft x Compiler cc o csummep csummep c psv o psr o lcl x include lt stdio h gt extern int psv int x int y psr int x int xy int main int a b puts Bitte die beiden Summanden eingeben scanf d Sd amp a amp b printf Die Summanden sind d dNn a b printf Die Summe direkt ist d n
362. s if r S unsigned time time t x 0 srand s r 1 rand m return 152 Quelle 1 86 C Funktion zur Erzeugung einer Zufallszahl im Bereich von 1 bis MOD Die C Funktion gibt pro Aufruf eine Zufallszahl im Bereich von 1 bis zum Modulus zuriick der als Argument bergeben wird PASCAL Programm das C Funktion aufruft Compileraufruf pc o prandom prandom p zufallszahl o Funktion zufallszahl braucht als Argument den Modulus program prandom input output 1 11 WEITERE C PROGRAMME 147 var a i x integer function zufallszahl x integer integer external C begin writeln Bitte Modulus eingeben readin x writeln Bitte Anzahl eingeben readin a writeln Zufallszahlen for i a downto 1 do writeln zufallszahl x end Quelle 1 87 PASCAL Programm zur Erzeugung von Zufallszahlen im Bereich von 1 bis MOD mit C Funktion Die Compileraufrufe lauten cc c zufallszahl c pc o prandom prandom p zufallszahl o Die gemischte Programmierung funktioniert hier reibungslos weil beide Sprachen den Typ Ganzzahl kennen und die C Funktion einfach ist Wie wir anfangs auf Seite bemerkt haben ist es prinzipiell unm glich mit einer deter ministischen Maschine Zufallsergebnisse zu erzeugen Die vorstehenden Programme liefern daher auch nur Pseudo Zufallszahlen pseudo random number die hinsichtlich bestimm ter Eigenschaften mit echten Zufal
363. s break wird dann x auf bereinstimmung mit b oder c gepr ft Trifft kein case zu wird die default Anweisungsfolge ausgef hrt Fehlt diese macht das Programm nach der Aus wahl weiter ohne eine der Anweisungen ausgef hrt zu haben Wenn keine anderen Gr nde dagegen sprechen stellt man den h ufigsten Fall an den Anfang Die Auswahl ist bersichtlich einfach zu erweitern und effektiv Wenn aus einer einfa chen Verzweigung eine Auswahl werden k nnte soll man gleich zu dieser greifen Auswahlen d rfen geschachtelt werden 1 3 BAUSTEINE EINES QUELLTEXTES 75 Mit etwas Phantasie kann man sich die Bedingung als eine Auswahl mit nur einer Wahl m glichkeit vorstellen die Verzweigung als eine Auswahl mit zwei Wahlm glichkeiten Inso fern lassen sich diese drei Kontrollstrukturen zusammenfassen wobei die switch Auswahl den allgemeinen Fall darstellt Schleifen Einem Computer macht es nichts aus denselben Vorgang millionenmal zu wie derholen Das ist seine St rke Wiederholungen von Anweisungen kommen daher in fast allen Programmen vor sie werden Schleifen loop genannt Eine Schleife hat einen Eingang sonst k me man nicht hinein Die meisten Schleifen haben auch einen Ausgang sonst k me man nicht wieder heraus au er mit dem Brecheisen in Form der Break Taste oder hnlichem Entweder Ein oder Ausgang sind an eine Bedingung gekn pft die entscheidet wie oft die Schleife durchlaufen wird Folgende Konstruktionen sind m gli
364. s open 2 Sortieren hingegen Sache einer Standardfunktion qsort 3 Es gibt aber zus tzlich auch Standardfunktionen zum Umgang mit Dateien die den jeweiligen Systemaufruf komfortabel verpacken open 3 Nach au en definiert die Menge der Systemaufrufe das Betriebssys tem Zwei Systeme die in ihren Aufrufen bereinstimmen sind f r den Benutzer identisch Neue Funktionalit ten des Betriebssystems stellen sich dem Programmierer als neue Sys temaufrufe dar siehe zum Beispiel unter stream 2 VStandardfunktionen sind erst verf gbar nachdem andere Programmierer sie geschrieben haben 1 2 PROGRAMMER S WORKBENCH 35 Einige UNIX Systemaufrufe haben gleiche oder hnliche Aufgaben wie Shell Kommandos Wenn man die Zeit wissen m chte verwendet man im Dialog das Shell Kommando date 1 Will man diese Information aus einem eigenen Programm heraus ab fragen greift man auf den Systemaufruf t ime 2 18 zur ck Das Shell Kommando ist ein in ein C Programm verpackter Systemaufruf In Linux UNIX sind Systemaufrufe Funktionen der Programmiersprache C Eine Funk tion bernimmt beim Aufruf Argumente oder Parameter und gibt ein Ergebnis zur ck Die ser Mechanismus wird Parameter bergabe genannt Man muss ihn verstanden haben um Funktionen in eigenen Programmen verwenden zu k nnen Eine Erkl rung findet sich im Skriptum Programmieren in C C 1 2 9 2 Beispiel Systemzeit time Im folgenden Beispiel wird der Systemaufruf
365. s tze nach Hinzuf gen oder L schen einzelner S tze jedesmal neu sortieren so w re das mit viel Kopierarbeit verbunden Stattdessen legt man ein Hilfsfile einen Index an der nur die Sortierschl ssel Namen und die Speicheradressen Pointer der zugeh ri gen Datens tze enth lt Dieser Index wird sortiert was mit wesentlich weniger Kopierarbeit verbunden ist weil die S tze k rzer sind Suche ich nun nach einem Datensatz mit einem be stimmten Schl ssel so gehe ich in den sortierten Index suche dort m glichst geschickt nach dem Schl ssel und springe dann zu der bei dem Schl ssel stehenden Speicheradresse des Datensatzes Ich kann auch zwei Indexfiles mit verschiedenen SortierschL sseln Namen 1 3 BAUSTEINE EINES QUELLTEXTES 57 Geburtstag anlegen w hrend die Datens tze bestenfalls nach einem einzigen Schl ssel sor tiert sein k nnen Meistens verzichtet man darauf die Datens tze zu sortieren Der dritte Band von DONALD E KNUTH befasst sich nur mit Suchen und Sortieren ein interessantes Gebiet Jeder versteht die Aufgaben die L sungen k nnen trickreich sein Ein weiteres Einsatzgebiet von Pointern ist die Parameter bergabe von Funktionen siehe Abschnitt 1 4 3 Parameter bergabe auf Seite 82 Und schlie lich k nnen C Funktionen nur einen einzigen Wert zur ckgeben Setzt sich ihr Ergebnis aus mehreren Werten zusammen wie bei einem String oder einem Vektor so geht das nur ber einen Pointer auf das erste Eleme
366. s wegfallende Stelle ist zu achten nachgeschoben am anderen Ende wird eine Null Die Shift Operation ist schnell Weiterhin beziehen sich einige logische Operationen auf Bits siehe oben Auch hier sind Abk rzungen m glich lt lt gt gt Der Ausdruck y lt lt x ist gleichbedeutend mit y y lt lt x Der linke Operand wird um so viele Bits nach links verschoben wie der rechte Operand angibt Das Ergebnis wird dem linken Operanden zugewiesen Zur Veranschaulichung der Bitoperationen ein kleines Programm Programm mit Bitoperationen sinnvolle Argumente z B 8 2 x include lt stdio h gt void exit int main int argc char argv int i j k if argo lt 3 puts Zwei Argumente erforderlich exit 1 sscanf argv 1 d amp i sscanf argv 2 d amp 3j Print Eingabe d um d Bits nach links d n i j Dr inti ess d um d Bits nach rechts d n i j k peint Ringde d mit bitweise und d n i j k Sehe d mit bitweise oder San X Ze kis return 0 Quelle 1 25 C Programm mit Bitoperationen 1 3 7 7 st ointeroperationen Folgende Operationen behandeln Pointer Referenzierung amp Dereferenzierung x oder bei Arrays 1 3 BAUSTEINE EINES QUELLTEXTES 69 Strukturverweis gt minus gr er bei Strukturpointern Strukturverweis Punkt bei Strukturnamen Weiterhin sind folgende f r Ganzzah
367. s Programm ffnet ein Fenster und bringt in dessen Mitte eine Beschrif tung in Form eines f r derartige Zwecke klassischen Textes sowie an der Fensterunterseite einen Knopf an Wird der Knopf bet tigt ndert sich die Beschriftung und nach 1500 ms beendet sich das Programm Makefile fuer ghello S werden die Include Files von X11 und Qt benoetigt INC I usr X11R6 include I usr lib qt include 1 7 KLASSEN BIBLIOTHEKEN gelinkt wird gegen die und die libqt in usr lib LIB verwendete C g der Compiler P CP all qhello cpp qhello moc CPP 4 moc File wird aus ghell moc muss im PATH stehen qhello moc qhello h moc ghel libx11 o qhello qhello cpp INC 125 in usr X11R6 lib dort automatisch gesucht L usr X11R6 lib 1X11 lqt hier GNU C benoetigt wird neben dem Source Code das moc File LIB o h gewonnnen lo h gt qhello moc Quelle 1 70 Makefile zu qhello cpp Include Fil Die Klasse HelloWidget erbt ihre von der Klasse QWidget ss HelloWidget cla public OWidget Q_OBJECT muss in jeder Slots implementiert Q OBJECT die Konstruktor Funktion public HelloWidget QWidget parent ein Signal signals void neuerText const char fuer qhello Eigenschaften Klasse die Signals oder stehen ohne void 0 const char xname 0
368. s exklusives Oder l bin r bitweises Oder amp amp 1 bin r logisches Und N 1 bin r logisches Oder 2 1 tern r bedingte Bewertung r bin r Zuweisung D 3 STANDARDFUNKTIONEN 201 H n r bin r zusammengesetzte 5 gt gt lt lt Zuweisung amp throw un r Ausnahmebehandlung 1 Komma Operator D 3 Standardfunktionen Folgende Standardfunktionen oder makros sind gebr uchlich Pufferbehandlung memchr sucht Zeichen im Puffer memcmp vergleicht Zeichen mit Pufferinhalt memcpy kopiert Zeichen in Puffern memset setzt Puffer auf bestimmtes Zeichen Zeichenbehandlung isalnum pr ft Zeichen ob alphanumerisch isalpha pr ft Zeichen ob Buchstabe iscntrl pr ft Zeichen ob Kontrollzeichen isdigit pr ft Zeichen ob Ziffer isgraph pr ft Zeichen ob sichtbar islower pr ft Zeichen ob Kleinbuchstabe isprint pr ft Zeichen ob druckbar ispunct pr ft Zeichen ob Satzzeichen isspace pr ft Zeichen ob Whitespace isupper pr ft Zeichen ob Gro buchstabe isxdigit pr ft Zeichen ob hexadezimale Ziffer tolower wandelt Gro buchstaben in Kleinbuchstaben um toupper wandelt Kleinbuchstaben in Gro buchstaben um Datenumwandlung atof wandelt String in double Wert um atoi wandelt String in int Wert um a tol wandelt String in 1ong Wert um un trtod wandelt String in double Wert um strtol wandelt String in Long Wert um strtoul wandelt Stri
369. schlie end die Stan dardfunktion putchar 10 Der Gebrauch des un ren Minuszeichens samt der bitweisen Negation ist ungewohnt Man mu sich die Umrechnungen in Bits aufschreiben negative Zahlen werden durch ihr Zweierkomplement dargestellt Bei write 13 gibt 0000 0000 0000 0000 0000 0000 0000 1101 13 gibt 1111 1111 1111 1111 1111 1111 1111 0011 13 gibt 0000 0000 0000 0000 0000 0000 0000 1100 gibt 0000 0000 0000 0000 0000 0000 0000 0001 was dezimal 1 ist Bei putchar sieht die Geschichte so aus 13 gibt 0000 0000 0000 0000 0000 0000 0000 1101 15 gibt 1111 1111 1111 1111 1111 1111 1111 0011 13 gibt 0000 0000 0000 0000 0000 0000 0000 1100 13 gibt 1111 1111 1111 1111 1111 1111 1111 0100 13 gibt 0000 0000 0000 0000 0000 0000 0000 1011 13 gibt 1111 1111 1111 1111 1111 1111 1111 0101 gibt 0000 0000 0000 0000 0000 0000 0000 1010 was dezimal 10 ASCII Zeichen Linefeed ist F r FORTRAN 77 bleiben folgende Zeilen brig write x Hello world end Zeilen die an erster Stelle ein c oder ein enthalten gelten als Kommentar Zeilen die an sechster Stelle irgendein Zeichen enthalten werden als Fortsetzungen aufgefa t Anweisun gen beginnen in Spalte 7 die Sitte stammt aus der Lochkartenzeit Das Shellscript enth lt als einzige wirksame Kommandos echo Hello world exit Was davor steht geht nach dev null M
370. separator control 31 us Unit separator control _ 127 del Delete DEL RUBOUT B 4 LATIN 1 ISO 8859 1 191 B 4 Latin 1 ISO 8859 1 Die internationale Norm ISO 8859 beschreibt gegenw rtig zehn Zeichens tze die jedes Zei chen durch jeweils ein Byte darstellen Jeder Zeichensatz umfa t also maximal 256 druckba re Zeichen und Steuerzeichen Der erste Latin 1 genannt ist f r west und mitteleurop i sche Sprachen darunter Deutsch vorgesehen Latin 2 deckt Mittel und Osteuropa ab so weit das lateinische Alphabet verwendet wird Wer einen polnisch deutschen Text schreiben will braucht Latin 2 Die deutschen Sonderzeichen liegen in Latin 1 bis 6 an denselben Stel len Weiteres siehe in der ISO Norm und im RFC 1345 Character Mnemonics and Character Sets vom Juni 1992 Auch http wwwwbs cs tu berlin de czyborra charsets hilft weiter Die erste H lfte 0 127 aller Latin Zeichens tze stimmt mit US ASCII berein die zweite mit keinem der anderen Zeichens tze Zu jedem Zeichen geh rt eine standardisierte verbale Bezeichnung Einige Zeichen wie das isl ndische Thorn oder das Cent Zeichen konn ten hier mit LaTeX nicht dargestellt werden dezimal oktal hex Zeichen Bezeichnung 000 000 00 nu Null nul 001 001 01 sh Start of heading soh 002 002 02 SX Start of text stx 003 003 03 ex End of text etx 004 004 04 et End of transmission eot 005 005 05 eq Enquiry enq 006 006 06 ak Acknowledge ack 007 007 0
371. ses define EN E c Q c q Makros x define HE h Pr A0 Se 6 z D L include lt curses h gt int main int disp 1 WINDOW frame initscr noecho cbreak mvprintw 10 15 Program demonstrating Curses Windows mvprintw 11 15 You get a help window by pressing h mvprintw LINES 1 0 Press q to quit refresh while 1 c getch if END clear refresh endwin return 0 else if HELP if disp frame newwin 13 40 10 35 wstandout frame for c 0 lt 4 ctt mvwprintw frame c 0 42c mvwprintw frame 5 0 Window built by curses It may mvwprintw frame 6 0 contain helpful messages he mvwprintw frame 7 0 Delete the window by typing h for c 8 lt 12 c mvwprintw frame c 0 42c wrefresh frame wstandend frame else delwin frame touchwin stdscr refresh disp disp Quelle 1 83 C Programm mit curses Funktionen Jedes curses Programm muss die Include Datei curses h enthalten die seinerseits stdio h einschlie t WINDOW ist ein in curses h definierter Datentyp eine Struktur die den Bildschirminhalt die Cursorposition usw enth lt Die curses 3 Funktionen bewirken folgendes initscr mu dieerste curses 3 Funktion sein Sie initialisiert die Datenstruktu 144 KAPITEL 1 PROGRAMMIEREN IN C C ren Das Gegenst ck dazu ist
372. t 138 1 78 C Programm einfach 138 1 79 C Programm 198 180 C Programm Variante 139 1 81 C Programm Eingabe 2222s 139 1 82 C Programm Dateiputzete 142 1 88 GCsProgramm G rseS en RR FE 143 1 84 7 145 1 85 C Programm Zufallszahlen 146 1 86 C FunktionZufallszahlen Coon 146 1 87 PASCAL Programm Zufallszahlen mit Funktion 2222020 147 1 88 C Programm void Pointer 150 1 89 C Programm Primzahlen 153 190 C Programm Array von Funktionspointern 155 191 C Funktionbilderc ees 156 1 92 Makefilezu schifEC oou SE ans 3m ses Ret RISE OR RR 157 198 C Programm Dynamische Speicherverwaltung 158 194 C Programm Sortieren nach Duden 162 1 95 C Programm X Window System Xlib 166 1 96 Webseitecgi 6 167 1 97 Include Datercgrhz sa 27 5 ke ee She SS ESN ER DE ST See 168 1 98 C Programm cgi_test c 168 199 C Funktionencgic eee 171 1 100 ALGOL Programm 174 1 101 C Programm ggT nach
373. t Laenge cin a cout Breite cin b u umfang a b i inhalt a b protected double umfang double x double y return 2 x y double inhalt double x double y return x y private double a b x y class Quadrat public Rechteck abgel konkr Klasse public Quadrat a 0 Constructor void lesen cout Laenge cin a u umfang a a i inhalt a a protected private double a 1 class Kugel public Koerper abgel konkr Klasse public Kugel a Zz 0 Constructor void lesen cout Radius cin a f flaeche a a a v volumen a a a protected private double a x y Zz double flaeche double x double y double z return 2 PI xx y z double volumen double x double y double z return 4 x PI x y 3 1 class Quader public Koerper abgel konkr Klasse public 114 KAPITEL 1 PROGRAMMIEREN IN C C Quader 8 b c x y 05 Constructor void lesen cout Laenge cin a cout Breite cin b cout Hoehe DI yy cs f flaeche a b c v volumen a b c protected double flaeche double x double y double z return 2 x y tx Z ty z double volumen double x double y double z return x y z private double a b X V Z class Wuerfel public Quader
374. t Die Mantisse ist auf eine Stelle ungleich 0 vor dem Dezimalkomma oder punkt normiert Es gibt float Gleitkommazahl einfacher Genauigkeit double Gleitkommazahl doppelter Genauigkeit long double Gleitkommazahl noch h herer Genauigkeit extended precision Die Deklaration von Gleitkomma Variablen sieht so aus float x y z double geschwindigkeit Gleitkommazahlen haben immer ein Vorzeichen Man beachte da die Typen sich nicht nur in ihrem Wertebereich sondern auch in ihrer Genauigkeit Anzahl der signifikanten Stellen unterscheiden anders als bei Ganzzahlen Der Typ 1ong double ist selten F r Gleitkommazahlen sind die Addition die Subtraktion die Multiplikation die Divisi on sowie Vergleiche zul ssig Die Abfrage auf Gleichheit ist jedoch heikel da aufgrund von Rundungsfehlern zwei Gleitkommazahlen selten gleich sind Wenn m glich mache man um Gleitkommazahlen einen gro en Bogen Die Operationen dauern l nger als die entsprechen den f r Ganzzahlen und die Auswirkungen von Rundungsfehlern sind schwierig abzusch t zen Zur internen Darstellung von Gleitkommazahlen siehe Abschnitt Arithmetikprozes soren auf Seite Alphanumerischer Typ Eine Gr e deren Wertevorrat die Zeichen der ASCII Tabelle oder einer anderen Tabelle sind ist vom Typ alphanumerisch oder character bezeichnet mit char In C werden sie durch eine Integerzahl zwischen 0 und 127 7 bit Zeichens tze beziehungsweise 255 8 bit Zeichens t
375. t ist t Printmez Aufruf einer oeff Method t Settime 13 27 cout Neue Zeit ist t Printmez t Gettime cout Ihre Zeit ist t Printmez t Settime 99 99 ungueltige Werte cout Fehlerhafte Eingabe fuehrt zu t Printmez cout endl endline stream manipulator return 0 Quelle 1 63 C Programm zur Umrechnung von UTC nach MEZ 1 6 3 Klassenhierarchie abstrakte Klassen Vererbung Objektorientiertes Programmieren besteht im Programmieren einer Menge von Klassen de ren zugh rige Objekte den Programmablauf verwirklichen Das folgende Programm zeigt wie aus einer Basisklasse weitere Klassen abgeleitet werden die die public und protected members erben Von einer abstrakten Klasse k nnen nur weitere Klassen abgeleitet je doch keine Objekte gebildet werden Eine abstrakte Klasse mu mindestens eine rein virtu 112 KAPITEL 1 PROGRAMMIEREN IN C C elle Funktion enthalten die nirgends definiert wird Sie ist ein Platzhalter der erst in einer abgeleiteten Klasse einen Inhalt bekommt geof C Beispiel fuer Klassen und Vererbung geometrische Formen Compileraufruf HP CC o geof geof C define PI 3 14159 symbolische Konstante finclude lt iostream h gt fuer Ein und Ausgabe include string h wegen strcmp include lt stdlib h gt wegen exit void exit int Prototyp Systemaufruf class Form abstra
376. tag 0 3 n ptagl 0 4 o t ptag 0 4 ptag 0 4 t ptag 0 5 e a ptag 0 5 ptag 0 5 a ptagl0 6 g x ptag 0 6 ptag 0 6 g ptagl 0 7 e 3 ptag 0 7 ptagl 0 7 ptag 0 8 ptag 0 8 ptag 0 8 lt ptagl0 9 o 5 ptag 0 9 ptag 0 9 5 ptag 1 gt moolt lt gt M ptag 1 ptag 1 0 M ptagi1 1 lt ptag 1 1 ptag 1 1 o ptagll 4 2 n ptag 1 2 ptag 1 2 n Wir brechen nach dem n von Montag ab ptag ist die Adresse des Speicherplatzes in dem ptag 0 abgelegt ist ptag 0 ist die Adresse des Speicherplatzes in dem das Zeichen S abge legt ist Durch zweimaliges Dereferenzieren von ptag erhalten wir das Zeichen S Die anderen Zeichen liegen auf h heren Speicherpl tzen deren Adressen wir durch Inkrementieren ent weder von ptag oder von ptag erhalten wobei man normalerweise die zweidimensionale Struktur des Arrays ber cksichtigt obwohl dem Computer das ziemlich gleich ist Es sind noch weitere Schreibweisen m glich die oben wegen der begrenzten Breite nicht unterzubringen sind Greifen wir die letzte Zeile heraus das n von Montag Rein mit Indizes geschrieben gilt ptag l 2 n So entwerfen wir vermutlich ein Programm weil wir das Arbeiten mit Indizes aus der Ma thematik gewohnt sind Unter Ausnutzen der Pointer Arithmetik gilt aber auch ptag 1 2 p
377. tag 1 2 ptag 1 2 ptag1 2 n F r den Computer ist Pointer Schreibweise mit weniger Arbeit verbunden da er Adressen kennt und Indizes erst in Adressen umrechnen mu array2 c Indizes und Pointer include lt stdio h gt char abcd Array of chars int main printf a 2 c n al2 printf a 2 Sc n a 2 printf 2 a Sc n 2 ail printf 2 a c n 2 a return 0 Quelle 1 23 C Programm zur Verdeutlichung der Pointerarithmetik Nun eine leicht verriickte aber richtige Uberlegung Wir deklarieren und initialisieren einen String a Mit Hilfe der Standardfunktion printf geben wir das Element mit der Hausnummer 2 aus also das Zeichen c Dann greifen wir auf dasselbe Element zu indem wir den Pointer auf den Anfang des Arrays um 2 hochz hlen und anschlie end dereferenzieren 1 3 BAUSTEINE EINES QUELLTEXTES 61 Jetzt f llt uns ein dass die Addition auch in der Pointer Arithmetik kommutativ ist wir vertauschen die beiden Summanden Erwartungsgem geht das gut Schlie lich wandeln wir die Pointer Schreibweise wieder zur ck in die Index Schreibweise unter Beibehaltung der vertauschten Reihenfolge Auch das funktioniert logisch Pointer und Variable geh ren verschiedenen Referenzebenen level an die nicht ge mischt werden d rfen Der gleiche Fall liegt auch in der Linguistik vor wenn ber W rter gesprochen wird Ver
378. tandorten Mitte des Jahres gibt es 10 Mio Eintr ge unter der Top Level Domain de sie ist damit weltweit nach com die zweitumfangreichste Debian stellt den Sicherheitssupport f r woody ein und erkl rt zum Jahresende die Version 4 0 etch mit Kern 2 6 17 als stabil H Zum Weiterlesen Die Auswahl ist subjektiv und enth lt Werke die wir noch lesen wollen schon gelesen haben oder sogar oft benutzen 1 Lexika Glossare W rterb cher Newsgruppen news answers de etc lists news lists RFC 1392 FYI 18 Internet Users Glossary ftp ftp nic de pub rfc rfc1392 txt 1993 53 S Duden Informatik Dudenverlag Mannheim 1993 800 S Nachschlagewerk sorgf ltig gemacht theorielastig Begriffe wie Ethernet LAN SQL Internet fehlen Fachausdr cke der Informationsverarbeitung Englisch Deutsch Deutsch Englisch IBM Deutschland Form Nr Q12 1044 1698 S W rterbuch und Glossar BM Terminology http www 3 ibm com ibm terminology W Alex Abk rzungs Liste ABKLEX Informatik Telekommunikation http www ciw uni karlsruhe de abklex html http www ciw uni karlsruhe de abklex pdf Rund 9000 Abk rzungen aus Informatik und Telekommunikation M Broy O Spaniol Lexikon Informatik und Kommunikationstechnik Springer Berlin Heidelberg 1999 863 S E Kajan Information Technology Encyclopedia and Acronyms Springer Berlin Heidelberg 2002 720 S E S Raymond The New Hacker s Dictionary The
379. te als 7 bit ASCII Zeichen verstanden wobei die Zahlen die mehr als 7 Bit gt 127 beanspruchen nach 7 Bit links ab geschnitten werden Die Zahl 233 f hrt so zur Ausgabe des Zeichens Nr 233 128 105 Die Zahl 33 wird als Zeichen Nr 128 33 95 dem Unterstrich ausgegeben Wie man an der Rechnung erkennt werden Zeichen vom Prozessor wie ganze Zahlen behandelt und erst bei der Ausgabe einer Zahl oder einem ASCII Zeichen zugeordnet Es ist zu erwarten da auf Systemen mit 8 bit oder 16 bit Zeichens tzen die Grenze h her liegt aber die Arbeitsweise bleibt Manchmal will man ein Byte wahlweise als Ganzzahl oder als Zeichen auffassen aber das geh rt zu den ber chtigten Tricks in C Meint man den Buchstaben a sollte man auch a schreiben denn der Gebrauch der Nummer 97 anstelle des Zeichens setzt voraus dass das System auf dem das Programm ausgef hrt wird den ASCII Zeichensatz verwendet wo mit die Portabilit t des Programms eingeschr nkt wird Das Ausgabeger t empf ngt nur die Nummer des auszugebenden Zeichens gem f seiner Zeichensatz Tabelle ASCII ROMANS die Umwandlung des Wertes entsprechend seinem Typ ist Aufgabe der Funktion printf 3 Boolescher Typ Eine Gr e vom Typ boolean oder 1ogical kann nur die Werte t rue wahr richtig oder false falsch annehmen In C werden statt des booleschen Typs die Integerwerte 0 false und nicht 0 true verwendet Verwirrend ist dass viele Funktionen bei Erfolg den We
380. te einen um g ngige Optionen er weiterten Die Option g veranla t den Compiler zus tzliche Informationen f r den symbo lischen Debugger zu erzeugen Weitere Optionen sind e y verbose f hrt zu etwas mehr Bemerkungen beim bersetzen o output benennt die ausf hrbare Datei mit dem auf die Option folgenden Namen meist derselbe wie die Quelle nur ohne Kennung cc o myprogram myprogram c c h rt vor dem Linken auf erzeugt Objektfile mit der Kennung o p profile erzeugt beim Ablauf des Programmes eine Datei mon out das mit dem Profiler prof 1 ausgewertet werden kann um Zeitinformationen zum Programm zu erhalten e O optimiert das ausf hrbare Programm oder auch nicht Der Quelltext des C Programmes steht in der Datei source c die einen beliebigen Namen tragen kann nur sollte der Name mit der Kennung c enden Die anschlie ende Option 1m fordert den Linker auf die mathematische Standard Bibliothek einzubinden Die Opti on L lib wendet sich ebenfalls an den Linker und teilt ihm mit dass sich im Verzeich nis 1ib weitere Bibliotheken befinden Die Reihenfolge in der Bibliotheken eingebunden werden ist wichtig Die Option I veranlasst den Pr prozessor Include Dateien auch im aktuellen Verzeichnis zu suchen was er nicht immer automatisch tut Es k nnte auch ein anderes Verzeichnis angegeben werden Die Option DMAX 100 definiert eine symbolische Konstante namens MAX und weist ihr den Wert 100 zu
381. tei a out 4 und das beim Zu sammenbruch erzeugte Corefile core 4 zur ck Er promptet mit gt Wir w hlen mit der Eingabe s Einzelschritt Ausf hrung Mehrmals mit RETURN weitergehen bis Aufforderung zur Eingabe von a kommt kein Prompt Irgendeinen Wert f r a eingeben Fehlermeldung des Debuggers Bus error Wir holen uns weitere Informationen vom Debugger T stack viewing S Einzelschritt q quit 20Real programmers can read core dumps 1 2 PROGRAMMER S WORKBENCH 45 Nachdem wir wissen da der Fehler nach der Eingabe von a auftritt schauen wir uns die Zeile mit scanf a an und bemerken da wir der Funktion scanf 3 eine Variable statt eines Pointers bergeben haben man scanf oder im Anhang nachlesen Wir ersetzen also a durch amp a Das Compilieren erleichtern wir uns durch make 1 Wir schreiben eine Datei namens makefile mit folgenden Zeilen fehler fehler c cc fehler c o fehler und rufen anschlie end nur noch das Kommando make 1 ohne Argumente auf Das Er gebnis ist ein lauff higes Programm mit Namen fehler Der Aufruf von fehler f hrt bei sinnvollen Eingaben zu einer Ausgabe die richtig sein k nnte Wir haben aber noch einen Denkfehler darin Statt der Summe wird der Integer Quotient berechnet Wir berichtigen auch das und testen das Programm mit einigen Eingaben Da unser Quelltext richtig zu sein scheint versch nern wir seine vorl ufig endg ltige Fassung mit dem Beautifier cb 1
382. ten so einfach wie m glich formuliert sein Mehrfache Bedingungen sollten darauf untersucht werden ob sie durch einfache ersetzt werden k nnen Schleifen sollten m glichst dadurch beendet werden da die Kontrollvariable den Wert Null und nicht irgendeinen anderen Wert erreicht Kontrollvariable k nnen auch heruntergez hlt werden statt herauf Eine Bedingung mit mehreren ands oder ors wird so lange ausgewertet bis die Richtigkeit oder Falschheit des gesamten Ausdrucks erkannt ist Sind mehrere Bedingungen durch or verbunden wird die Auswertung nach Erkennen des ersten richtigen Gliedes abgebrochen Zweckm ig stellt man das Glied das am h ufigsten richtig ist an den Anfang Umgekehrt ist ein Ausdruck mit durch and verbundenen Gliedern falsch sobald ein Glied falsch ist Das am h ufigsten falsche Glied geh rt an den Anfang hnliche berlegungen gelten f r die switch Anweisung Die h ufigste Auswahl sollte als erste abgefragt werden Ist das der default Fall kann er durch eine eigene i f Abfrage vor der Auswahl abgefangen werden berfl ssige Typumwandlungen insbesondere die unauff lligen impliziten sollten zumindest in Schleifen vermieden werden Der Typ numerischer Konstanten sollte von vorn herein zu den weiteren Operanden passen Beispielsweise f hrt Float fe g f 1 2345 zu einer Typumwandlung von fin double und einer R ckwandlung des Ergebnisses in float da Gleitkommakonstanten standardm ig vom Typ d
383. terhin zur Verf gung In dem Kopf der for Schleife l sst sich allerhand unterbringen auch Anweisungen die mit der Schleife nichts zu tun ha ben Das w re schlechter Stil Ist die Eintritts oder R cksprungbedingung immer erf llt bleibt der Computer in der Schleife gefangen man hat eine ewige Schleife programmiert Das kann gewollt sein ist aber oft ein Programmierfehler Schleifen mit der Bedingung mitten im Schleifenrumpf sind denkbar und kommen vor jedoch selten Mehrere Ausg nge sind erlaubt verringern aber die bersicht und sind spar sam zu verwenden Bei der Behandlung von Ausnahmen Division durch Null braucht man sie manchmal Das Hineinspringen mitten in den Schleifenrumpf ist m glich gilt aber als schwerer Stilfehler Die Anweisung break im Rumpf f hrt zum sofortigen und endg ltigen Verlassen einer Schleife Die Anweisung continue bricht den augenblicklichen Durchlauf ab und springt zu r ck vor die Schleife bei der for Schleife vor die Initialisierung Der Systemaufruf exit 2 veranlasst den sofortigen Abbruch des ganzen Programmes ist also f r unheilbare Ausnah mezust nde zu gebrauchen Notschlachtung In vielen Schleifen z hlt man die Anzahl der Durchl ufe und verz hlt sich dabei oft um eins Die zugeh rige Variable ist der Schleifenz hler Auf seine Initialisierung ist zu achten Der Schleifenz hler steht in und nach der Schleife f r Rechnungen zur Verf gung anders als in FORTRAN Schleifen d rfen
384. tet werden if Ausdruck einzelne Anweisung x oder if Ausdruck Block von Anweisungen Verzweigung C Bei einer Verzweigung branch entscheidet sich der Computer in Ab h ngigkeit von einer Bedingung in einem von zwei Programmzweigen weiterzumachen Im Gegensatz zur Schleife kommt kein R cksprung vor Verzweigungen d rfen geschachtelt wer den Dem Computer macht das nichts aus aber vielleicht verlieren Sie die bersicht Oft aber nicht notwendigerweise treffen die beiden Zweige im weiteren Verlauf wieder zusammen Die Syntax sieht folgenderma en aus if Ausdruck Block 1 else Block 2 Es wird also stets entweder Block 1 oder Block 2 ausgef hrt Auswahl Stehen am Verzweigungspunkt mehr als zwei Wege offen so spricht man von einer Auswahl selection Sie l sst sich grunds tzlich durch eine Schachtelung einfacher Verzweigungen mitif else darstellen das ist jedoch un bersichtlich Zur Konstruktion einer Auswahl braucht man die Schl sselw rter switch case break und default Die Syntax ist die folgende switch x case a Anweisungsfolge 1 break case b case Anweisungsfolge 2 break default Anweisungsfolge 3 Die Variable x nur vom Typ int oder char wird auf bereinstimmung mit der typgleichen Konstanten a gepr ft Falls ja wird die Anweisungsfolge 1 ausgef hrt und infolge der break Anweisung die Auswahl verlassen Stimmt x nicht mit a berein oder fehlt nach case a da
385. tgliedern protected Deklaration von Klassenmitgliedern public Deklaration von Klassenmitgliedern template Deklaration eines Templates Klasse this Pointer auf Objekt throw Ausnahmebehandlung try Ausnahmebehandlung virtual Deklaration Dar ber hinaus verwenden einige Compiler weitere Schl sselw rter asm Assembler Aufruf innerhalb einer C oder C Quelle bool logischer oder boolescher Typ cdecl Aufruf einer Funktion nach C Konventionen const cast cast Operator f r const Werte dynamic cast cast Operator entry war in K amp R C f r k nftigen Gebrauch vorgesehen explicit Konstruktor Vereinbarung export Vereinbarung bei Klassen Templates false boolesche Konstante far Typzusatz unter MS DOS fortran Aufruf einer Funktion nach FORTRAN Konventionen huge Typzusatz unter MS DOS mutable Typattribut namespace Vereinbarung des Geltungsbereiches von Namen near Typzusatz unter MS DOS pascal Aufruf einer Funktion nach PASCAL Konventionen reinterpret_cast cast Operator static_cast cast Operator true boolesche Konstante typeid Operator zum Ermitteln des Typs typename Alternative zum Schliisselwort class using Deklaration in Verbindung mit namespace wchar_t Typ wide character literal 200 ANHANGD C LEXIKON D 2 Operatoren Die Operatoren von C C sind im folgenden ihrem Vorrang nach geordnet h chster Rang Bindungskraft zuoberst Alle Operatoren eines Abschnitts haben gleichen Rang b
386. this license 2 VERBATIM COPYING You may copy and distribute the Document in any medium either commercially or non commercially provided that this license the copyright notices and the license notice saying this license applies to the Document are reproduced in all copies and that you add no other conditions whatsoever to those of this license You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute However you may accept compensation in exchange for copies If you distribute a large enough number of copies you must also follow the conditions in section 3 You may also lend copies under the same conditions stated above and you may publicly display copies 3 COPYING IN QUANTITY If you publish printed copies or copies in media that commonly have printed covers of the Document numbering more than 100 and the Document s license notice requires Cover Texts you must enclose the copies in covers that carry clearly and legibly all these Cover Texts Front Cover Texts on the front cover and Back Cover Texts on the back cover Both covers must also clearly and legibly identify you as the publisher of these copies The front cover must present the full title with all words of the title equally prominent and visible You may add other material on the covers in addition Copying with changes limited to the covers as long as they preserve the title of the Document and s
387. ting system command osc Privacy message pm Application program command apc No break space Inverted exclamation mark Cent sign Pound sign Currency sign k nftig Euro Yen sign Broken bar Section sign Diaresis Copyright sign Feminine ordinal indicator Left pointing double angle quotation mark Not sign Soft hyphen Registered sign Overline Degree sign Plus minus sign Superscript two Superscript three Acute accent Micro sign Pilcrow sign Middle dot Cedilla Superscript one Masculine ordinal indicator Right pointing double angle quotation mark Vulgar fraction one quarter Vulgar fraction one half Vulgar fraction three quarters Inverted question mark Latin capital letter a with grave Latin capital letter a with acute Latin capital letter a with circumflex Latin capital letter a with tilde Latin capital letter a with diaresis Latin capital letter a with ring above Latin capital letter ae Latin capital letter c with cedilla Latin capital letter e with grave Latin capital letter e with acute Latin capital letter e with circumflex Latin capital letter e with diaresis Latin capital letter i with grave Latin capital letter i with acute Latin capital letter i with circumflex Latin capital letter i with diaresis B 4 LATIN 1 150 8859 1 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 2
388. tistik c definiert wird main ruft seinerseits die Funktionen puts exit sscanf 28 KAPITEL 1 PROGRAMMIEREN IN C C und printf auf die in statistik c nicht definiert werden da sie Teil der Standardbi bliothek sind Die Funktionen mwert und varianz werden ebenfalls aufgerufen und nicht definiert da sie aus einer Privatbibliothek stammen Das Werkzeug cxref 1 erzeugt zu einer Gruppe von C Quellfiles eine Kreuzreferenzlis te aller Symbole die nicht rein lokal sind Der Aufruf cxref fehler c gibt nach stdout eine Liste aus deren erste Zeilen so aussehen fehler c SYMBOL FILE FUNCTION LINE BUFSIZ usr include stdio h x10 EOF usr include stdio h 70 FILE usr include stdio h x18 78 123 127 128 201 223 FILENAME MAX usr include stdio h 67 FOPEN_MAX usr include stdio h x68 L_ctermid usr include stdio h 193 L_cuserid usr include stdio h 194 L_tmpnam usr include stdio h x61 NULL usr include stdio h 35 x36 PI fehler c Ger x27 P_tmpdir usr include stdio h 209 SEEK_CUR usr include stdio h x55 SEEK END usr include stdio h x56 SEEK SET usr include stdio h 53 54 MAX usr include stdio h 63 64 CLASSIC ANSI TYPES usr include stdio h 162 Durch die include Datei stdio h und gegebenenfalls durch Bibliotheksfunktionen geraten viele Namen in das Programm von denen man nic
389. tled Endorsements Such a section may not be included in the Modified Version N Do not retitle any existing section to be entitled Endorsements or to conflict in title with any Invariant Section O Preserve any Warranty Disclaimers Ifthe Modified Version includes new front matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document you may at your option designate some or all of these sections as invariant To do this add their titles to the list of Invariant Sections in the Modified Version s license notice These titles must be distinct from any other section titles You may add a section entitled Endorsements provided it contains nothing but endorse ments of your Modified Version by various parties for example statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard You may add a passage of up to five words as a Front Cover Text and a passage of up to 25 words as a Back Cover Text to the end of the list of Cover Texts in the Modified Version Only one passage of Front Cover Text and one of Back Cover Text may be added by or through arrangements made by any one entity If the Document already includes a cover text for the same cover previously added by you or by arrangement made by the same entity you are acting on behalf of you may not add another but you may replace the old one on explicit permission f
390. ttach the following notices to the program It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty and each file should have at least the copyright line and a pointer to where the full notice is found lt one line to give the program s name and a brief idea of what it does gt Copyright C lt year gt lt name of author gt This program is free software you can redistribute it and or modify it under the terms ofthe GNU General Public License as published by the Free Software Foun dation either version 2 ofthe License or at your option any later version This program is distributed in the hope that it will be useful but WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY or FIT NESS FOR A PARTICULAR PURPOSE See the GNU General Public License for more details You should have received a copy of the GNU General Public License along with this program if not write to the Free Software Foundation Inc 59 Temple Place Suite 330 Boston MA 02111 1307 USA Also add information on how to contact you by electronic and paper mail If the program is interactive make it output a short notice like this when it starts in an interactive mode Gnomovision version 69 Copyright C lt year gt lt name of author gt Gnomovision comes with ABSOLUTELY NO WARRANTY for details type show w This is free software and you are welcome to redistribute
391. uch ber die nderungen an den Texten Es erm glicht ltere Versionen wiederherzustellen ohne da diese vollst ndig gespei chert zu werden brauchen Speichern von Differenzen Es verhindert gleichzeitige schreibende Zugriffe mehrerer Benutzer auf denselben Text Sowie es um mehr als Wegwerfprogramme geht sollte man make 1 und RCS einsetzen Der geringe Aufwand zum Einarbeiten wird bei der weiteren Arbeit mehr als wett gemacht Arbeiten mehrere Programmierer an einem Projekt kommt man um RCS oder hnliches nicht herum Beide Werkzeuge sind auch f r Manuskripte oder WWW Dateien zu verwenden RCS ist in den meisten Linux Distributionen enthalten Man beginnt folgenderma en Unterverzeichnis anlegen hineinwechseln Mit einem Editor die erste Fassung des Quelltextes schrei ben Irgendwo im Quelltext z B im Kommentar sollte Header home debian unix unix8 tex v 1 1 1 1 2005 02 06 20 01 11 wulf Exp oder Id unix8 tex v 1 1 1 1 2005 02 06 20 01 11 wulf Exp vorkom men siehe unten Dann bergibt man mit dem Kommando ci filename check in die Datei dem RCS Dieses erg nzt die Datei durch Versionsinformationen und macht eine nur lesbare RCS Datei 444 mit der Kennung v daraus Die urspr ngliche Datei l schen Mit dem Kommando co filename check out ohne v bekommt man eine Kopie sei ner Datei zur ck und zwar nur zum Lesen Diese Kopie kann man mit allen UNIX Werkzeugen bearbeiten nur das Zur
392. uch unter printf 3 oder scanf 3 L nge B ndigkeit Un terdr ckung f hrender Nullen Vorzeichenangabe k nnen festgelegt werden D 5 Include Dateien Die Standard Include Dateien enthalten in lesbarer Form Definitionen von Konstanten und Typen Deklarationen von Funktionen und Makrodefinitionen Sie werden von Systemaufru fen und Bibliotheksfunktionen ben tigt Bei der Beschreibung jeder Funktion im Referenz Handbuch ist angegeben welche Include Dateien jeweils eingebunden werden m ssen Ge br uchliche Include Dateien sind e ctype h Definition von Zeichenklassen conv 3 curses h Bildschirmsteuerung curses 3 errno h Fehlermeldungen des Systems errno 2 fcntl h Steuerung des Dateizugriffs cnt1 2 open 2 malloc h Speicherallokierung malloc 3 math h mathematische Funktionen log 3 sqrt 3 floor 3 memory h Speicherfunktionen memory 3 search h Suchfunktionen bsearch 3 signal h Signalbehandlung signal 2 stdio h Ein und Ausgabe printf 3 scanf 3 fopen 3 string h Stringbehandlung string 3 time h Zeitfunktionen ctime 3 varargs h Argumentenliste variabler L nge vprint 3 sys ioctl h Ein und Ausgabe ioct1 2 sys stat h Zugriffsrechte chmod 2 mkdir 2 stat 2 sys types h verschiedene Deklarationen chmod 2 getut 3 Auch diese Liste ist vom Compiler und damit von der Hardware abh ngig So findet
393. uch vor dass ein Operand f r einen Programmaufruf konstant ist beim n chsten Aufruf aber einen anderen Wert hat wie der Mehrwertsteuersatz Man tut gut s mtliche Operanden eines Programmes an wenigen Stellen zusammenzu fassen und zu deklarieren In den Funktionen oder Prozeduren sollen keine geheimnisvollen Zahlen magic numbers auftauchen sondern nur Namen Konstanten die im Programm ber ihren Namen aufgerufen werden hei en symbolische Konstanten F r den Computer sind Konstanten Bestandteil des Programmcodes das unter UNIX in das Codesegment des zugeh rigen Prozesses kopiert und vor schreibenden Zugriffen ge sch tzt wird Diese Konstanten werden auch Literale genannt Variable hingegen belegen Speicherpl tze im User Data Segment deren Adressen das Programm kennt und auf die es lesend und schreibend zugreift In ANSI C sind die Typ Attribute type qualifier const und volatile eingef hrt wor den die eine bestimmte Behandlung der zugeh rigen Operanden erzwingen Sie werden sel ten gebraucht 1 8 6 2 Typen Grundbegriffe Jeder Operand geh rt einem Typ an der ber den Wertebereich siehe usr include limits h die zul ssigen Operationen den Speicherbedarf entscheidet Die Typen werden in drei Gruppen eingeteilt einfache skalare oder elementare Typen zusammengesetzte oder strukturierte Typen Pointer Adressvariable In C gibt es nur konstante Typen das hei t ein Operand der einmal als ganzzahli
394. ues for type _IOFBF 0000 _IOREAD 0001 _IOWRT 0002 _IONBF 0004 _IOMYBUF 0010 _IOEOF 0020 _IOERR 0040 _IOLBF 0200 _IORW 0400 fine fine fine fine fine mh d 0 ine ine Fh Fh ine ndef fine dif ndef fine ait NULL NULL 0 stdin stdout stderr amp iob amp iob amp Lob 1 1 Fine 0 fine 1 fine 2 li ge pu ndef fine nt t p tc xX Fine p int p gt _ptr fine getchar getc fine putchar x putc fine clearerr p lt 0 _filbuf p p ent lt flsbuf unsigned char void LO le s output will be buffered _IONBF IOLBF and IOFBF in setvbuf lags int x p gt _ptr 0 x p unsigned char stdin x stdout p gt _flag amp _IOEOF x ERR 132 KAPITEL 1 PROGRAMMIEREN IN C C define feof p p flag amp IOEOF define ferror p p flag amp IOERR define fileno p file else void clearerr endif not lint ca extern FILE _iob _NFILE extern FILE fopen xfdopen xfreopen popen extern FILE xtmpfile extern long ftell extern void rewind setbuf extern char ctermid cuserid xfgets gets extern char tmpnam extern unsigned char x bufendtab endif NFILE Quelle 1 74 Include Datei usr include stdio h gek rzt D
395. uf verschiedene Wei sen gel st werden Der eine bevorzugt viele kleine Programmbl cke der andere wenige gro e Einer arbeitet gern mit Men s ein anderer lieber mit Kommandozeilen Einer schreibt einen langen Kommentar an den Programmanfang ein anderer zieht kurze in den Programmcode eingestreute Kommentare vor Solange die genannten objektiven Ziele erreicht werden ist gegen einen pers nlichen Stil nichts einzuwenden Le style c est l homme 1 1 8 Programmiertechnik Bei kurzen Programmen wie sie in diesem Buch berwiegen setzt man sich oft gleich an das Terminal und legt los Besonders jugendliche BASIC Programmierer neigen zu dieser Programmiertechnik Wenn man sich das nicht schnellstens abgew hnt kommt man nicht weit Um wirkliche Programme zu schreiben muss man systematisch vorgehen und viel Kon zeptpapier verbrauchen ehe es ans Hacken geht Es gibt mehrere Vorgehensweisen Eine verbreitete sieht f nf Stufen vor waterfall approach 14 KAPITEL 1 PROGRAMMIEREN IN C C Aufgabenstellung Vorstudien Analyse Formulierung Entwurf Struktur Anpassen an Werkzeuge wie make 1 RCS CVS Umsetzung in eine Programmiersprache Codierung Implementation Test Fehlersuche Pr fungen Messungen Vergleich mit Punkt 1 Betrieb und Pflege Wartung Updating Fehler Management Die Programmiersprache die f r den Anf nger im Vordergrund des Programmierens steht kommt erst an dritter Stelle Wenn die beiden vora
396. un bekannten Typ zeigt Wenn es dann zur Sache geht legt man den Typ mittels des cast Operators fest Fr her nahm man daf r Pointer auf den Typ char denn dieser Typ belegt genau ein Byte woraus man jeden anderen Typ aufbauen kann Nach ANSI ist hierf r der Typ void zu w hlen Jeder Pointer kann ohne Verlust an Information per cast in einen Pointer auf void verwandelt werden und umgekehrt Die Pointer belegen ja selbst unabh ngig vom Typ auf den sie zeigen gleich viele Bytes Im folgenden Beispiel wird eine Funktion xread vorgestellt die jede Tastatureingabe als langen String bernimmt und dann die Eingabe erforderlichenfalls nach Pr fung in einen gew nschten Typ umwandelt Die Funktion ist ein Ersatz f r scanf 3 mit der M g lichkeit fehlerhafte Eingaben nach Belieben zu behandeln Als erstes ein Programmrahmen der die Funktion xread aufruft dann die Funktion Fkt xread zum Einlesen und Umwandeln von Strings x mit Rahmenprogramm main zum Testen 1992 05 11 include lt stdio h gt int xread void char typ void exit Systemaufruf x int main int error 0 int x double y char z 80 Integer Eingabe x printf Bitte Ganzzahl eingeben Wn if xread amp x int printf Die Eingabe war d n x else puts Fehler von xread error I 1 11 WEITERE C PROGRAMME 149 Gleitkomma Eingabe x printf Bitte G
397. und C Das Lehrbuch sorgt f r den berblick die Referenz vermittelt Einzelheiten die FAQ beant wortet die offen gebliebenen Fragen FAQs zu C und C finden sich unter www eskimo com scs c faq top html die FAQ der Newsgruppe comp lang c www info2 informatik uni wuerzburg de dclc faq die FAQ der Newsgruppe de comp lang c www faqs org faqs C faq learn www cerfnet com mpcline c t4 faq lite rtfm mit edu pub usenet by hierarchy news answers C faq bzw C faq Langfristig sind auch die genannen Newsgruppen eine Quelle der Erleuchtung aber man sollte Grundkenntnisse erworben haben ehe man dort mitmischt 1 1 2 Warum braucht man Programmiersprachen Von einer Anweisung in einer h heren Programmiersprache bis zu den Nullen und Einsen im Befehlsregister des Prozessors ist ein weiter Weg Wir wollen diesen Weg schrittweise an Hand eines kleinen aber weltweit bekannten Programmes verfolgen Das Programm schreibt den Gru Hallo Welt auf den Bildschirm Weitere Exemplare dieses Programmes in ber 200 Programmiersprachen finden sich bei der Louisiana Tech University unter http www latech edu acm HelloWorld shtml Als erstes das Programm so wie es ein C Programmierer schreibt lUnter www ionet net timtroyr funhouse beer html liegt eine hnliche Samm lung 1 1 GRUNDBEGRIFFE 3 hallo c C Programm finclude lt stdio h gt int main printf Hallo Welt n return 0
398. und Telnet RFC 137 werden vorgeschlagen und diskutiert IBM entwickelt das Konzept des virtuellen Speichers und 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 229 stellt die 8 Zoll Floppy Disk vor Xerox ROBERT METCALFE DEC und Intel entwickeln den Ethernet Standard Das ARPANET wird der ffentlichkeit vorgestellt Ein Student namens STEPHAN G WOZNIAK l tet sich einen Computer zusammen der den Smoke Test nicht bersteht In der Bundesrepublik arbeiten rund 8 200 Computer Erster wissenschaftlicher Taschenrechner Hewlett Packard 35 Erste internationale Teilnehmer am ARPANET NORSAR Norwegian Seismic Array Norwegen und U College of London Der erste programmierbare Taschenrechner kommt auf den Markt Hewlett Packard 65 Preis 2500 DM UNIX wird ver ffentlicht Version 6 Beginn der BSD Entwicklung Die Zeitschrift Byte wird gegr ndet Erste m ig erfolgreiche Personal Computer Xerox Altair Die Firma Microsoft Corporation von WILLIAM HENRY GATES III und PAUL ALLEN gegr ndet STEVEN P JOBS und STEPHAN G WOZNIAK gr nden die Firma Apple und bauen den Apple I Er kostet 666 66 Dollar ALAN SHUGART stellt die 5 25 Zoll Diskette vor Die nichtprozedurale Datenbanksprache SQL entwickelt von EDGAR F CODD bei IBM wird ver ffentlicht WHITFIELD DIFFIE und MARTIN E HELLMANN ver ffentlichen die erste Arbeit ber unsymmetrische Verschl sselung ROBERT E KAHN und VINTON GRA
399. und deklarieren zugleich eine Variable namens mitglied struct char nachname 32 char vorname 32 int beitrag Mitglied Man kann auch zuerst nur die Struktur definieren und in einem zweiten Schritt Variablen vom Typ dieser Struktur struct mg char nachname 32 char vorname 32 int beitrag struct mg Mitglied Jede Datei ist eine Struktur namens FILE die in der include Datei stdio h deklariert ist typedef struct int OD unsigned char ptr unsigned char base short flag char file FILE Mit dieser typedef Deklaration wird ein Strukturname FILE vereinbart der in weiteren Deklarationen als Typ auftritt FILE ist keine Variable sondern ein Synonym f r obige Struktur Anschlie end lassen sich Variable vom Typ FILE oder auch Dateipointer dekla rieren FILE myfile yourfile FILE xfp Dies ist ein dritter Weg den wir im Abschnitt Weitere Namen f r Typen auf Seite 61 kennen lernen In C C sind alle Dateien ungegliederte Folgen von Bytes Bytestreams so dass es kei nen Unterschied zwischen Textfiles und sonstigen Dateien gibt Die Gliederung erzeugt das lesende oder schreibende Programm Anders als in PASCAL ist daher der Typ FILE nicht ein FILE of irgendetwas Eine besondere Struktur ist das Bitfeld Die Strukturkomponenten sind einzelne Bits oder Gruppen von Bits die ber ihren Komponentennamen angesprochen werden Eine Bitfeld Struktur darf keine weitere
400. und ihre Adresse dem Pointer py zuweisen Damit 6Es gibt nat rlich auch Adresskonstanten deren Wert w hrend des Programmablaufs von der Initialisierung abgesehen konstant bleibt 27Der in ANSI C eingef hrte Pointer auf den Typ void ist ein Pointer der zun chst auf keinen bestimmten Typ zeigt 28Konstanten sind Teil des Programmcodes 58 KAPITEL 1 PROGRAMMIEREN IN C C enth lt auch er einen Wert und zwar die Adresse von x und darf beliebig weiterverwen det werden Ausgegeben wird zweimal der Wert 12 Die Zuweisung des Wertes von x an py ist berfl ssig da py auf die Adresse zeigt unter der x abgelegt ist Das Beispiel verdeut licht den Unterschied zwischen Deklaration und Definition und zeigt dass man eine Variable genauso einen Pointer au er auf der linken Seite einer Zuweisung erst dann verwenden darf wenn sie einen Wert hat Der Name von Arrays ist die Adresskonstante ihres ersten Elementes Index 0 Die Bezeichnung des Arraynamens als Pointer ist nicht korrekt aber gebr uchlich Pointer als Adress Variable k nnen auf der linken Seite einer Zuweisung auftauchen ein Arrayna me ist wie jede Konstante als Linkswert ungeeignet Der Name von Funktionen ohne das Klammernpaar ist die Adresskonstante mit der Einsprungadresse der Funktion auf die erste ausf hrbare Anweisung Ein Pointer der auf die Adresse NULL verweist wird Nullpointer genannt und zeigt auf kein g ltiges Datenobjekt Wie im r
401. und schreibe das Ergebnis in die Speicherstelle von x Damit erh lt die Variable x einen neuen Wert Bei einer Gleichung gibt es weder alt noch neu die Zeit spielt keine Rolle Bei einer Zuweisung gibt es ein Vorher und Nachher Die Formel 1422 5 1 2 hingegen ist als Gleichung in Ordnung nicht aber als Zuweisung da auf der linken Seite ein Ausdruck steht und nicht ein einfacher Variablenname Wegen dieser Diskrepanz zwischen Gleichung und Zuweisung ist letztere etwas umstritten Ihre Begr ndung kommt nicht aus der Problemstellung sondern aus der Hardware n mlich der Speicherbehandlung Und ge rade diese m chte man mit den h heren Programmiersprachen verdecken 1 3 BAUSTEINE EINES QUELLTEXTES 65 1 3 7 3 Arithmetische Operationen Die arithmetischen Operationen sind Vorzeichenumkehr un rer Operator Addition Subtraktion bin rer Operator Multiplikation Division Modulus Divisionsrest nur f r ganze Zahlen nkrement Dekrement Inkrement und Dekrement sind Abk rzungen Der Operator kann vor oder nach dem Ope randen Pr fix Postfix stehen Der Ausdruck i gibt den Wert von i zur ck und erh ht ihn dann um eins Der Ausdruck i erh ht den Wert von i um eins und gibt dann den erh hten Wert zur ck F r das Dekre ment gilt das Entsprechende Der kompilierte Code ist effektiver als der des quivalenten Ausdrucks i i 1 Spielt es vom Programm her keine Rolle ob man den
402. ung if fabs a EPS puts WARNUNG a nahe Null als Null angenommen if fabs b EPS puts WARNUNG auch b nahe Null Unsinn done else printf Loesung 1f n c b done else Berechnung der Diskriminanten d 7 d b b 4 0 ax c h ata 2 Fall eine oder zwei reelle Loesungen Tf d S Uy 4 S sqrt d xl b s h x2 b s Zb puts Eine oder zwei reelle Loesungen printf x1 lf n x1 printf x2 1lf n x2 178 KAPITEL 1 PROGRAMMIEREN IN C C done else 3 Fall konjugiert komplexe Loesungen x z 0 b h z 1 sqrt d h puts Konjugiert komplexe Loesungen printf x1 1f 1f Nn z 0 z 1 printf x2 1f 1f n z 0 z 11 done Funktion done zur Beendigung des Programms x int done return 0 Quelle 1 108 C Programm Quadratische Gleichung mit reellen Koeffizienten und komplexen L sungen aus FORTRAN bertragen Bei der bertragung haben wir keinen Gebrauch von unseren Kenntnissen ber qua dratische Gleichungen gemacht sondern ziemlich schematisch gearbeitet Mathematische Kenntnisse sind trotzdem hilfreich auch sonst im Leben Wir erh hen den Reiz der Aufgabe indem wir auch komplexe Koeffizienten zulassen Schlie lich wollen wir das Programm als Funktion Subroutine schreiben die von einem bergeordneten Programm auf
403. ung in eine Programmiersprache Codierung Wie verh lt sich C zu C Manche sagen dass C eine neue von C v llig unabh n gige Sprache sei Andere wiederum betrachten C als eine umfangreiche Erweiterung von C Auf jeden Fall sind die Kenntnisse die man beim Lernen von C erworben hat auch in C n tzlich und keinesfalls berholt C Compiler bersetzen die meisten C Programme anstandslos Zu feineren Unterschieden und Unvertr glichkeiten siehe DAVID R TRIBBLE http david tribble com text cdiffs htm F r numerische Aufgaben ist C in der Universit t Karlsruhe um eine Klassenbiblio thek namens C XSC Extended Scientific Calculation mit Datentypen wie komplexen Zah len Vektoren Matrizen und Intervallen samt den zugeh rigen Operationen erg nzt worden siehe das Buch von RUDI KLATTE et al SMALLTALK ist eine von Grund auf neu entwickelte streng objektorientierte Sprache im Gegensatz zu C JAVA wurde von der Firma SUN entwickelt Hier das Hello World Programm in JAVA in C lernen wir es in Abschnitt 1 62 auf Seite 109 kennen class HelloWorld public static void main String args for System out print Hello World Quelle 1 6 JAVA Programm Hello World hnlichkeiten zu C sind erkennbar die JAVA Entwickler waren vermutlich C Programmierer Auf die brigen 989 Programmiersprachen soll aus Platzgr nden nicht eingegangen werden Braucht man berhaupt mehrere Sprachen Einige Sprachen w
404. ung und Knopf erzeugt und das Signal clicked welches der Knopf bei Bet tigung aussendet mit dem klasseneigenen Slot tschuess verbunden Die ser Slot sendet das ebenfalls klasseneigene Signal neuerText aus das vorher mit dem Slot set Text des Beschriftungsfeldes verbunden wurde Dieser Slot setzt seinem Namen gem den Text des Beschriftungsfeldes neu Gleichzeitig wird ein Timer erzeugt und gest artet der nach 1500 ms das Signal timeout aussendet welches wiederum mit dem Slot quit der Hauptapplikation verbunden wird Die Funktion dieses Slots ergibt sich eben falls aus seinem Namen Dieses Basisprogramm l t sich unter Zuhilfename der exzellenten Online Dokumentation zu t die sich auf dem Webserver von Troll Tech www troll no findet schnell erweitern Probieren Sie es aus Die Programmierung mit Qt ist auch f r C Einsteiger und Anf nger in der X11 Programmierung einfach zu erlernen und zeitigt schnell Erfolgserlebnisse 1 8 berladen von Operatoren Die arithmetischen Operationen auf Ganzzahlen unterscheiden sich von denen auf Gleitkom mazahlen insbesondere die Division Dennoch verwenden wir dieselben Operatoren Das Programm erkennt aus dem Zusammenhang welche Art von Operation gefragt ist Diese M glichkeit einem Operator je nach Zusammenhang verschiedene Bedeutungen Definitio nen zu geben ist in C verallgemeinert worden und l t sich auf fast jeden Operator und jede Funktion ausdehnen Wir sehe
405. ungen sind nicht so dringend Mit dem vi 1 erg nzen wir die fehlende geschweifte Klammer am Schlu Der Fehler h tte uns eigentlich nicht unterlaufen d rfen da der vi 1 eine Hilfe zur Klammerpr fung bietet Prozentzeichen Neuer Lauf von lint 1 fehler c 36 warning a may be used before set 33 warning d unused in function main 41 warning main returns random value to environment function returns value which is always ignored printf scanf Wir werfen die berfl ssige Variable d in der Deklaration heraus Nochmals lint 1 fehler c 36 warning a may be used before set 41 warning main returns random value to environment function returns value which is always ignored printf scanf Jetzt ignorieren wir die Warnung von lint 1 bez glich der Variablen a obwohl heimt cki scher Fehler aber das ahnen wir noch nicht Wir lassen kompilieren und rufen das kompi lierte Programm a out 4 auf cc fehler c a out Der Compiler hat nichts zu beanstanden Ersten Summanden eingeben Antwort memory fault oder Bus error core dumped Debugger einsetzen dazu nochmals mit der Option g und dem vom Debugger verwendeten Objektfile usr lib xdbend okom pilieren und anschlie end laufen lassen um einen aktuellen Speicherauszug Coredump zu erzeugen cc g fehler c usr lib xdbend o chmod 700 a out a out xdb Standardm ig greift der Debugger auf die ausf hrbare Da
406. unktion printf time h f r den Systemaufruf time und stdlib h f r die Funk tionen srandom und random ein Die Variable i ist ein Schleifenz hler x die jeweilige Zufallszahl und s der sogenannte Seed Samen auch Salz genannt den wir brauchen um den Zufallszahlengenerator zu starten Den Seed gewinnen wir aus der Systemuhr als Anzahl der Sekunden seit dem 1 Ja nuar 1970 0 Uhr GMT Damit ist sichergestellt da wir bei jedem Aufruf einen anderen Wert haben Die Syntax von time holt man sich mittels man 2 time Das Argument von time ist hier der Nullpointer Die Funktion srand oder srandom startet den Generator rand beziehungsweise random Beide Funktionspaare verwenden unterschiedliche Algorithmen siehe die zugeh rigen man Seiten Das Ergebnis des Generators wird modulo MOD genommen um den Zah lenbereich zu begrenzen Da wir Zahlen von 1 bis MOD die Grenzen eingeschlossen haben wollen addieren wir eine 1 hinzu Das Ergebnis dieser Rechnung wird wie blich mittels der Funktion printf auf stdout ausgegeben Wir wollen nun das Programm so umstricken da die Rechnung in einer Funktion zufallszahl durchgef hrt wird und das Hauptprogramm nur die Zahlen ausgibt random2 c zur Erzeugung von Zufallszahlen MAX Zufallszahlen von 1 bis MOD define MAX 100 define MOD 200 include lt stdio h gt include lt time h gt include lt stdlib h gt int zufallszahl int m Prototyp x int main
407. ura len Sprachen objektorientierte Programme Da der Ausgangspunkt die Aufgabenanalyse ist macht sich die Objektorientierung bei kleinen Programmen wo es nichts zu analysieren gibt nicht bemerkbar C und Objective C wurden entwickelt um ein besseres C zu sein dasselbe Ziel wie ANSI C die Datenabstraktion zu unterst tzen das objektorientierte Programmieren zu unterst tzen Als erstes ein Hallo Programm in C mit Objektorientierung und Klassen ist da noch nichts zu machen Hallo Welt in C include lt iostream h gt anstelle stdio h int main char v 20 cout Bitte Vornamen eingeben cin v cout Hallo v n return 0 Quelle 1 62 C Programm Hallo Welt Eine zweite Art des Kommentars Zeilenkommentar ist hinzugekommen Der Operator lt lt schreibt sein zweites Argument auf das erste hier der Standard Output Stream cout Der Operator gt gt schreibt sein erstes Argument den Standard Input Stream auf das zweite den String v Das Stream Konzept zur Ein und Ausgabe ist flexibler als das herk mmliche Datei Konzept f r den Programmierer ist die andere Syntax wichtig beachte kein Formatstring Der Operator wei aufgrund der Typen was er vor sich hat In C gibt es eine Vielzahl solcher Verbesserungen oder Erweiterungen von C aber sie sind nichts grunds tzlich Neues sie erfordern kein Umdenken sondern nur das Lesen des Referenzmaterials Obiges
408. uring A 225 Volkerding P 231 Wales J D 232 Weissinger J 225 Wirth N 8 240 Wozniak S G 229 Zemanek H 246 Zuse K 225 246 Sachverzeichnis Nib libe a 103 usr include limits h 50 usr lib libeurses a 106 define 129 205 ifdef 132 ifndef 132 include 130 205 undef 130 78 Header RCS 29 Id RCS 29 Log RCS 29 amp C 66 amp amp C 66 64 Bit Maschine 51 a out 19 44 Abstrakter Datentyp 109 access 38 action HTML 167 Adaptor 117 adb 23 admin 33 Adresskonstante 58 Adress bergabe 82 ALGOL 8 174 Algorithmus 178 Alias Anweisung FORTRAN 36 Allgemeinheit 178 ANSI C 9 Anweisung Alias A FORTRAN 36 C A 73 137 Compiler A 36 87 define A 129 include A 130 Kontrollanweisung 73 leere A C 73 Pr prozessor A 129 ar25 ar 1 107 Archiv Datei 25 102 argc 90 argc 37 Argumentvektor 90 Argumentz hler 90 argv 90 argv 97 Array A of characters 54 A von Funktionspointern 82 153 251 Array 53 Index 53 linearisieren 54 mehrdimensionales A 54 Name 54 Subarray 119 ASCII German ASCII 189 Steuerzeichen 190 Zeichensatz 180 Assembler 3 6 7 11 97 Assoziativit t 72 Ausdruck Ausdruck C 64 ausf hrbar 12 Ausgabe 69 122 Ausgang Schleife 75 Auswahl C 74 auto C 62 Backus Naur Form 47 BASIC 8 BCD System 180 Beautifier 20 Bedingte Bewertung 67 Bedingte Kompilation 132 Bedingung C 74 Bezug 85 Bibliothek 25 102 bin r kompatibel
409. utsch zwei Fremdsprachen beherrscht Wortschatz anfangs je 1000 Vokabeln erweiterbar Erste Frage Was geh rt alles zu einer Vokabel 1 2 Programmer s Workbench Unter der Werkbank des Programmierers werden UNIX Werkzeuge zusammengefa t die zum Programmieren ben tigt werden Auf Maschinen die nicht zur Programmentwicklung eingesetzt werden k nnen sie fehlen Das Werkzeug make 1 und die Revisionskontrolle sind auch bei Projekten au erhalb der Programmierung n tzlich vor allem beim Bearbeiten umfangreicher Manuskripte 1 2 PROGRAMMER S WORKBENCH 19 1 2 1 Nochmals die Editoren Editoren wurden bereits im UNIX Kapitel Abschnitt Writer s Workbench auf Seite er l utert Hier geht es nur um einige weitere Eigenschaften des Editors vi 1 die beim Schrei ben von Programmquellen von Belang sind Im Quellcode werden blicherweise Schleifenr mpfe und dergleichen um eine Tabula torbreite einger ckt die als Default 8 Leerzeichen entspricht Bei geschachtelten Schleifen st t der Text schnell an den rechten Seitenrand Es empfiehlt sich in dem entsprechenden Verzeichnis eine Datei exrc mit den Zeilen set tabstop 4 set showmatch set number anzulegen Die Option showmatch veranlafit den vi 1 bei jeder Eingabe einer rechten Klammer kurz zur zugeh rigen linken Klammer zu springen Die Option number f hrt zur Anzeige der Zeilennummern die jedoch nicht Bestandteil des Textes werden Eine Zeile set lisp ist eine Hi
410. ver parties who have received copies or rights from you under this license will not have their licenses terminated so long as such parties remain in full compliance 10 FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new revised versions of the GNU Free Do cumentation License from time to time Such new versions will be similar in spirit to the present version but may differ in detail to address new problems or concerns See http www gnu org copyleft Each version of the license is given a distinguishing version number If the Document specifies that a particular numbered version of this license or any later version applies to it you have the option of following the terms and conditions either of that specified version or of any later version that has been published not as a draft by the Free Software Foundation If the Document does not specify a version number of this license you may choose any version ever published not as a draft by the Free Software Foundation ADDENDUM How to use this license for your documents To use this license in a document you have written include a copy of the license in the Document and put the following copyright and license notices just after the title page Copyright OYEAR YOUR NAME Permission is granted to copy distribute and or modify this document under the terms of the GNU Free Documentation License Version 1 2 or any later version published by the Free Software F
411. verwaltung 158 Editor emacs 1 19 nedit 1 19 vi 1 19 Eindeutigkeit 178 Eingabe 69 122 Eingang Schleife 75 Endlichkeit 178 Entscheidbarkeit 179 enum C 56 envp 37 etch 232 Euro 232 exit 2 77 Exponent 52 Extended Scientific Computing 118 extern C 62 63 173 7719 90 19 fclose 70 fcntl h 38 Fehler Denkfehler 23 Fehlerfreiheit 12 140 Fehlermeldung 23 Grammatik F 23 Laufzeit F 23 logischer F 23 Modell F 23 semantischer F 23 Syntax F 23 Zaunpfahl F 77 Flag Variable 162 float C 52 Flussdiagramm 16 fopen 70 for Schleife C 75 fork 41 FORM Element 167 Formatstring 94 FORTRAN 7 48 Fortsetzungszeile C 46 fprintf 45 fputs 70 SACHVERZEICHNIS free 3 158 Freiburger Code 7 Funktion Stringfunktion 104 Funktion C Array von Funktionspointern 82 Bibliothek 25 102 Definition 81 Einsprungadresse 58 Funktion 81 137 grafische F 106 Input Output F 104 mathematische F 105 Pointer auf F 82 Prototyp 81 Speicherklasse 62 Standardfunktion 34 103 201 virtuelle F 111 Xlib F 162 gcc 20 gdb 23 Geltungsbereich 63 get 33 get HTML 167 gets 3 104 getut 45 Gleichung 64 gmtime 35 gnats 33 GNU Projekt 22 GNU Free Documentation License 218 GNU General Public License 214 goto C 77 gprof 24 Grafik 153 gzip 1 136 HASKELL 5 Hexadezimalsystem 180 HP SoftBench 33 huge Speichermodell 108 IEEE Std 1063 1987 135 if C 74 if else C 74 Inc
412. wie es sich geh rt mittels eines Kommentars das Verst ndnis erleichtern x Dies ist ein einfaches C Programm von hohem paedagogischen aber sonst keinem Wert int main return 255 x 255 groesster zulaessiger Wert x Quelle 1 77 C Programm einfachst Dieses Programm wird vom lint 1 gutgehei en Die Deklaration von main als int k nnte entfallen da sie unab nderlich ist aber wir wollen uns angew hnen alle Gr en ausdr cklich zu deklarieren Den R ckgabewert k nnen Sie sich mit dem Shell Kommando print nach der Ausf hrung anschauen Um etwas Vern nftiges zu tun mu das Programm um einige Zeilen angereichert werden Wir deklarieren eine int Variable namens i weisen ihr einen Wert zu definierende Dekla ration und verwenden die C Standardfunktion printf 3 f r die Ausgabe auf stdout den Bildschirm printf 3 erwartet als erstes und notwendiges Argument einen Formatstring dessen reichhaltige Syntax Sie im Referenz Handbuch finden Dies ist ein einfaches C Programm von hohem paedagogischen aber sonst fast keinem Wert x int main int i 53 printf nDer Wert betraegt Sd n i return i Quelle 1 78 C Programm einfach Nun soll auch der Pr prozessor Arbeit bekommen Wir definieren eine symbolische Kon stante NUMBER und schlie en vorsichtshalber die Include Datei stdio h ein die man immer braucht wenn es um Ein oder Ausgabe geht Weiterhin verwenden w
413. wierigkeiten F r DOS PCs gibt es von Microsoft das preiswerte Quick C und aus dem GNU Projekt einen kostenlosen C Compiler im Quellcode und betriebsklar kompiliert Aus C hat BJARNE STROUSTRUP von 1979 bis 1989 eine Sprache C entwickelt die ebenfalls eine bermenge von C bildet Der Denkansatz Paradigma beim Programmieren in C weicht jedoch erheblich von C ab so dass man eine l ngere Lernphase einplanen muss mehr als bei einem bergang von PASCAL nach C Da sich ANSI C und C gleichzeitig entwickelt haben sind einige Neuerungen von C in ANSI C eingeflossen zum Beispiel das Prototyping Ein ANSI C Programm sollte von jedem C Compiler verstanden werden das Umgekehrte gilt nicht Aktuell ist der Standard ANSI ISO IEC 14882 1998 1 1 5 Objektorientierte Programmiersprachen In dem Ma wie die Hardware leistungsf higer wurde wagten sich die Programmierer an komplexere und umfangreichere Aufgaben heran Dass gro e Aufgaben in kleinere Teilauf gaben untergliedert werden m ssen ist eine allt gliche Erfahrung und nicht auf Programme beschr nkt Die Strukturierung einer Aufgabe samt ihrer L sung gewann an Bedeutung Pro grammiersprachen wie C die die Strukturierung eines Programms in Module Funktionen Prozeduren Subroutinen erleichtern verbreiteten sich Um 1980 herum war die Komplexit t wieder so angewachsen dass nach neuen Wegen zu ihrer Bew ltigung gesucht wurde Au erdem hatte die Software als Kostenfaktor die Hard
414. window mywinl XClearWindow mydisplay mywinl XSetFont mydisplay mygcl XLoadFont mydisplay fgb 13 XDrawlmageString mydisplay mywinl mygcl 240 400 SUBWIN strlen SUBWIN XDrawlImageString mydisplay mywinl mygcl 240 420 CLEAR strlen CLEAR XDrawImageString mydisplay mywinl mygcl 240 440 QUIT strlen QUIT XSetFont mydisplay mygcl XLoadFont mydisplay vrb 25 else if i 1 amp amp text 0 d text 0 D amp amp myevent xkey window mywin2 XDestroyWindow mydisplay mywin2 del 0 else if i 1 amp amp text 0 text 0 N amp amp myevent xkey window mywinl if win newwin XCreateSimpleWindow mydisplay mywinl 70 60 400 200 1 myforeground mybackground window mapping x XMapRaised mydisplay newwin XSetForeground mydisplay newgc mybackground XFillRectangle mydisplay mypixmap newgc 0 0 400 200 XSetForeground mydisplay newgc colorl pixel XDrawlImageString mydisplay mypixmap newgc 140 100 WIN3 strlen WIN3 XSetFont mydisplay newgc XLoadFont mydisplay fgb 13 XDrawlImageString mydisplay mypixmap newgc 25 180 DELSUB strlen DELSUB XSetFont mydisplay newgc XLoadFont mydisplay vri 25 copying pixels from pixmap to window XCopyArea mydisplay mypixmap newwin newgc 0 0 400 200 0 0
415. wohl bescheiden w re ohne make 1 nur noch m hsam zu beherr schen Es ist f r das Gelingen entscheidend sich zu Beginn die Struktur sorgf ltig zu ber legen Infolge der Verwendung von Grafikfunktionen des MS Quick C Compilers ist das Pro gramm nicht auf andere Systeme bertragbar Man m te eigene Grafikfunktionen verwen den die Verpackungen um die Grafikfunktionen des jeweiligen Compilers darstellen Das selbe gilt f r die Funktion zum Tuten eine Assemblerroutine Vielleicht stellen wir das Pro gramm einmal auf X11 um und verpacken dabei die spezifischen Funktionen 1 11 8 Verarbeitung von Strings Strings Zeichenketten sind in C C ein denkbar einfacher Datentyp n mlich Arrays of char die mit dem ASCII Zeichen Nr 0 abgeschlossen sind In der Standard C Bibliothek finden sich fertige Funktionen f r die h ufigsten Aufgaben der Stringverarbeitung Trotzdem hat dieses Gebiet ein paar kleine T cken Ein beliebter Laufzeitfehler ist das Schreiben von Strings in Pufferspeicher die zu klein sind Es kommt dann zu einem berlauf mit nicht immer vorhersehbaren Folgen manchmal auch zu von b sen Buben beabsichtigten Folgen Man meint der Puffer sei reichlich bemessen es ist auch jahrelang alles gut gegangen und dann taucht einmal ein berlanger String auf der den Puffer sprengt Das Gegenmittel besteht im Beschr nken des Schreibens auf maximal ein Zeichen weniger als der Puffer fasst Wo Eingaben verlangt werden
416. x Array fuellen Zufallszahlen x if rf 49 time amp zeit srand unsigned zeit for i 0 i lt MAXARR i x rand MAX if x index i 1 x rand MAX index i x else for i 0 i lt MAXARR i index i i MAX ifdef DEBUG for i 0 i lt MAXARR i printf dNMn index i kbhit while endif Koordinatensystem x nach rechts x 0 in Mitte y nach unten y 0 oben _getvideoconfig amp vc _setlogorg vc numxpixels 2 1 0 Textfenster _settextwindow 7 vc numtextrows 8 4 vc numtextrows vc numtextcols 3 _wrapon _GWRAPOFF Hauptschleife x i 0 do Hintergrund Tag Nacht if getbkcolor BSCHWARZ Setbkcolor BGRAU setcolor HWEISS 1 11 WEITERE C PROGRAMME 155 else _setbkcolor BSCHWARZ _setcolor SCHWARZ if getbkcolor _settextcolor HWEISS else _settextcolor SCHWARZ Aufruf der Fkt zum Zeichnen der Schiffe schiff index il 0 Tastatureingabe zum Weitermachen z if x getch 13 x 43 x 45 if x 45 i else i if i gt MAXARR i lt 0 i 0 _clearscreen _GCLEARSCREEN _setbkcolor BGRAU while x 81 amp amp x 113 done Ende main x x Funktion done zur Beendigung x Ruecksetzen auf Defaultwert
417. x halten Es empfiehlt sich die genannten Sektionen einmal durchzubl ttern um eine Vorstellung davon zu gewinnen wof r es Systemaufrufe und Standardfunktionen gibt Die Ausgabe des Programms sieht folgenderma en aus LOGNAME wualexl Datei heisst a out Datei existiert Datei darf ausgefuehrt werden Datei darf nicht beschrieben werden Datei darf gelesen werden Device 13 Inode Nr 43787 File Mode 33216 Datei ist regulaer Links 1 Owner ID 101 Group ID 20 Device ID 102536 Dateigroesse 53248 Letzter Zugriff 24 1 91 Letzte Modifik 24 Ged Letzte Stat Ae 24 1 91 Datei ist executable Die Bedeutung von File Mode finden Sie bei mknod 2 Es handelt sich um ausfihrliche Informationen ber die Zugriffsrechte usw hnliche Ausk nfte ber eine Datei liefert das Kommando chatr 1 1 2 9 4 Beispiel Prozesserzeugung exec fork Zun chst ein kleines aber fieses Programm namens forkbomb mit dem man die Robustheit seines Systems auf die Probe stellen kann kommt demnaechst Quelle 1 19 C Programm zum Erzeugen vieler Prozesse Fork Bombe Der Systemaufruf fork 2 erzeugt eine Kopie des aufrufenden Prozesses mit einer neuen Prozess ID Im Beispiel wird fork 2 in einer ewigen for Schleife aufgerufen 1 2 10 Begriffe Programmer s Workbench Folgende Begriffe sollten klarer geworden sein Archiv Bibliothek Builder make Debugger Linker 42 KAPITEL 1 PROGRAMM
418. z x hoch y mathematische Funktionen 22 12 92 x zu compilieren mit cc o potenz potenz c lm x Aufruf potenz x y define EPSILON 0 00001 include lt stdio h gt include lt math h gt double pow floor int main int argc char argv 106 KAPITEL 1 PROGRAMMIEREN IN C C double x y z if argo 3 puts Zuwenig Argumente return 1 x Umwandlung Kommandozeilenargumente x sscanf argv 1 1f amp x sscanf argv 2 1f amp y r r Aufruf Funktionen pow floor Sektion 3M wegen Fallunterscheidungen nachlesen x if x 0 x x lt EPSILON if y gt 0 x 0 else puts Bei x 0 muss y positiv sein return 1 else if x 0 y floor y z pow x y Ausgabe printf 1f hoch 1f lf n x y Z return 0 Quelle 1 61 C Programm mit mathematischen Funktionen Der lint 1 gibt bei diesem Programm eine l ngere Liste von Warnungen aus die da her r hren da in lt math h gt viele Funktionen deklariert werden die im Programm nicht auftauchen Das geht aber in Ordnung 1 5 2 4 Standard Grafik Bibliothek Zu manchen Compilern geh rt auch eine Sammlung von Grafikfunktionen Da es hierf r noch keinen Standard gibt und Grafik eng an die Hardware gebunden ist verzichten wir auf eine Darstellung Auf einer UND Anlage findet man sie in usr lib plot Die Bibliothek enth lt Funktionen zum S
419. ze dargestellt Der Speicherbedarf betr gt ein Byte Mittlerweile gibt es auch internationale Zeichens tze deren Zeichen je zwei Bytes belegen Die Deklaration von alphanumerischen Variablen sieht so aus char a b c Mit wachsender Verbreitung von 16 bit Zeichens tzen Unicode Intercode ist zu erwarten dass die L nge des char Typs angepasst wird Die Verwandtschaft zwischen Ganzzahlen und Zeichen in C verwirrt anfangs Man mache sich die Gemeinsamkeiten an einem kleinen Programm klar Programm zum Demonstrieren von character und integer finclude stdio h int main pnt e char a bj eg 659 Te Een 335 arm Bly res tTts printf Ganzzahlen d d d n i j k a printf Zeichen c c c Sc n i J k a puts Nun rechnen wir mit Zeichen B 66 33 printf c c d n a b a b r printf c c d n b a b a printf c c c n a a return 0 1 3 BAUSTEINE EINES QUELLTEXTES 53 Quelle 1 22 C Programm mit den Typen character und integer Die Ausgabe des Programms lautet Ganzzahlen 65 233 333 66 Zeichen A M B Nun rechnen wir mit Zeichen B 66 33 B 99 B 33 B Ss In der ersten Zeile werden alle Werte entsprechend dem Formatstring der Funktion printf 3 als dezimale Ganzzahlen ausgegeben wobei der Buchstabe B durch seine ASCII Nummer 66 vertreten ist In der zweiten Zeile werden alle Wer
420. zen Zahlen Hausnummern sind Zahlen die Multiplikation zweier Hausnummern ist m glich ergibt jedoch nichts Sinnvolles Genauso ist es mit Pointern Aus einem Variablennamen x entsteht der Pointer auf die Variable amp x durch Voranset zen des Referenzierungsoperators amp Umgekehrt wird aus dem Pointer p die zugeh rige Variable p durch Voransetzen des Dereferenzierungsoperators x Referenziert werden kann nur ein Objekt im Speicher also eine Variable aber nicht ein Ausdruck oder eine Kon stante Dereferenziert werden kann nur ein Pointer der bereits auf ein Objekt im Speicher verweist der also eine Speicheradresse enth lt Eine Speicheradresse belegt ein Objekt erst wenn es definiert ist einen Wert hat nicht schon mit der Deklaration Folgende Zeilen sind zul ssig beziehungsweise nicht int x 12 py xpy x zu frueh unzulaessig py amp x py x erlaubt aber ueberfluessig printf d Saint x pyy Wir deklarieren eine Variable x als ganzzahlig und weisen ihr zugleich einen Wert zu Sie ist damit definiert und belegt einen Speicherplatz Ferner deklarieren wir py als Pointer auf eine Ganzzahl Der erste Versuch py zu dereferenzieren ist verfr ht und f hrt zu einem t dli chen Bus Error da noch kein Objekt y definiert ist dessen Adresse der Pointer py enthalten k nnte Der Pointer ist deklariert aber nicht definiert Wohl aber kann ich die deklarierte und definierte Variable x referenzieren
421. ziehungsweise by reference bernehmen Die Funktionen ver ndern ihre Summanden was im ersten Fall keine Auswirkung im Hauptprogramm hat Hauptprogramme und Funktionen sind in C FORTRAN und PASCAL geschrieben was neun Kombinationen ergibt Wir betreten damit zugleich das an Fallgruben reiche Gebiet der Mischung von Programmiersprachen mixed language programming Zun chst die bei den Funktionen im geliebten C 1 4 FUNKTIONEN 83 C Funktion Summe call by value x x Compileraufruf cc c csv c liefert csv o int csv int x int y Int puts Funktion mit Parameteruebernahme by value printf C Fkt hat uebernommen dNn x y SZ X tty printf C Fkt gibt folgende Summe zurueck d n z Aenderung der Summanden x x 77 y 99 return z Quelle 1 34 C Funktion die Parameter by value bernimmt C Funktion Summe call by reference x Compileraufruf cc c csr c liefert csr o int csr int px int xpy int z puts Funktion mit Parameteruebenahme by reference printf C Fkt hat uebernommen d Sd n px py Z px py printf C Fkt gibt folgende Summe zurueck d n z Aenderung der Summanden px 66 py 88 return zZ Quelle 1 35 C Funktion die Parameter by reference bernimmt Im bew hrten FORTRAN 77 haben wir leider keinen Weg gefunden der Funktion beizu bringen ihre Parameter by value zu ber
422. zw r bedeutet von links bzw rechts her assoziativ Ein un rer Operator verlangt einen Operanden ein bin rer zwei und ein tern rer drei Operator A Bedeutung Di r un r Bezugsrahmen global 1 bin r Bezugsrahmen Klasse 1 bin r Bezugsrahmen Namensraum A 1 un r Klammerung Funktion Ee 1 un r Index 1 bin r Auswahl 1 bin r Auswahl r un r Postfix Inkrement r un r Postfix Dekrement typeid un r Typabfrage const cast bin r Typumwandlung dynamic_cast bin r Typumwandlung reinterpret_cast bin r Typumwandlung static_cast bin r Typumwandlung sizeof r un r Gr enabfrage r un r Pr fix Inkrement r un r Pr fix Dekrement r un r bitweise Negation r un r logische Negation r un r negatives Vorzeichen r un r positives Vorzeichen r un r Dereferenzierung amp r un r Referenzierung ox r bin r cast Operator new r un r dynamische Speicherbelegung delete r un r dynamische Speicherfreigabe gt x l bin r Auswahl Wi 1 bin r Auswahl 1 bin r Multiplikation 1 bin r Division 1 bin r Modulus Divisionsrest 1 bin r Addition 1 bin r Subtraktion lt lt 1 bin r bitweises Shiften links gt gt 1 bin r bitweises Shiften rechts lt 1 bin r kleiner als lt 1 bin r kleiner gleich gt 1 bin r gr er als gt 1 bin r gr er gleich 1 bin r Gleichheit E l bin r Ungleichheit amp l bin r bitweises Und 3 l bin r bitweise
Download Pdf Manuals
Related Search
Related Contents
Goldtop IPBox 400S - Manuale Operativo HP 15-f133wm Información técnica Leica ST5020 Copyright © All rights reserved.
Failed to retrieve file