Home
Einführung in C/C++ - alex
Contents
1. gt ptag0 2 gt n x ptag 0 2 ptag 0 2 n ptagl0 3 gt n x ptag 0 3 ptag 0 3 n gt ptag 0I 4 gt t ptag 0 4 ptag 0 4 gt ptagl0 5 gt a ptag 0 5 ptag 0 5 a ptagl0 6 g x ptag 0 6 ptag 0 6 gt ptagl0 7 gt x ptag 0 7 ptag 0 7 ptag 0 8 ptag 0 8 ptag 0 8 gt ptagl0 9 amp x ptag 0 9 ptag 0 9 ptag amp ptagll M ptag l ptag 1 0 M gt ptag l 1 o x ptag 1 1 ptag 1 1 o gt ptagll 2 gt n ptag 1 2 ptag 1 2 n Wir brechen nach dem n von Montag ab ptag ist die Adres se des Speicherplatzes in dem ptag 0 abgelegt ist ptag 0 ist die Adresse des Speicherplatzes in dem das Zeichen S abgelegt ist Durch zweimaliges Dereferenzieren von ptag erhalten wir das Zeichen S Die anderen Zeichen liegen auf h heren Spei cherpl tzen deren Adressen wir durch Inkrementieren entwe der von ptag oder von ptagl erhalten wobei man normalerwei se die zweidimensionale Struktur des Arrays ber cksichtigt ob wohl 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 geschrie ben gilt ptag 1 2 n So entwerfen wir vermutlich ein Programm weil wir das Arbei ten mit Indizes aus der Mathematik ge
2. 10 Programm 42223 23 un na Sara 11 COBOL Programm 12 JAVA Programm 2 222 222er 17 Makefilen 4 2 2 3 sw ee 36 Erweitertes Makefile 37 C Programm mit Funktionsbibliothek 45 C Funktion Mittelwert 46 C Funktion Varianz 46 Makefile zum Sortierprogramm 51 Include Datei zum Sortierprogramm 51 C Programm Sortieren 53 C Funktion Bubblesort 55 C Programm Systemzeit 61 FORTRAN Programm Systemzeit 61 C Programm Datei Informationen 68 C Programm Fork Bombe 69 C Programm mit Fehlern 72 C Programm Kommentar 80 C Programm character und integer 88 C Programm Pointerarithmetik 102 C Programm Bitweise Negation 112 C Programm Bitoperationen 115 C Programm Ausgabe per Systemaufruf 117 C Programm Ausgabe per Standardfunktion 118 C Programm einfache for Schleife 127 C Programm zusammengesetzte for Schleife 128 C Programm mit goto grauenvoll 130 C Programm verbessert 131 C Programm return Anweisungen 133 C Programm Funktionsprototyp 137 C Funktion Parametertibergabe by value 139 C Funktion Parametertibergabe by reference 140 X1V Programme und andere Quellen XV 1 36 1 37 1 38 1 39 1 40 1 41 1 42 1 43
3. 28 1 1 12 Memo Grundbegriffe 30 1 1 13 bung Grundbegriffe 31 1 2 Programmers Workbench 31 1 2 1 Nochmals die Editoren 32 1 2 2 Compiler und Linker cc ccom ld 32 1 2 3 Unentbehrlich make 35 1 2 4 Debugger xdb gdb 2 2 2 39 1 2 5 Profiler time gprof 41 1 2 6 Archive Bibliotheken ar 43 1 2 7 Weitere Werkzeuge 46 1 2 3 Versionsverwaltung mit RCS SCCS und CVS 48 1 2 9 Systemaufrufe 57 1 2 9 1 Was sind Systemaufrufe 57 1 2 9 2 Beispiel Systemzeit time 59 1 2 9 3 Beispiel Datei Informationen access stat open close 63 1 2 9 4 Beispiel Prozesserzeugung exec POP 8 2 Stee Bh bac te Mae bene ae 69 viii INHALT 1 2 10 Begriffe Programmer s Workbench 70 1 2 11 Memo Programmer s Workbench 70 1 2 12 bung Programmer s Workbench 71 1 2 13 Fragen Programmer s Workbench 76 1 3 Bausteine eines Quelltextes 76 131 bersicht 2 12 2522 oe exe let we ee 76 1 3 2 Syntax Diagramme 77 1 3 3 Kommentar sys SSS ee he 0 42 22234 78 1 34 Namen e 2 22 43 2 he RE Ge es ag 80 1 3 5 Schl sselw rter 81 1 3 6 Operanden er aces i 2 N e ae 82 1 3 6 1 Konstanten und Variable 83 1 3 6 2 Typen Grundbegriffe 83 1 3 6 3 Einfache Typen 85 1 3 6 4
4. LAE ay Dr Gre 4 puts Bitte 1 Summanden eingeben Th scanf d a puts Bitte 2 Summanden eingeben scant d amp b c SZ D printf Die Summe ist Sd n ci Quelle 1 20 C Programm mit Fehlern Als erstes lassen wir den Syntaxpr fer lint 1 auf das Pro gramm los lint fehler c und erhalten das Ergebnis fehler c 1 2 PROGRAMMER S WORKBENCH 73 36 warning a may be used before set 41 syntax error 41 warning main returns random value to environment function returns value which is always ignored printf scanf Zeile 41 ist das Programmende dort steckt ein Fehler Die War nungen sind nicht so dringend Mit dem vi 1 erg nzen wir die fehlende geschweifte Klammer am Schlu Der Fehler h t te 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 her aus 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
5. x Dies ist ein kleines C Programm x define NUMBER 2 include lt stdio h gt int main A i 53 return printf nDer Wert betraegt d n i NUMBER Quelle 1 80 C Programm fortgeschritten Variante 1 11 WEITERE C PROGRAMME 229 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 x Endlich mal was Vernuenftiges xd 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 amp a printf Zweiten Summanden eingeben scanf Sd amp b printf Die Summe ist d n SUMME a b SE 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 an f 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 39 behandelt worden Der erfahrene Programmierer unterscheidet sich vom Anf nger in drei Punkten e Er macht raffiniertere Fehler e Er wei das e Er kennt die Wege und Werkzeuge zur Fehlersuche 230 KAPITEL 1 PROGRAMMIEREN I
6. x Sortierfunktion und Zeitmessung timel time long 0 if bubble argv 1 puts NOTSORT return 4 1 2 PROGRAMMER S WORKBENCH 53 time2 time long 0 Za Ende x printf Das Sortieren dauerte ld sec n time2 timel return 0 Quelle 1 14 C Programm Sortieren f r RCS 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 man hier noch einiges verbessern und vor allem auch andere Sortieralgorithmen nehmen Man sollte auch das Einlesen und die Ausgabe vom Sortieren trennen x Funktion bubble Bubblesort als Beispiel fuer RCS W Alex Universitaet Karlsruhe 04 Juli 1995 x x Header home debian prog quellen bubble tex v 1 1 1 1 include amp 60 stdio h amp 62 include amp 60 string h amp 62 include myheader h int bubble char x text int i 0 3 0 flag 0 z line MAXLIN char array MAXLIN LINSIZ FILE fp if DEBUG printf Bubblesort s n text endif x Einlesen if fp fopen text r NULL return 1 while feof fp amp amp i lt MAXLIN fgets array it t LINSIZ fp 54 KAPITEL 1 PROGRAMMIEREN IN C C fclose fp if DEBUG puts Array j 0 while j lt i printf oe array j puts Ende Array endif
7. puts File ist regulaer break case S_IFDIR puts File ist ein Verzeichnis break case S_IFCHR case S_IFBLK case S_IFNWK puts File ist ein Special File 1 2 PROGRAMMER S WORKBENCH 67 break ee ern ist eine Pipe break eee TT eae unbekannt Inode Briner E eer erg hd n butter st nlink 3 printf Owner ID lt hu n bur ter st uid printf Group Id hu n buffer st_gid printf Device ID ld n buffer st_rdev printf Filegroesse sla n D rfer st 8128 asec buffer st_atime MEZ pa gmtime amp asec msec buffer st_mtime MEZ pm gmtime amp msec csec buffer st_ctime MEZ pc gmtime amp csec printf Letzter Zugriff d d Sd n pa gt tm_mday pa gt tm_mon 1 pa gt tm_year printf Letzte Modifik d d Sd n pm gt tm_mday pm gt tm_mon 1 pm gt tm_year printf Letzte Stat Ae d d Sd n pc gt tm_mday pc gt tm_mon 1 pc gt tm_year else puts Kein Zugriff auf Inode x Pruefung auf Text oder Code magic number x x Systemaufrufe open 2 1lseek 2 read 2 close 2 x x Magic Numbers siehe magic 4 MAGIC magbuf fildes open argv 1 O_RDONLY if lseek fildes MAGIC_OFFSET 0 gt long O read fildes amp magbuf sizeof magbuf switch magbuf file_type case RELOC_MAGIC 68 KAPITEL 1 PROGRAMMIEREN IN C C puts File ist relocatable break c
8. 1 3 7 4 Logische Operationen Die logischen Operationen sind e bitweise Negation not Tilde e ausdrucksweise Negation not e bitweises Und and amp e ausdrucksweises Und and ce 1 3 BAUSTEINE EINES QUELLTEXTES 111 e bitweises exklusives Oder xor Circumflex caret e bitweises inklusives Oder or e ausdrucksweises inklusives Oder or Auch hier gibt es abgek rzte Schreibweisen u amp Der Ausdruck y amp X bedeutet dasselbe wie y y amp xX Die Operanden y und x werden bitweise durch Und verkn pft das Ergebnis wird y zugewiesen Entsprechendes gilt f r die bei den anderen Abk rzungen Der Unterschied zwischen einer ausdrucksweisen und ei ner bitweisen logischen Operation 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 Zweig n else printf else Zweig n f hren zur Ausf hrung des else Zweiges Die Variable x hat den Wert 0 bei dem auch alle Bits auf 0 stehen Sowie ein be liebiges Bit auf 1 st nde h tte die Variable einen Wert ungleich 0 und w rde als wahr angesehen Die ausdrucksweise Negation if x printf 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
9. 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 Umgang mit dem Terminal unabh ngig von dessen Typ Wir beginnen mit einem einfachen 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 Terminal beschreibung in usr lib terminfo 4 entnommen werden Das Programm soll au erdem wenn ihm Dateinamen als Argu mente bergeben werden die Dateien leeren ohne sie zu l schen der Bildschirm wird ja auch nicht verschrottet x C Programm das Bildschirm oder Files loescht z x Compile cc o xclear xclear c lcurses xd Za falls terminfo Fkt verwendet werden sollen noch DTERMINFO anhaengen x 234 KAPITEL 1 PROGRAMMIEREN IN C C include lt curses h gt x enthaelt stdio h x ifdef TERMINFO include lt term h gt Za nur fuer terminfo x endif int main argc argv int argc char xargv int i if argc gt 1 x Files leeren nicht loeschen z for i 1 i lt argc i 4 if access argv i 0 close creat argv i 0 else printf File s unzugaenglich n argv i else ifdef TERMINFO x Bildschirm leeren terminfo x setupterm 0 1 0 putp clear_screen resetterm else x Bildschirm leer
10. 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 an gefangen bis zu einer oberen Grenze die beim Aufruf eingege ben werden kann Ihr Maximalwert h ngt verst ndlicherweise vom System ab Aus Geschwindigkeitsgr nden werden reichlich Pointer verwendet Urspr nglich wurden die Elemente der Ar rays ber Indizes angesprochen was den Gewohnheiten entge genkommt Bei der Optimierung wurden alle Indizes durch Poin 1 11 WEITERE C PROGRAMME 247 ter ersetzt wie im Abschnitt 1 11 4 Optimierung auf Seite 230 erl utert x Programm zur Berechnung von Primzahlen 1990 10 03 x jx Compileraufruf MS DOS QuickC gel prim c x Compileraufruf unter UNIX cc o prim prim c DUNIX x 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 der verfuegbare Speicher die 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 x Defaultwert fuer Obergrenze x define DEF unsigned long 10000 include lt stdio h gt Za globale Variable x unsigned long p MA
11. F Fkt gibt zurueck I8 z E SE der Summanden x 66 y 88 fsr z F Fkt mit Uebernahme by reference 6 y 6 F Fkt hat uebernommen 2I6 x y 1 Y end Quelle 1 36 FORTRAN Funktion die Parameter by reference bernimmt PASCAL Funktionen kennen wieder beide M glichkeiten aber wir werden auf eine andere Schwierigkeit sto en Vorl u fig sind wir jedoch hoffnungsvoll Pascal Funktion Summe call by value Compileraufruf pc c psv p module b import StdOutput export function psv x y integer integer 1 4 FUNKTIONEN 141 implement function psv var z integer begin writeln Funktion mit P uebernahme by value writeln P Fkt hat uebernommen x y Z X y writeln P Fkt gibt folgenden Wert zurueck Aenderung der Summanden Se Zwee H PSV Z end end Quelle 1 37 PASCAL Funktion die Parameter by value ber nimmt 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 integer begin Va e writeln Funktion mit P uebernahme by reference writeln P Fkt hat uebernommen x y JI Z i X ty writeln P Fkt gibt folgenden Wert zurueck Aenderung der Summanden x 66 y 88 Dar Z end end Quelle 1 38 PASCAL Funktion die Parameter by refere
12. x Ende while return 0 Quelle 1 75 C Programm itox c zur Umrechnung von Dezimal zahlen auf eine andere Basis 1 9 4 Memo Pr prozessor e Im ersten Schritt des Kompiliervorgangs durchl uft die Programmaquelle den Pr prozessor e Der Pr prozessor entfernt Kommentar ersetzt symbolische Konstanten und Makros zeichengetreu f gt den Inhalt von Include Dateien ein und ber cksichtigt bzw verwirft Pro grammzeilen 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 nach jeder Teilstrecke die Zwischener gebnisse auf dem Bildschirm ausgibt in der Endversion nur das Gesamtergebnis Schreiben Sie ferner alle Stringkonstanten in eine Include Datei von der Sie eine deutsche und eine englische oder fran zosische Fassung herstellen Beim Compiler Aufruf soll mittels einer Option die Sprache ausgew hlt werden 1 10 Dokumentation 1 10 1 Zweck Die Dokumentation dient dazu ein Programm im Quellcode ei nem menschlichen Leser verst ndlich zu machen Langere undo kumentierte Programme sind nicht nachzuvollziehen Eine Do kumentation geh rt zu jedem Programm das l nger als eine Seite ist und l nger als einen Tag benutzt werden soll 35Real programmers write programs not documentation 222 KAPITEL 1 PROGRAMMIEREN IN C C Andererseits z hlt das Schreiben von Dokumentationen nicht zu den Lieblingsbesch ftigungen
13. x61 NULL usr include stdio h 35 36 48 KAPITEL 1 PROGRAMMIEREN IN C C PI fehler c iz x27 P_tmpdir usr include stdio h x209 SEEK_CUR usr include stdio h x55 SEEK_END usr include stdio h 56 SEEK_SET usr include stdio h 53 54 TMP_MAX usr include stdio h _CLASSIC_ANSI_TYPES usr include stdio h 192 Durch die include Datei stdio h und gegebenenfalls durch Bibliotheksfunktionen geraten viele Namen in das Programm von denen man nichts ahnt Ferner gibt es einige Werkzeuge zur Ermittlung und Bearbeitung von Strings in Quellfiles und aus f hrbaren Programmen teilweise beschr nkt auf C Programme tt strings 1 xstr 1 Weitere wichtige Werkzeuge sind ein Lineal und Buntstifte mit denen man zusammengeh rende Namen oder Teile im Quell text markiert 1 2 8 Versionsverwaltung mit RCS SCCS und CVS Gr ere Projekte werden von zahlreichen unter Umst nden wechselnden Programmierern oder Autoren gemeinsam bearbei tet In der Regel werden die so entstandenen Programmpakete ber Jahre hinweg weiterentwickelt und vielleicht auf mehrere Systeme portiert Die Arbeit vollzieht sich in mehreren Stufen parallel zur Zeitachse e Aufgabenstellung e Aufgabenanalyse Umsetzung in eine Programmiersprache e Testen Dokumentieren e vorl ufige Freigabe e endg ltige Freigabe e Weiterentwicklung Pflege Des weiteren wird ein Programmpaket in viele berschaubare Modul
14. 1 44 1 45 1 46 1 47 1 48 1 49 1 50 1 51 1 52 1 53 1 54 1 55 1 56 1 57 1 58 1 59 1 60 1 61 1 62 FORTRAN Funktion Parametertibergabe by e ar ted BG Bae ae EE 140 PASCAL Funktion Parameter bergabe by value 141 PASCAL Funktion Parameter bergabe by re EE aey BR Hod Wee Re 2 One a 141 C Programm Parameteriibergabe an C Funktionen d A ern een 142 C Programm Parameter bergabe an FORTRAN Funktion 143 C Programm Parameter bergabe an PASCAL Funktionen 4 42a as er a 143 FORTRAN Programm Parameter bergabe an C Funktionen e 144 FORTRAN Programm Parameter bergabe an EFORTRAN IKL ick co fone ee 145 FORTRAN Programm Parametertibergabe an PASCALAR Ky 82 Sow Ee A BE 146 PASCAL Programm Parameter bergabe an C Funktionen ebe ar rer 147 PASCAL Programm Parameter bergabe an FORTRAN Funktion 147 PASCAL Programm Parameter bergabe an PASCAL Funktionen 148 PASCAL Funktion Parameter bergabe by value 149 PASCAL Funktion Parameter bergabe by re Leren deer RR TE hn ee led 149 Shellscript Parameter bergabe 150 C Programm Parameter bernahme von Shell SCHIDE Sau a kit At Wen ee re ee een 150 C Programm Kommandozeilenargumente 151 C Funktion Wechselnde Anzahl von Argumenten 156 C Programm Quadratwurzel 158 C Programm 88T 2 3 2 le oS RY a 160 C Programm Fakult t 222222200 160 C Programm Selbstaufrufma
15. 4 c mvwprintw frame c 0 42c Ti mvwprintw frame 5 0 Window built by curses It may mvwprintw frame 6 0 contain helpful messages say oe mvwprintw frame 7 7 0 Delete the window by typing h for c 8 c lt 12 c mvwprintw frame c 0 S42c Ti 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 Bild schirminhalt die Cursorposition usw enth lt Die curses 3 Funktionen bewirken folgendes initscr mu die erste curses 3 Funktion sein Sie initialisiert die Datenstrukturen Das Gegenst ck dazu ist 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 weitergeleitet wird ohne RETURN mvprintw bewegt move den Cursor an die durch die ersten beiden Argumente bezeichnete Position 0 0 links oben und schreibt dann in das Standardfens ter 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 chli 1
16. Ein Fehler wird im Englischen auch als bug bezeichnet was 1 2 PROGRAMMER S WORKBENCH 41 soviel wie Wanze oder Laus bedeutet Ein Programm zu entlau sen hei t Debugging Dazu braucht man einen Debugger dever minateur deboguer Das sind Programme unter deren Kontrol le das verlauste Programm abl uft Man hat dabei vielf ltige M glichkeiten in den Ablauf einzugreifen Ein absoluter De bugger 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 sym bolischer Debugger wie der sdb 1 der GNU gab 1 oder der xdb 1 bezieht sich auf die jeweilige Stelle im Quelltext Debugger sind m chtige und hilfreiche Werkzeuge Manche Pro grammierer gehen so weit da sie das Schreiben eines Pro gramms als Debuggen einer leeren Datei bzw eines wei en Blat tes 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 einer Hand schrift des 9 Jahrhunderts stammt Das Rezept ist im Raum Wi en 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 Zeilen als Kommentar in das Programm einzuf gen
17. Objekte ent 182 KAPITEL 1 PROGRAMMIEREN IN C C sprechen sich Aus Klassen lassen sich untergeordnete Klassen ableiten Eine Klasse oder ein Objekt enth lt Daten data mem ber und Operationen auf diesen Daten Die Operationen die in den Klassen oder Objekten verwirklicht sind hei en Methoden member function method Objekte verkehren untereinander mittels Botschaften Eine Botschaft message member functi on call ist die Aufforderung an ein Objekt eine seiner Methoden auszuf hren vergleichbar einem Funktionsaufrufin C Beispielsweise k nnen wir eine Klasse Komplexe Zahl defi nieren die als Daten zwei reelle Zahlenwerte Realteil und Ima ginrrteil sowie als Methoden die Grundrechenarten f r komple xe 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 pri vat Public Members sind vom brigen Programm her zug ng lich sie bilden die Schnittstelle der Klasse und ihrer Objekte zur Umwelt Private Members sind nur den Methoden der Klas se zug nglich Public und private werden als Member Access Specifier bezeichnet Meist sind die Daten privat die Metho den teils privat teils ffentlich Mindestens eine Methode mu ffentlich sein war
18. Tab 1 1 Lange von Datentypen auf verschiedenen Architektu ren Je nach L nge der Datentypen int I long L und Pointer P unterscheidet man heute die in Tabelle 1 1 auf Seite 86 aufgefiihrten Architekturen Es wiirde zu weit fiihren hier die Vor und Nachteile jeder Architektur gegeneinander abzuw gen Wichtig ist die Architektur 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 280 F r ganze Zahlen sind die Addition die Subtraktion die Multiplikation die Modulo Operation Divisionsrest und die Di vision unter Vernachl ssigung des Divisionsrestes definiert fer ner Vergleiche mittels gr er gleich kleiner Gleitkommazahlen Gleitkommazahlen auch als Reals oder Floating Point Numbers bezeichnet werden durch eine Man tisse und einen Exponenten dargestellt Der Exponent ver steht sich nach au en zur Basis 10 intern wird die Basis 2 ver wendet Die Mantisse ist auf eine Stelle ungleich 0 vor dem De zimalkomma oder punkt normiert Es gibt e float Gleitkommazahl einfacher Genauigkeit e double Gleitkommazahl doppelter Genauigkeit 1 3 BAUSTEINE EINES QUELLTEXTES 87 e 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 ei
19. XCreateSimpleWindow mydisplay mywinl 70 60 400 200 1 myforeground mybackground window mapping XMapRaised mydisplay newwin XSetForeground mydisplay newgc mybackground XFillRectangle mydisplay mypixmap newgc O 0 400 200 XSetForeground mydisplay newgc colorl pixel XDrawlmageString mydisplay mypixmap newc 140 100 WIN3 strlen WIN XSetFont mydisplay newgc XLoadFont mydisplay fgb 13 XDrawlmageString mydisplay mypixmap newc 180 DELSUB strlen DELSI XSetFont mydisplay newgc XLoadFont mydisplay vri 25 x copying pixels from pixmap to window x XCopyArea mydisplay mypixmap newwin nev O 0 400 200 0O else XDestroySubwindows mydisplay mywinl win win break x repaint window on expose event x 270 case EF KAPITEL 1 PROGRAMMIEREN IN C C Expose myevent xexpose count 0 XDrawImageString mydisplay mywinl mygcl 50 50 WIN1 strlen WIN1 XDrawImageString mydisplay mywin2 mygcl2 270 50 WINZ strlen WIN2Z XSetFont mydisplay mygcl XLoadFont mydisplay fgb 13 XDrawImageString mydisplay mywinl mygcl 240 400 SUBWIN strlen SUBWIN XDrawImageString mydisplay mywinl mygcl 240 420 CLEAR strlen CLEAR XDrawImageString mydisplay mywinl mygcl 240 440 QUIT strlen QUIT XSetFont mydisplay mygcl XLoadFont myd splay vrb 25 XDrawImageString mydi
20. an der Universitat Dortmund WILLIAM GIBSON pr gt das Wort Cyberspace MORTON HEILIG pr sentiert einen Spielautomaten fiir 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 Tintenstrahldrucker 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 Kar
21. nes ist das beste f r alle F lle Es gibt sogar ziemlich leicht verst ndliche Aufgaben die nicht mittels eines Algorithmus zu l sen sind Falls Sie Bedarf an solchen N ssen haben suchen Sie unter dem Stichwort Ent scheidbarkeit in Werken zur Theoretischen Informatik aber die Daten fehlen um den ganzen Nonsens richtig zu berblicken A Zahlensysteme Benn Drei alte M nner Au er dem Dezimalsystem sind das Dual das Oktal und das Hexadezimalsystem gebr uchlich Ferner spielt das Bin r codierte Dezimalsystem BCD bei manchen Anwendungen eine Rolle Bei diesem sind die einzelnen Dezimalstellen f r sich dual dargestellt Die folgende Tabelle enth lt die Werte von 0 bis dezimal 255 Bequemlichkeitshalber sind auch die zugeordneten ASCII Zeichen aufgef hrt dezimal oo CG bhitacC dual 0 1 10 11 100 101 110 111 1000 1001 1010 101 1100 1101 1110 1111 10000 10001 10010 10011 10100 10101 10110 oktal 291 hex Lu OD De TM OBDNIABRMAWNHOS BCD 0 1 10 11 100 101 110 111 1000 1001 1 0 1 1 1 10 1 11 1 100 1 101 1 110 1 111 1 1000 1 1001 10 0 10 1 10 10 ASCII nul soh stx etx eot eng ack bel bs ht If vt ff cr so si dle del dc2 dc3 dc4 nak syn 292 ANHANG A ZAHLENSYSTEME 23 10111 27 17 10 11 etb 24 11000 30 18 10 100 can 25 11001 31 19 10 101 em 26 11010 32 la 10 110 sub 27 11011 33 1b 10 111 esc 28 11100 34 Ic 10 10
22. struct tm xgmtime clock long xclock Die Funktion gmtime 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 gmtime 3 ist ein Pointer auf ei ne 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 60 KAPITEL 1 PROGRAMMIEREN IN C C struct tm int tm_sec x seconds 0 59 x int tm_min x minutes 0 59 x int tm_hour x hours 0 23 gt int tm_mday Za day of month 1 31 int tm_mon Za month of year 0 11 x int tm_year x year 1900 x int tm_wday x day of week sunday 0 x int tm_yday x day of year 0 365 x int tm_isdst Za 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 Vermutlich woll te sich der Programmierer den Weg offenhalten k nftig auch andere Typen aufzunehmen Zeitzone Das Programm das die Quelle zu dem Kommando zeit aus der ersten bung ist sieht folgenderma en aus Za Ausgabe der Zeit auf Bildschirm Za Compileraufruf cc o zeit zeit c include lt stdio h gt include lt time h gt char xptag
23. treten kennzeichnet eine Ausnahme oder einen Fehler Der Wert NULL ist der einzige der direkt einem Pointer zugewiesen wer den kann jede Zuweisung einer Ganzzahl ist ein Fehler da Poin ter keine Ganzzahlen sind Ansonsten d rfen nur Werte die sich aus einer Pointeroperation oder einer entsprechenden Funktion deren Ergebnis ein Pointer ist einem Pointer zugewiesen wer den 98 KAPITEL 1 PROGRAMMIEREN IN C C F r Pointer sind die Operationen Inkrementieren Dekre mentieren und Vergleichen zul ssig Die Multiplikation zweier Pointer d rfen Sie versuchen es kommt aber nichts Brauchbares 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 wie viele Bytes es geht das wei der Compiler aufgrund der Deklara tion Diese Pointer Arithmetik erleichtert das Programmieren erheblich in typlosen Sprachen muss man Bytes z hlen Wir wollen anhand einiger Beispiele mit Arrays den Ge brauch von Pointern verdeutlichen und deklarieren ein eindi mensionales Array von vier Ganzzahlen int al4 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 4 xa a0 4 a 1 lt gt 7 a
24. 159 1 4 8 Assemblerroutinen 161 1 4 9 Memo Funktionen 2 22220200 168 1 4 10 bung Funktionen 169 1 5 Funktions Bibliotheken 169 1 5 1 Zweck und Aufbau 169 1 5 2 Standardbibliothek 2 222200 170 1 5 2 1 bersicht 2 222222 170 1 5 2 2 Standard C Bibliothek 171 1 5 2 3 Standard Mathematik Bibliothek 174 1 5 2 4 Standard Grafik Bibliothek 176 1 5 2 5 Weitere Teile der Standardbiblio Heke cam waere en a 176 1 5 3 Xlib Xt und Xm X Window System 176 1 5 4 NAG Bibliothek 177 1 5 5 Eigene Bibliotheken 178 1 5 6 Speichermodelle PC DOS 178 1 5 7 Memo Bibliotheken 2 222020 179 1 5 8 bung Bibliotheken 2 2 2 180 TG Klassen oa ehh 2 Mae ee ren anal Sr 180 1 6 1 Warum C mit Klassen 180 1 6 2 Datenabstraktion Klassenbegriff 181 1 6 3 Klassenhierarchie abstrakte Klassen Ver CROWNS i a ea are 184 1 6 4 MemoKlassen 191 1 6 5 UbungKlassen 192 1 7 Klassen Bibliotheken 192 1 7 1 C Standardbibliothek 192 1 7 2 Standard Template Library STL 193 103 ANGERS Cao Kae Ee a Me teed 195 1 7 3 1 Was ist C XSC 195 INHALT 1 7 3 2 Datentypen Operatoren und Funktionen 1 7 3 3 Teilfelder von Vektoren und Ma IZEN a a Bees en 1 7 3 4 Genaue Auswertung von Aus dr cken vun
25. 5 Auflage spricht fiir das Buch D G Korn M I Bolsky The Kornshell Command and Programming Language 382 ANHANG H ZUM WEITERLESEN 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 Themenspek trum 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 Envi ronment Addison Wesley Boston 1992 744 S hnlich wie Rochkind Linux UNIX Verwaltung ZE Frisch Essential System Administration O Reilly Sebastopol 1995 760 S bersicht f r Benutzer 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 Sysad mins viel Stoff R U Rehman HP Certified HP UX System
26. Das Wort Objekt vermeide ich hier um keine Assoziationen an objektorientiertes Program mieren zu wecken Ein Operand e hat einen Namen identifier e geh rt einem Typ type an e hat einen konstanten oder variablen Wert value e belegt zur Laufzeit Speicherplatz im Computer e hat einen Geltungsbereich scope und e eine Lebensdauer lifetime Auf den Operanden wird tiber den Namen oder die Speicher adresse zugegriffen Die Speicheradresse eines Operanden kann in einem weiteren Operanden abgelegt werden der Zeiger Refe renz 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 re den Pointer auf Pointer sind Pointer 2 Ordnung usw Der Gel tungsbereich eines Operanden ist ein Block eine Funktion eine Datei oder das ganze Programm Gleiches gilt f r die Lebens dauer 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 Arbeits speicher Deklaration und Definition k nnen in einer Anweisung zusammengezogen sein Die erstmalige Zuweisung eines Wertes an eine Variable hei t Initialisierung Deklaration und Defini tion werden auch unter dem Begriff Ver
27. H Liebig Mikroprozessortechnik Springer Berlin Heidelberg 1998 585 S CISC RISC Systemaufbau Assembler und C W K Giloi Rechnerarchitektur Springer Berlin Heidelberg 1999 488 S G Goos Vorlesungen tiber Informatik Band 1 Grundlagen und funktionales Programmie ren Springer Berlin Heidelberg 1997 394 S Band 2 Objektorientiertes Programmieren und Algo rithmen Springer Berlin Heidelberg 1999 396 S Band 3 Berechenbarkeit formale Sprachen Spezifi kationen 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 379 D E Knuth The Art of Computer Programming 3 Bande Addison Wesley Boston Klassiker stellenweise mathematisch 7 Bande ge plant Band 4 soll 2004 fertig sein Band 5 im Jahr 2009 Homepage des Meisters www cs staff stanford edu uno index ht W Schiffmann R Schmitz Technische Informatik Springer Berlin Heidelberg 1993 94 1 Teil Grund lagen 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 Boo LEsche Funktionen Automaten Grammatiken Formale Sprachen Algorithmen Numerische Mathematik Newsgruppen sci math J L Bentley Progr
28. Id unix8 tex v 1 1 1 1 2005 02 06 20 01 11 wulf vorkommen siehe unten Dann tibergibt 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 e Mit dem Kommando co filename check out ohne vi bekommt man eine Kopie seiner Datei zur ck und zwar nur zum Lesen Diese Kopie kann man mit allen UNIX Werkzeugen bearbeiten nur das Zur ckschreiben mittels ci verweigert das RCS e Mit dem Kommando co 1 filename wird eine les und schreibbare Kopie erzeugt Dabei wird die RCS Datei f r 50 KAPITEL 1 PROGRAMMIEREN IN C C weitere gleichzeitige Schreibzugriffe gesperrt 1 lock Die Kopie kann man mit allen UNIX Werkzeugen bearbeiten Umbenennen w re jedoch ein schlechter Einfall e Beim Zur ckstellen mittels ci filename hat man Gele genheit einen kurzen Kommentar in die Versionsinforma tionen zu schreiben wie Grund und Umfang der nderung Mittels rlog filename werden die Versionsinformatio nen auf den Schirm geholt Enth lt der Quelltext die Zei chenfolge Log unix8 tex v zweckm ig im Kom mentar am Anfang so werden die Versionsinformationen auch dorthin bernommen Dann hat man alles im Quellfi le beisammen e Falls Sie sich mit co 1 filename eine Kopie zum Edi tieren geholt und damit gleichzeitig das Original f r wei tere Schreibzugriffe g
29. K 365 396 Sachverzeichnis lib libe a 171 usr include limits h 83 usr lib libcurses a 176 define 213 327 ifdef 218 ifndef 218 include 215 327 undef 215 132 Header RCS 49 Id RCS 49 Log RCS 49 amp C 110 amp amp C 110 64 Bit Maschine 85 a out 33 74 Abstrakter Datentyp 181 access 64 action HTML 272 Adaptor 193 adb 40 admin 55 Adresskonstante 97 Adress bergabe 138 ALGOL 13 282 Algorithmus 289 Alias Anweisung FORTRAN 62 Allgemeinheit 289 ANSI C 14 Anweisung Alias A FORTRAN 62 C A 122 226 Compiler A 62 146 define A 213 include A 215 Kontrollanweisung 123 leere A C 122 Pr prozessor A 213 ar 44 ar 1 178 Archiv Datei 43 169 argc 151 argc 63 Argumentvektor 151 Argumentz hler 151 argv 151 argv 63 Array A of characters 90 A von Funktionspointern 137 251 Array 90 Index 90 linearisieren 90 mehrdimensionales A 90 Name 90 Subarray 197 ASCII German ASCII 305 Steuerzeichen 305 Zeichensatz 291 Assembler 5 10 11 19 161 Assoziativit t 121 Ausdruck Ausdruck C 108 ausf hrbar 19 Ausgabe 116 202 Ausgang Schleife 125 Auswahl C 124 404 auto C 105 Backus Naur Form 78 BASIC 13 BCD System 291 Beautifier 35 Bedingte Bewertung 113 Bedingte Kompilation 218 Bedingung C 124 Bezug 143 Bibliothek 43 169 bin r kompatibel 19 Binary 19 Bindung dynamische 20 Bindung statische 20 Block 226 Botschaft C 181 B
30. PROGRAMMIEREN IN C C und eine Bitverschiebung einfacher als eine Multiplikation mit 2 Eine Abfrage if x lt sqrt y schreibt man besser if x x x lt y Manchmal kann man durch Umstellen einer Formel die Anzahl der Rechenschritte verringern Ob man mehrfach ben tigte Zwi schenergebnisse 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 bes ser die Schleife in die Funktion zu verlegen da jeder Funktions aufruf Zeit kostet Die ma volle Verwendung globaler Variabler verbessert zwar nicht den Stil aber die Geschwindigkeit von Programmen mit vielen Funktionsaufrufen da die Parameter bergabe ent f llt Die Verwendung von Bibliotheksfunktionen kann in oft durchlaufenen Schleifen st rker verz gern als der Einsatz spe zialisierter selbstgeschriebener Funktionen da Bibliotheksfunk tionen allgemein und kindersicher sind Verwenden Sie die ein fachste 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 lang samer als die Adressierung durch Pointer Der Prozessor kennt
31. S ay erence S ay Csr b CSV ie Summe je Summe ist ie Summe ist itte die beiden Summanden eingeben ie Summanden sind direkt 1 4 FUNKTIONEN 145 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 gt a write 6 102 a s at tb write 6 103 s E call by value nicht moeglich C call by reference default s fsr a b write 6 105 s write 6 102 a 5 100 format Bitte die beiden Summanden eingeben 102 format Die Summanden sind 2I6 103 format Die Summe direkt ist I8 105 format 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 gt a write 6 102 a b s at tb 146 KAPITEL 1 PROGRAMMIEREN IN C C write 6 103 s G call by value s psv a b write 6 104 s write 6 102 a B E call by reference s psr a b write 6 105 s write 6 102 a 100 format Bitte die beiden Summanden ei
32. Stunde eingeben cin hin cout Minuten eingeben cin min cout Vielen Dank endl TIME Settime hin min Umrechnung 184 KAPITEL 1 PROGRAMMIEREN IN C C MEZ ausgeben void TIME Printmez cout hour lt 10 O hour e Ir minute lt 10 O minute endl Hauptprogramm Rahmen oder Treiberprogramm int main TIME t Erzeugung des Objektes t cout nDie Anfangszeit ist t Printmez Aufruf einer oeff Methode t Settime 13 27 cout Neue Zeit ist t Printmez t Gettime COUE lt Thre Zeit ist y t Printmez t Settime 99 99 ungueltige Werte cout Fehlerhafte Eingabe fuehrt zu t Printmezt 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 deren zugh rige Objekte den Program 1 6 KLASSEN 185 mablauf verwirklichen Das folgende Programm zeigt wie aus einer Basisklasse weitere Klassen abgeleitet werden die die pu blic und protected members erben Von einer abstrakten Klas se k nnen nur weitere Klassen abgeleitet jedoch keine Objek te gebildet werden Eine abstrakte Klasse mu mindestens eine rein virtuelle Funktion enthalten die nirgends definiert wird Sie ist
33. VGA Grafik x x define DEBUG x include lt stdio h gt x fuer puts u a include lt conio h gt x fuer getch und kbhit include lt graph h gt x fuer Grafik include lt stdlib h gt Za fuer rand Zufallszahlen include lt time h gt Za fuer time Zufallszahlen include schiff h x eigenes Includefile x Funktionsprototypen x extern int titel Za Titelbildschirm 252 KAPITEL 1 PROGRAMMIEREN IN C C void done x Aufraeumen x x Hauptprogramm x int main ine adye Eis xy struct videoconfig vc int xschiff MAX index MAXARR time t zeit x Titel und Vorspann rf titel x Grafikmodus VGA 16 Farben x if _setvideomode _VRES16COLOR puts Fehler Keine VGA Grafik exit 1 setbkcolor BGRAU Za Array der Funktionen Bilder fuellen schiff 0 bild000 schiff 1 5114007 schiff 2 bild002 schiff 3 bild003 I II schiff 124 bild124 schist i225 bild125 x Index Array fuellen Zufallszahlen 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 1 11 WEITERE C PROGRAMME 253 index i i MAX ifdef DEBUG for i 0 i lt MAXARR i printf d n index i while kbhit endif
34. a X und Motif Springer Berlin Heidelberg 1992 694 S N Mansfield The Joy of X Addison Wesley Boston 1993 368 S Als Einstieg fiir 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 385 H Partl u a LaTeX Kurzbeschreibung ftp ftp ciw uni karlsruhe de pub docs latex lkur ftp ftp ciw uni karlsruhe de pub docs latex lkur 1990 46 S Postscript 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
35. braucht Grundkenntnis se im Programmieren um die richtigen Vorstellungen von dem Geschehen hinter dem Bildschirm zu haben Nicht jeder Maschi nenbauer muss einen Kolbenmotor konstruieren k nnen aber er muss wissen wie eine Kolbenmaschine aufgebaut ist und funk tioniert 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 e einem Lehrbuch wie diesem e einer Referenz zum Nachschlagen siehe das Verzeichnis am Ende des Buches e einer Sammlung von Frequently Asked Questions aus dem Internet hier zu den Themen C und C Das Lehrbuch sorgt f r den berblick die Referenz vermittelt Einzelheiten die FAQ beantwortet die offen gebliebenen Fragen FAQs zu C und C finden sich unter e www eskimo com scs c fag top html die FAQ der Newsgruppe comp lang c e www info2 informatik uni wuerzburg de dclc fag die FAQ der Newsgruppe de comp lang c e www fags org faqs C fag learn 2 1 1 GRUNDBEGRIFFE 3 e www cerfnet com mpcline c faq lite e 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 ha ben ehe man dort mitmischt 1 1 2 Warum braucht ma
36. c in FORTRAN und PASCAL entsprechend f und p Das kompilierte aber noch nicht gelinkte Programm wird als Ob jektcode oder relozierbar relocatable bezeichnet der Da teiname hat die Kennung o oder obj Das lauff hige Pro gramm hei t ausf hrbar executable sein Name hat keine Kennung Unter PC DOS sind die Namen ausf hrbarer Pro gramme durch com oder exe gekennzeichnet Ein kompilier tes Programm wird auch Binary genannt im Gegensatz zum Quelltext Ein Programm ist bin r kompatibel zu einem ande ren System wenn es in seiner ausf hrbaren Form unter beiden l uft Hat sich ein Programm anstandslos kompilieren lassen und erzeugt beim Aufruf die Fehlermeldung 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 Arbeitsverzeich nis zu suchen Alternativ k nnte man auch den Punkt in den Pfad aufnehmen Bei den Operanden spielt es eine Rolle ob ihre Eigenschaf ten vom bersetzer bestimmt werden oder von Programm und bersetzer gemeinsam zur bersetzungszeit oder w hrend der Ausf hrung des Programmes zur Laufzeit Der zweite Weg wird als statische Bindung bezeichnet der dritte als dynami sche Bindung Die Gr e einer Ganzzahl 2 Bytes 4 Bytes ist durch den Compiler gegeben Die Gr e eines Arrays k nnte im Programm fes
37. ckgabe wert kann immer nur ein einziger Wert sein Es kommt vor dass eine Funktion zwar einen Wert zur ck gibt 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 Funk tion main findet man in der Shell Variablen oder Sstatus Er kann in einem Shellscript weiterverarbeitet werden Hier ein Beispiel f r den Gebrauch der return Anweisung x Beispiel fuer return Anweisungen 21 02 91 x define PI 3 14159 include lt stdio h gt x Funktionsdeklarationen Prototypen x void text int eingabe double area float rad char maxi x Hauptprogramm x int main se r char wl 63 w2 63 text Lt if leingabe puts Eingabe war richtig else puts Eingabe war falsch printf Radius eingeben scanf Sf amp r printf Kreisflaeche lf n area r 1 3 BAUSTEINE EINES QUELLTEXTES 133 printf Bitte zwei Woerter eingeben scanf s Sait wl w2 printf Das laengere Wort ist s n maxi wl w2 return 0 x Funktion ohne Returnwert Typ void x void text puts nDiese Funktion gibt nichts zurueck return x Funktion mit richtig falsch Returnwert Typ int x int eingabe Ine Le printf Bitte die Zahl 37 eingeben scanf d amp 1 if i 37 return 0 else return 1 x Funktion die
38. 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 example if a patent license would not permit royalty free redistribution of the Program by all those who 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 unenforcea ble under any particular circumstance the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest va lidity of any such claims this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices Many people have made generous contributions to the wide range of software distributed through that system in relian ce 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 a
39. den anderen Verzeichnisse die unkomprimierten Texte Die man Verzeichnisse enthalten nroff 1 Quelltexte die cat Verzeichnisse die formatierten druckfertigen Texte Im Verzeichnis usr share man manl Z findet sich bei spielsweise die Datei 1s 1 mit der komprimierten nroff Quelle der man Seite zum Kommando 1s 1 Gegebenenfalls liegt unter usr share man manl die entkomprimier te nroff Quellee Unter usr share man catl Z und usr share man cat1 liegen die formatierten Seiten Mittels cat usr share man cat1 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 schreiben kopiert man sich am besten eine hnliche man Seite cat usr share man man1 Z pwd 1 uncompress gt mycommand 1 und editiert diese Vermutlich mu man sich vorher etwas mit dem nroff Format auseinandersetzen und mit den unter man 5 beschriebenen Makros Die so erzeugte unkomprimier te nroff 1 Quelle geh rt in ein man Verzeichnis Die mittels compress 1 verdichtete Gelle kommt ohne die Kennung z nach man Z Dann formatiert man die Quelle 1 11 WEITERE C PROGRAMME 225 nroff mycommand 1 gt mycommand 1 cat und kopiert sie unter dem Namen mycommand 1 in ein cat Verzeichnis Schlie lich ist die formatierte Datei zu komprimie ren 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 jewe
40. flag 0 264 KAPITEL 1 PROGRAMMIEREN IN C C ap j p2 return 0 x Vergleich zweier Strings bis zum ersten Whitespace x x Returnwert 0 falls Strings gleich Returnwert lt 0 falls Stringl lt String2 Returnwert gt 0 falls String gt String2 gt int vergleich char xl x2 int flag 0 wi lei wert xx1 wert xx2 0 if NOWHITE x1l if SCHARF x1 x2 x scharfes s if SCHARF x2 xi flag 1 KLERE x2 else if KOMMA ail 1 x weiteres Wort x while NOCHAR x1 slk while NOCHAR x2 x2 flag vergleich x1 x2 return flag return wert xl wert xx2 Quelle 1 94 C Programm zum Sortieren eines Textes nach den Regeln des Duden Die Variable flag die auch anders hei en kann ist ein Flag oder eine Schaltvariable d h eine Variable die in Abh ngig 1 11 WEITERE C PROGRAMME 265 keit von bestimmten Bedingungen einen Wert 0 oder nicht 0 an nimmt und ihrerseits wieder in anderen Bedingungen auftritt Ein g ngiger einwandfreier Programmiertrick 1 11 10 X Window System Das folgende Beispiel zeigt wie man unter Benutzung von Xlib Funktionen ein Programm schreibt das unter dem X Window System l uft x xwindows c this program demonstrates how to use X s base window system through the Xlib interface x x Compiler cc xwindows c 1X11 x include lt stdio h gt include
41. glich der Variablen a obwohl heimt ckischer Fehler aber das ahnen wir noch nicht Wir lassen kompilieren und rufen das kompilierte Programm a out 4 auf 74 KAPITEL 1 PROGRAMMIEREN IN C C 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 ver wendeten Objektfile usr lib xdbend o kompilieren und anschlieBend 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 tei a out 4 und das beim Zusammenbruch erzeugte Corefi le 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 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 er leichtern wir uns durch make 1 Wir schreiben
42. http www ddj com Software Tools for the Professional Programmer viel C und C Und noch einige Verlage e Addison Wesley Bonn http www addison wesley de 398 ANHANG H ZUM WEITERLESEN 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 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 399 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 400 ANHANG H ZUM WEITERLESEN Personenverzeichnis Aiken H 365 Andreessen M 374 Atanasoff J V 365 Babbage C 365 Backus J 78 Bardeen J 365 Berners Lee T 365 Berr
43. int ay double a b c m if argc lt 2 puts Radikand fehlt exit 1 Za Initialisierung i 0 sscanf argv 1 1 eech sscanf argv 1 1f co a 0 Rare ds x Iteration x while b a gt EPS m a b 2 if m x m c lt 0 a m else b m Begrenzung der Anzahl der Iterationen x LFE if i gt MAX puts Zuviele Iterationen Ungenau break x Ausgabe und Ende x printf Die Wurzel aus 1lf ist lf n c m printf Anzahl der Iterationen d n i exit 0 1 4 FUNKTIONEN 159 Quelle 1 54 C Programm zur iterativen Berechnung der Qua dratwurzel Die Funktion die iterativ aufgerufen wird ist die Mittelwert bildung von a und b es lohnt sich nicht sie auch programmtech nisch als selbst ndige Funktion zu definieren aber das kann in anderen Aufgaben anders sein 1 4 7 Rekursiver Aufruf einer Funktion Bei einer Rekursion ruft eine Funktion sich selbst auf Das ist etwas schwierig vorzustellen und nicht in allen Programmier sprachen erlaubt Die N he zum Zirkelschlu ist nicht geheu er Es gibt aber Probleme die urspr nglich rekursiv sind und sich durch eine Rekursion elegant programmieren lassen Eine Zirkeldefinition ist eine Definition eines Begriffes die diesen selbst in der Definition enth lt damit es nicht sofort auff llt ge gebenenfalls um einige Ecken herum Ein Zirkelschluss ist ei ne Folgerung die Tei
44. itt J for O Jj lt e ke Za 1 nullen x CEs s j 0 kos af as for J 1 jJj lt k j addieren laadd x f s r lshift x f s lshift x f s for k 0 k lt i 3 4 ktt laadd x f s E r flag 0 x 1 anzeigen x printf n n t 4d Da SL for j e 1 j gt 0 j if s j amp amp flag else if flag printf 9lu Pl s j flag 1 else 1 4 FUNKTIONEN printf 09lu e x Ende Weitermachen x Za Anzahl der Stellen von max x e x 1 165 x x f s j wird das naechste f if max gt END ende r j GMX 1 else j GRP 1 flag 0 for j gt 0 j if ende j amp amp flag 1 else if flag unsigned long z 10 flag 1 for i 1 i lt 9 i if x x f ende j z flag t z x 10 else break else flag 9 time amp Z3 prance n n tZahl 4d if max gt END x Zeit holen x hat 4d Stellen n max flag printf tRechnung tAusgabe brauchten 4ld s n z3 zI else 166 KAPITEL 1 PROGRAMMIEREN IN C C printf tDie Rechnung brauchte SALON Z2 zZ printf tDie Ausgabe brauchte Sale SANT ZI 22 ya return 0 Quelle 1 58 C Programm zur Berechnung von Fakult ten Das vorstehende Beispiel mit Microsoft Quick C und Qui
45. ndet In C Programmen besteht u erst selten die Notwen digkeit f r diese Anweisung aber gebr uchliche Anweisungen 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 hemmungsloses Hinundher h 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 put zen In diesem Fall endet sie ohne return Anweisung schlech ter Stil oder mit einer return Anweisung ohne Argument Was sie tut wird Nebenwirkung oder Seiteneffekt side effect ge nannt 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 aufrufenden Einheit wie ein Ausdruck ange sehen 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 eingeklam 132 KAPITEL 1 PROGRAMMIEREN IN C C mert zu werden bei zusammengesetzten Ausdr cken sollte man der Lesbarkeit 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
46. 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 Berechnun gen wie Logarithmus oder trigonometrische Funktionen Daten bankfunktionen oder Funktionen zur Abfrage von Me ger ten am Bus Damit man diese Funktionen nicht jedesmal neu zu erfinden braucht werden sie in Bibliotheken gepackt die dem Program mierer zur Verf gung stehen Teils stammen sie vom Hersteller des Betriebssystems also urspr nglich AT amp T teils vom Her steller der Compiler bei uns Hewlett Packard und GNU oder 44 KAPITEL 1 PROGRAMMIEREN IN C C der Anwendungssoftware teils von Benutzern Bibliotheken ent halten Programmbausteine es lassen sich aber auch andere Dateien Texte Grafiken in gleicher Weise zusammenfassen Dann spricht man allgemeiner von Archiven Au er den Da teien enthalten Archive Verwaltungsinformationen Index zum schnellen Finden der Inhalte Diese Informationen wurden fr her mit dem Kommando ranlib 1 eigens erzeugt heute er ledigt ar 1 das mit Die Verwendung von Bibliotheken beim Programmieren wird im Skriptum Programmieren in C C er l utert Au er den mit dem Compiler gelieferten Bibliotheken kann man zus tzlich erworbene od
47. prozessor werden der f r die Maschine unbedeu tende Kommentar entfernt und die mit einem Doppelkreuz be ginnenden Pr prozessor Anweisungen ausgef hrt Das Ergebnis sieht leicht gek rzt so aus oe eech 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 zua List typedef long unsigned int size_t typedef struct int cnt char x_ptr char x_base int _bufsiz int flag int files char _name_to_remove FILE extern FILE __dj_stdin __dj_stdout __dj_stderr void clearerr FILE _stream int fclose FILE x_stream int feof FILE x_stream LAE printf const char a Format int vsprintf char _s const char _format va_list extern FILE __dj_stdprn __dj_stdaux 3 hallo c 2 _ap 1 1 GRUNDBEGRIFFE 5 int main printf Hallo Welt n return 0 Wir erkennen dass der Pr prozessor eine Reihe von Zeilen hin zugef gt hat Im Prinzip k nnte 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 Wa KK eh geez compiled 3 _ __gnu_compiled_c text LCD ase Hallo Welt 12 0 align 2 globl _main main pushl ebp movl Sesp sebp call main pushl SLCO call _printf addl 4 esp xorl Seax teax jmp L1 align 270K 90 hl leave ret Selbst diese bereits schwerer
48. sen Aus der Klasse flaeche werden die Klassen Kreis und Rechteck abgeleitet aus der Klasse Rechteck noch die Klas se Quadrat W hrend aus abstrakten Klassen nur weitere ab strakte oder konkrete Klassen abgeleitet werden k nnen lassen sich aus konkreten Klassen weitere konkrete Klassen ableiten oder Objekte bilden Bei den K rpern leiten wir analog aus der abstrakten Klas se Koerper die konkreten Klassen Kugel und Quader ab aus Quader nochmals wuerfel 1 6 KLASSEN 191 In den konkreten Klassen erhalten die virtuellen Funktionen auch einen konkreten Inhalt das hei t die Platzhalter werden mit den Formeln f r den Fl cheninhalt eines Kreises oder Recht ecks besetzt usw Diese Formeln sehen f r jede konkrete geome trische Form anders aus Bei einer Klassenableitung wie class Kreis public Flaeche bedeutet das Schl sselwort public dass von der zugrunde lie genden Klasse Basisklasse die public members als public und die protected members als protected geerbt werden Die priva te 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 Basis klassen abgeleitet werden aber erstmal mu Obiges verstanden und ge bt werden Die ausgefeilte Klassenhierarchie hat den Vorteil dass man auf jeder Stufe
49. so fallen Tippfehler und Grammatikfehler in diese Klasse Falls das Programm die Kompilation ohne Fehlermeldung hinter sich gebracht hat startet man es Dann melden sich die 15Es irrt der Mensch so lang er strebt GOETHE Faust Oder errare humanum est wie wir Lateiner sagen Noch etwas lter anaprwAa ev avdpwroLo v enovra Bvnro s Die entsprechende 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 zei gen die als lteste Dokumentation obiger Weisheit gilt 40 KAPITEL 1 PROGRAMMIEREN IN C C Laufzeitfehler die unter Umst nden nur bei bestimmten und wom glich seltenen Parameterkonstellationen auftreten Ein ty pischer Laufzeitfehler ist die Division durch eine Variable die manchmal den Wert Null annimmt Die Fehlermeldung lau tet Floating point exception Ein anderer h ufig vorkommender Laufzeitfehler ist die berschreitung von Arraygrenzen oder die Verwechslung von Variablen und Pointern was zu einem Memo ry fault einem Speicherfehler f hrt Die dritte Klasse bilden die logischen Fehler oder Denk fehler Sie werden auch semantische 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 o
50. und Ausgabe clearerr l scht Fehlermeldung eines Filepointers fclose schlie t Filepointer fflush leert Puffer eines Filepointers fgetc liest Zeichen von Filepointer fgetpos ermittelt Stand des Lesezeigers fgets liest String von Filepointer D 3 STANDARDFUNKTIONEN 323 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 tempnan erzeugt einen tempor ren Filenamen tmpfile erzeugt ein tempor res File ungetc schreib
51. 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 entsprechen den Option auf Cc 0O prim prim c DUNIX so wird eine Konstante namens UNIX definiert und infolgedessen der if Zweig vom Pr prozessor 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 llt die Option DUNIX Eine zweite Anwendung ist die Erzeugung von Programmver sionen die zwecks Fehlersuche etwas gespr chiger sind als die Endfassung Man gibt beispielsweise Zwischenwerte folgender ma en aus define DEBUG 1 34Manche Compiler verlangen da das Doppelkreuz in jedem Fall am Beginn der Zeile steht 1 9 PR PROZESSOR 219 int main if DEBUG printf Variable x hat den Wert d n x endif Hier definieren wir in der Programmquelle ein symbolische Kon stante DEBUG zu 1 true und veranlassen damit den Pr pro zessor die printf Zeile einzubeziehen L uft das Programm fehlerfrei setzt man im Quellcode DEBUG auf null Ein anderes im folgenden Programm angewendetes Verfahren fragt nur da nach ob die Konstante DEBUG definiert ist oder nicht x Programm itox zum Umrech
52. verk rzt x Rekursive Berechnung von Fakultaeten x include lt stdio h gt int main int n puts nWert eingeben Ende mit CTRL D while scanf d amp n EOF printf n sd Fakultaet ist d n n n fak n return 0 x funktion fak gt int fak int n return n lt 1 1 n x fak n 1 1 4 FUNKTIONEN 161 Quelle 1 56 C Programm zur rekursiven Berechnung der Fa kult t Weitere rekursiv l sbare Aufgaben sind die T rme von Hanoi und Quicksort Rekursive Probleme lassen sich auch iterativ 16 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 x Experimentelles Programm mit Selbstaufruf von main gt include lt stdio h gt int main puts Selbstaufr f von main ma nt return 13 Quelle 1 57 C Programm in dem main sich selbst aufruft Das Programm wird von lint 1 nicht beanstandet ein wandfrei kompiliert und l uft bis der Speicher platzt da die Re kursionstiefe nicht begrenzt ist Abbruch mit break Allerdings ist ein Selbstaufruf von main ungebr uchlich 1 4 8 Assemblerroutinen Auf die Assemblerprogrammierung wurde in Abschnitt 1 1 4 Programmiersprachen auf Seite 10 bereits eingegangen Da das Schreiben von Programmen in Assembler m hsam ist
53. x Koordinatensystem x nach rechts x 0 in Mitte y nach unten y 0 oben _getvideoconfig amp vc _setlogorg vc numxpixels 2 1 0 x Textfenster x _settextwindow 7 vc numtextrows 8 4 vc numtextrows vc numtextcols 3 _wrapon _GWRAPOFF x Hauptschleife i 0 Mex 4 Za Hintergrund Tag Nacht if _getbkcolor BSCHWARZ _setbkcolor BGRAU Set color HWEISS else _setbkcolor BSCHWARZ _setcolor SCHWARZ if _getbkcolor _settextcolor HWEISS else _settextcolor SCHWARZ x Aufruf der Fkt zum Zeichnen der Schiffe x xschiff index i O5 254 KAPITEL 1 PROGRAMMIEREN IN C C x Tastatureingabe zum Weitermachen z if x getch 13 x 43 x 45 if x 45 i else itt if i gt MAXARR i lt 0 i 0 _clearscreen _GCLEARSCREEN _setbkcolor BGRAU while x 81 amp amp x 113 done x Ende main x x Funktion done zur Beendigung x x Ruecksetzen auf Defaultwerte x 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 Positionslichter etc auf den Schirm Tu ten kann es auch Ist der Hintergrund schwarz Nacht sieht man nur die Lichter ist er grau Tag sieht man auch die Kon tur
54. zusam menpassen wie Stecker und Kupplung einer elektrischen Verbin dung d h die Liste der aktuellen Parameter mu mit der Liste der formalen Parameter nach Anzahl Reihenfolge und Typ der Parameter bereinstimmen Bei der Wert bergabe call by value wird der Funktion ei ne Kopie der aktuellen Parameter des aufrufenden Programmes bergeben Daraus folgt da die Funktion die aktuellen Para meter des aufrufenden Programmes nicht ver ndern kann Bei der Adress bergabe call by reference werden der Funktion die Speicheradressen der aktuellen Parameter des auf rufenden 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 Funkti on betreten wird Wie die Parameter bergabe in C FORTRAN und PASCAL aussieht entnimmt man am besten den Beispielen Die Para meter sind vom Typ integer um die Beispiele einfach zu halten Ferner ist noch ein Shellscript angegeben das eine C Funktion aufruft die in diesem Fall ein selbst ndiges Programm Funkti on main sein mu Der von einer Funktion zur ckgegebene Wert R ckga bewert 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 s
55. 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 144 145 146 147 148 149 150 151 152 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 10001111 10010000 10010001 10010010 10010011 10010100 10010101 10010110 10010111 10011000 10011001 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 217 220 221 222 223 224 225 226 227 230 231 232 233 234 235 236 237 240 241 242 243 244 245 246 247 250 251 252 253 254 259 256 257 260 261 262 263 264 265 266 1 100 11 1 100 100 1 100 101 1 100 110 1 100 111 1 100 1000 1 100 1001 1 101 0 1 101 1 1 101 10 1 101 11 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 295 296 ANHANG A ZAHLENSYSTEME 183 10110111 267 b7 1 1000 11 184 10111000 270 b8 1 1000 100 18
56. 103 104 101 102 103 104 105 106 107 110 111 112 113 114 115 116 117 120 121 122 123 124 125 126 127 130 131 132 133 134 135 136 137 140 141 142 143 144 145 146 147 150 41 42 43 44 45 46 47 48 49 4a Ab Ac 4d 4e 4f 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f so bd ri KS ei CIPA OS Si Coen DI CO ble pm al Pa no un TM Latin capital letter a Latin capital letter b Latin capital letter c Latin capital letter d Latin capital letter e Latin capital letter f Latin capital letter g Latin capital letter h Latin capital letter i Latin capital letter j Latin capital letter k Latin capital letter Latin capital letter m Latin capital letter n Latin capital letter o Latin capital letter p Latin capital letter q Latin capital letter r Latin capital letter s Latin capital letter t Latin capital letter u Latin capital letter v Latin capital letter w Latin capital letter x Latin capital letter y Latin capital letter z Left square bracket Reverse solidus Right square bracket Circumflex accent Low line 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 309 310 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 1
57. 11 WEITERE C PROGRAMME 237 chen Bildschirm hat sich noch nichts ger hrt Erst mit refresh wird der Puffer zum Bildschirm bertragen e getch liest ein Zeichen von der Tastatur e clear putzt den Bildschirm beim n chsten Aufruf von refresh e newwin erzeugt ein neues Fenster hier mit dem Namen frame auf der angegebenen Position mit einer bestimm ten Anzahl von Zeilen und Spalten e wstandout setzt das Attribut des Fensters auf standout d h auf umgekehrte Helligkeiten beispiels weise Gilt bis wstandend e wrefresh wie refresh nur f r ein bestimmtes Fens ter e delwin l scht ein Fenster Gegenst ck zu newwin e touchwin schreibt beim n chsten refresh ein Fens ter v llig neu Die curses 3 Funktionen machen von den Terminalbeschrei bungen in den usr lib terminfo Dateien Gebrauch man braucht sich beim Programmieren 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 num ber zum Beispiel wenn eine Reihe von Vokabeln bunt durchein ander abgefragt werden soll Sind die Anforderungen nicht so hoch geschraubt da man erst einmal ein Philosophisches Se minar ber den Begriff Zufall absolvieren mu reichen einige Funktionen aus der C Standard Bibliothek Das folgende Pro gramm erzeugt eine Folg
58. 123 while c getchar 125 Die Schleife liest Zeichen ein und verwirft sie bis sie auf ein Zeichen Nr 125 rechte geschweifte Klammer trifft Das wird auch noch entsorgt dann geht es nach der Schleife weiter 1 3 8 2 Zuweisung als Anweisung Aus einer Zuweisung wird durch Anh ngen eines Semikolons eine Anweisung Kommt eine Zuweisung beispielsweise als Ar gument 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 be endet werden und wird damit zu einer Anweisung an den Com puter etwas zu tun print Sa Sn eg A eer X E 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 wes halb die Einrichtung auch Ablaufkontrolle genannt wird Die Kontrollanweisungen von C wie von vielen anderen Sprachen sind die Bedingung die Verzweigung die Auswahl die Schlei fe und der Sprung Sequenz Die einfachste Kontrollanweisung ist keine die An weisungen im Programm werden der Reihe nach abgearbeitet Diese Ablaufform hei t Sequenz oder Folge und wird der Voll st ndigkeit halber erw
59. 237 monitor 43 Motif 177 NAG Bibliothek 177 Name Name C 76 80 280 Operanden N 82 Programm N 225 Nassi Shneiderman Diagramm 29 Nebenwirkung 131 Negation 279 Newton Verfahren 203 nm 75 nroff 1 223 NULL 97 243 Nullpointer 97 238 243 280 Obfuscated C 278 Objective C 16 Objekt C 181 Objekt Variable 82 Objektcode 5 19 408 Oktalsystem 291 open 64 116 open 2 172 Operand 82 Operation arithmetische O 109 Bit O 114 280 Grund O 27 logische O 110 Modulo O 85 Pointer O 115 Relations O 112 zul ssige O 83 Operator Zeichen 76 108 320 Optimierung 230 Parameter aktueller P 137 formaler P 137 bergabe 137 PASCAL 13 Patch 21 pc 33 Pflichtenheft 25 Platzhalter 137 Pointer dangling P 243 Darstellung 280 far P 179 huge P 179 near P 179 Nullpointer 97 243 280 P Arithmetik 97 P auf Funktion 137 251 P auf void 89 243 Pointer 82 94 115 242 portieren 280 POSIX 57 post HTML 272 SACHVERZEICHNIS Pr prozessor 4 19 76 Pr prozessor C 213 327 Primzahl 210 246 printf 117 121 printf 3 172 326 Private Member 182 Problem Management 56 prof 43 Profiler 41 Programm Aufgabenstellung 23 25 benutzerfreundliches P 22 Bottom up Entwurf 27 Codierung 17 23 26 Dokumentation 221 Effizienz 22 Entwurf 23 fehlerfreies P 21 Grund Operation 27 Hauptprogramm 226 P ndern 21 Patch 21 Pflege 23 Programm 226 programmiererfreundli ches P 22
60. 316 317 320 321 322 323 324 325 326 327 330 331 332 333 334 335 336 b9 ba bb be bd be bf c0 cl c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf do dl d2 d3 d4 d5 d6 d8 d9 da db dc dd de a m ee E D I PI EV OD es gt gt gt gt gt Pa A N LEE EE Or Z ANHANG B ZEICHENS TZE 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 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 ca
61. Administra tion 383 Prentice Hall PTR Upper Saddle River 2000 800 S Begleitbuch zu einem Kurs Einf hrung in und Ver waltung von HP UX M Welsh M K Dalheimer L Kaufmann Running Li nux 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 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 Motif Users s Guide OSF Motif Programmer s Guide 384 ANHANG H ZUM WEITERLESEN 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 Program mierung O Reilly Sebastopol 1999 321 S K Gottheil u
62. Adressen 32 Bits lang die Pointerarith metik 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 e Eine Bibliothek vereint eine Menge von Funktionen in ei ner einzigen Datei e Eine Bibliothek hat nichts mit Verschl sseln oder Kompri mieren zu tun Beim Einbinden einer Bibliothek in den Kompiliervorgang werden genau die ben tigten Funktionen ausgew hlt und ins Programm eingebunden e Es gibt Standardbibliotheken die zum Compiler geh ren und von diesem automatisch herangezogen werden e Weiter gibt es Standardbibliotheken die zum Compiler ge h ren aber eigens ber eine Option herangezogen wer den m ssen Hierzu z hlt die C Standard Mathematik Bibliothek die die Option 1m beim Compiler Aufruf erfor dert e Auf dem Markt oder im Netz findet sich eine Vielzahl von Bibliotheken beispielsweise f r numerische Aufgaben oder das X Window System 180 KAPITEL 1 PROGRAMMIEREN IN C C e Man kann auch eigene Funktionen in Privatbibliotheken zusammenfassen Das lohnt sich wenn man l ngere Zeit f r ein bestimmtes Thema programmiert 1 5 3 bung Bibliotheken Fassen Sie die Funktionen des Weganalyse Projektes au er main in einer Privatbibliothek zusammen und binden sie die se beim Kompiliervorgang dazu 1 6 Klassen 1 6 1 Warum C mit Klassen Obj
63. 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 Korrek turanweisungen die von den Regeln in DIN 5007 etwas abwei chen x duden sortiert Textfile zeilenweise nach dem ersten Wort unter Beruecksichtigung der Duden Regeln x 260 KAPITEL 1 PROGRAMMIEREN IN C C Za 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 x include lt stdio h gt include lt malloc h gt include lt sys types h gt include lt sys stat h gt define MAX 1024 x max Anzahl der Zeilen x define EXT s Za Kennung des sort Files x define NOWHITE c c 7 7 amp amp ich vii amp amp c n define NOCHAR c c 7 ke t I c 0 define SCHARF c c c 222 x sz x define KOMMA c c x statische Initialisierung eines externen Arrays x x ASCII Tafel Die Zahlen stellen die Nummer des Zeichens dar x angefuegt HP ROMAN EXTENSION optional char wert 256 x Steuerzeichen x Dir 2y Sy Oe Mee gt 8473 Pies IT en Ee LAr Eoy Eb Ir Ar 3 20 21 22 223 24 25 26 22 28 28 30 31 x Space Sonder und Satzzeichen 32 33 34 35 36 37 38 39 AO AL n Aa Abn AS AG AT x Ziffern 65
64. Compileraufruf cc a o b o o pgm e 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 Op tion c unterbindet das Linken e Das Programmodul b o h ngt ab von derselben include Datei und dem Modul im Quellcode b c Es entsteht durch den Compileraufrufcc 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 Pro grammodule und pa t auf da eine neue Version in alle be troffenen Programmteile eingebunden wird Umgekehrt wird ei ne aktuelle Version eines Moduls nicht unn tigerweise kompi liert Warum wird im obigen Beispiel die include Datei incl h ausdr cklich genannt Der Compiler wei doch auf Grund ei ner entsprechenden Zeile im Quelltext da diese Datei einzu binden ist Richtig aber make 1 mu das auch wissen denn 1 2 PROGRAMMER S WORKBENCH 37 die include Datei k nnte sich ndern und dann m ssen alle von ihm abhangigen Programmteile neu tibersetzt werden make 1 schaut nicht in die Quellen hinein sondern nur auf die Zeitstem pel mtime der Zutaten Unver nderliche include Dateien wie stdio h brauch
65. FORTRAN programs in any language 18 KAPITEL 1 PROGRAMMIEREN IN C C C wenden sich an unterschiedliche Benutzerkreise Wiederum andere eignen sich f r spezielle Aufgaben besser als allgemei ne Sprachen Mit einer einzigen Sprache wird man auch in der Zukunft nicht auskommen Die Schwierigkeiten beim Program mieren liegen im brigen weniger in der Umsetzung in eine Pro grammiersprache der Codierung sondern in der Formulie rung und Strukturierung der Aufgabe Was hei t eine Sprache sei f r ein System verf gbar Es gibt einen Interpreter oder Compiler f r diese Sprache auf die sem System Hardware plus Betriebssystem Die Bezeichnung FORTRAN Compiler f r UNIX reicht nicht da es UNIX f r verschiedene Hardware und zudem in verschiedenen Versio nen 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 ge schriebene Programme werden als Quellcode source code Quellprogramm oder Quelltext bezeichnet Mit diesem Quellco de kann der Computer unmittelbar nichts anfangen er ist nicht ausf hrbar Der Quellcode muss mithilfe des Computers und eines bersetzungsprogrammes in Maschinencode bersetzt 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 Di
66. 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 Mi erfolg 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 bringt 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 372 1982 1983 1984 1985 1986 ANHANG G ZEITTAFEL 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 Beginn des EuNETs einer der ersten deutschen Internet Provider
67. Hier der Text Gang t nesso mid nigun nessiklinon t fana themo marge an that b n fan th mo b ne an that fl sg t fan themo fl sgke an thia h d t fan thera hid 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 Zeitverhaltens in der Absicht das Programm schneller zu machen Ein einfaches UNIX Werkzeug ist time 1 time prim 1000000 16Real programmers don t use source language debuggers 42 KAPITEL 1 PROGRAMMIEREN IN C C 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 Programmieren 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 gorof 1 Seine Verwendung setzt voraus da das Programm mit der Option G kompiliert worden ist Es wird gestartet und erzeugt neben seiner normalen Aus gabe 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 p
68. Ingenieur kommt an FORTRAN vor bei Ein Beispiel findet sich in Abschnitt 1 4 3 Parameter berga be auf Seite 137 Die Kaufleute hatten mit Mathematik weniger am Hut daf r aber gro e Datenmengen Sie erfanden Ende der f nfziger Jah re ihre eigene Programmiersprache COBOL das hei t Common Business Oriented Language Dass Leutnant GRACE M HOP PER eine Frau zuletzt im Admiralsrang sowohl den ersten Bug erlegt wie auch COBOL erfunden habe ist eine Legende um ein K rnchen Wahrheit herum COBOL ist ebenfalls unverw stlich und gilt heute noch als die am weitesten verbreitete Program miersprache Kein Wirtschaftswissenschaftler kommt an CO BOL 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 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 1 1 GRUNDBEGRIFFE 13 Quelle 1 5 COBOL Programm Hello World Als die Computer in die Reichweite gew hnlicher Studen ten kamen entstand das Bed rfnis nach einer
69. 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 100 Ethernet ist erschwinglich geworden ber das Gigabit Ethernet wird geredet In Deutschland gibt es rund 20 Mio PCs und 1998 1999 2000 375 1 Mio Internetanschl sse Quelle Fachverband Informationstechni 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 n 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 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 t weil die Programmierer fr herer Jahrzehnte mit den Bits knausert Der RFC 2550 l st auch gleich das Y10K Problem Debian GNU Linux Version 2 1 slink kommt heraus Betreiber gro er Suchmaschinen sch tz
70. 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 verantwort lich 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 397 K Steinbuch Die desinformierte Gesellschaft Busse Seewald Herford 1989 269 S vergriffen J Weizenbaum Die Macht der Computer und die Ohn macht 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 Informationstech nik Springer Berlin Heidelberg 1992 303 S Zehn Vorlesungen ber Technik Geschichte und Phi losophie des Computers von einem der Pioniere 19 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 The C C Users Journal Miller Freeman Inc USA monatlich http www cuj com Dr Dobb s Journal Miller Freeman Inc USA monatlich
71. Kommandos folgt manchmal in Klam mern die Nummer der betroffenen Sektion des Referenz Handbuchs z B vi 1 Diese Nummer samt Klammern ist beim Aufruf des Kommandos nicht einzugeben e Suchen Sie die englische oder franz sische bersetzung ei nes deutschen Fachwortes so finden Sie diese bei der erst maligen Erl uterung des deutschen Wortes e Suchen Sie die deutsche bersetzung eines englischen oder franz sischen Fachwortes so finden Sie einen Verweis im Sach und Namensverzeichnis e UNIX wird hier immer als die Gattung der aus dem bei AT amp T um 1970 entwickelten Unix hnlichen Betriebssys teme verstanden nicht als gesch tzter Name eines be stimmten Produktes e Ich gebe m glichst genaue Hinweise auf weiterf hrende Dokumente im Netz Der Leser sei sich aber bewu t dass sich sowohl Inhalte wie Adressen URLs ndern Bei Ver weisen auf Webseiten URLs ist die Angabe des Protokolls http weggelassen X X Zum Gebrauch 1 e Unter Benutzer Programmierer Verwalter usw werden so wohl m nnliche wie weibliche Erscheinungsformen ver standen e 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
72. Programmier sprachen mixed language programming Zun chst die beiden Funktionen im geliebten C x C Funktion Summe call by value x x Compileraufruf cc c csv c liefert csv o int csv int x int y int Z gt puts Funktion mit Parameteruebernahme by value printf C Fkt hat uebernommen Sd SON x y ZOO Sn S printf C Fkt gibt folgende Summe zurueck d n zZ x Aenderung der Summanden x x 77 y 99 return z Quelle 1 34 C Funktion die Parameter by value bernimmt x C Funktion Summe call by reference x Compileraufruf cc c csr c liefert csr vo int csr int Spx Inc Spy aT Zs puts Funktion mit Parameteruebenahme by reference Print i hat uebernommen sd SANK px py 140 KAPITEL 1 PROGRAMMIEREN IN C C Z pX xpy printf C Fkt gibt folgende Summe zurueck d n z x Aenderung der Summanden x PX 66 py 88 return z Quelle 1 35 C Funktion die Parameter by reference bernimmt Im bew hrten FORTRAN 77 haben wir leider keinen Weg ge funden der Funktion beizubringen ihre Parameter by value zu bernehmen in FORTRAN 90 ist es m glich Es bleibt daher bei nur einer Funktion die wie in FORTRAN blich ihre Pa rameter by reference bernimmt C Fortran Funktion Summe call by reference E Compileraufruf f77 c fsr f integer function fsr x y integer x Yy Z write write Z X write 16
73. Sonntag VE Montag Me Dienstag Te Mittwoch N Donnerstag Freitag V Samstag u m char xpmon Januar Februar Maerz April Mai Tan Mods August September Oktober November Dezember main long sec time struct tm gmtime p sec time long x 0 3600 Za MEZ GMT 3600 x p gmtime amp sec BEINCE Ss d ptag p gt tm_wday p gt tm_mday printf TGs d pmon p gt tm_mon p gt tm_year 1900 1 2 PROGRAMMER S WORKBENCH 61 printf d 02d MEZ n p gt tm_hour p gt tm_min Quelle 1 16 C Programm zur Anzeige der Systemzeit Nun wollen wir dieselbe Aufgabe mit einem FORTRAN Programm bew ltigen Der UNIX Systemaufruftime 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 schreiben was der erfahrene Program mierer scheut oder nach einem Weg suchen eine beliebige C Standardfunktion in ein FORTRAN Programm hineinzuquet schen Der Systemaufruf time 2 macht keinen Kummer Er be n tigt ein Argument vom Typ Pointer auf long integer was es in FORTRAN gibt Der R ckgabewert ist vom Typ long integer auch kein Problem Die C Standardfunktion gmt ime 3 erwar tet ein Argument vom Typ Pointer auf long integer was machbar ware aber ihr Ergebnis ist ein Pointer auf eine Struktur Das hat FORTRAN noch nie gesehen Desh
74. Speicher adresse braucht nicht absolut oder relativ zu einem Anfangswert bekannt zu sein sondern ist wiederum ber einen Namen an sprechbar den Namen eines Pointers Genaugenommen geh ren die Adressen zur Hardware und sind f r den Programmierer fast immer bedeutungslos w hrend die Pointer Operanden der Programmiersprache sind denen zur Laufzeit als Wert Adres 96 KAPITEL 1 PROGRAMMIEREN IN C C sen zugewiesen werden Deshalb werden sie auch als Adress variable bezeichnet Pointer haben Namen Adressen sind he xadezimale Zahlen Das Arbeiten mit Adressen beziehungsweise Pointern erlaubt gelegentlich eine elegante Programmierung ist manchmal unvermeidlich und im brigen lter als die Verwen dung von Variablennamen Man muss nur stets sorgf ltig die Va riable 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 un ter Umst nden auf einen weiteren Pointer Typlose Pointer gibt es nicht in C Der Wert eines Pointers ist keine Ganzzahl int und darf nicht wie eine Ganzzahl behandelt werden obwohl letz ten Endes die Speicheradressen Hausnummern ganze Zahlen sind Die zul ssigen sinnvollen Operationen sind andere als bei ganzen Zahlen Hausnummern sind Zahlen die Multiplikation zweier Hausnumm
75. URL des Programms an das auf dem Webserver aus gef 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 I x cgi h x Teil einer Implementation der CGI Schnittstelle in C x define MAX_QUERY_LEN 4095 gegen Missbrauch struct list_item 36Etwas v llig anderes sind aktive Inhalte Anweisungen in Javascript Java Applets von Webseiten die auf dem Computer des Benutzers ausgef hrt werden 1 11 WEITERE C PROGRAMME 273 struct list_item next char key xvalue he struct array_item char xkey xvalue k void unescape_str char x x eigene Funktionen char get_query struct list_item parse_list char zi struct array_item parse_array char zi Quelle 1 97 Include Datei cgi h zum Programm cgi_test c x cgi_test c Hauptprogramm x Teil einer Implementation der CGI Schnittstelle in C x normalerweise entweder linked list oder array verwender x include lt stdio h gt include lt string h gt include cgi h int main char
76. Uebertrag zu Akku addieren add ax Ox 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 hoch 9 dividieren Quotient ergibt Uebertrag ins naechste Element des Arrays Rest ergibt aktuelles Element zweite for Schleife sub CX CX for2 cmp dx WORD PTR milliarde 2 Jl SHORT fertig sub ax WORD PTR milliarde 0 sbb dx WORD PTR milliarde 2 inc EX jmp SHORT for2 fertig Rest zurueckschreiben in aktuelles Array mov bx y mov WORD PTR bx si 0 ax mov WORD PTR bx si 2 dx Schleifenzaehler um 4 long erhoehen add si 4 Ruecksprungbedingung cmp si grp je SHORT done mp SHORT et Ende der Funktion done ret 168 KAPITEL 1 PROGRAMMIEREN IN C C aadd ENDP END 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 kei ne Rolle spielt 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 ausgegeben Die Assemblerfunktion laadd zur Addition unterscheidet sich
77. 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 Leh mann Dr Hansel 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 ver griffen D Shasha C Lazere Out of Their Minds 396 18 ANHANG H ZUM WEITERLESEN Springer Berlin Heidelberg 1995 295 S Biografien ber hmter Computerpioniere 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 origi 1993 6 S ASCII K Zuse Der Computer Mein Lebenswerk Springer Berlin Heidelberg 3 Aufl 1993 220 S Autobiografie Konrad Zuses Allgemeinwissen und Philosophie Newsgruppen comp ai philosophy sci philosophy tech alt fan hofstadter E Dyson Release 2 1 A Design for Living in the Digital Age Petersen Hamburg 2000 370 S D R Hofstadter Godel Escher Bach ein Endloses Geflochtenes Band dtv
78. Ver schwendung von Speicher da man Arrays in der maximal m g lichen Gr e anlegen m te Die Standardfunktion malloc 3 samt Verwandtschaft hilft aus der Klemme Im folgenden Bei spiel 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 Za Programm allo c zum Ueben von malloc 3 1994 06 01 define MAX 40 define DELTA 2 include lt stdio h gt include lt stdlib h gt long la x Pointer auf long int main Lt Ly X3 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 1 11 WEITERE C PROGRAMME 259 if la NULL puts Zuordnung ok else puts Ging daneben exit 1 x Array anschauen x printf Ganzzahl eingeben scanf d amp x for i 0 i lt MAX i la i long i x x printf Ausgabe Sld ld n la 10 la 20 x Array verlaengern mit realloc x la long realloc void la size_t DELTA zx sizeof long x Array anschauen la MAX DELTA x printf erweitert ld ld n la 10 la MAX DELTA x Speicher freigeben mit free free void la return 0 Quelle 1 93
79. Wortern 1 3 BAUSTEINE EINES QUELLTEXTES 77 gruppiert die durch Trennzeichen voneinander abgetrennt sind meist durch mindestens einen Zwischenraum Zeilen werden durch das Zeilenende markiert meist durch die ASCII Zeichen CR und oder LF Sinneinheiten wie W rter Zahlen oder Operato ren werden als Token bezeichnet sie d rfen nicht durch Trenn zeichen 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 Zeichenpaar Backslash Zeilenwechsel und ver bindet somit zwei Zeilen Auf diese Weise lassen sich lange An weisungen 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 Trennzei chen trennen die genannten Bausteine oder ganze Anweisun gen voneinander und sind festgelegt meist Leerzeichen space Semikolons und Linefeeds Bedeutungslose Zeichen sind ber z 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 Compiler und oder dem Betriebssystem Ger t man an solche Pr
80. Zusammengesetzte Typen Ar rays Strukturen 90 13 6 UNION 5 sx 6 24 ae Kiosk 93 1 3 6 6 Aufz hlungstypen 94 1 3 6 7 Pointer Zeiger 94 1 3 6 8 Weitere Namen f r Typen typedef 103 1 3 6 9 Speicherklassen 105 1 3 6 10 Geltungsbereich 106 1 3 6 11 Lebensdauer 107 1 3 7 Operationen 108 1 3 7 1 Ausdr ce sa 22 28 108 1 3 7 2 Zuweisung 108 1 3 7 3 Arithmetische Operationen 109 1 3 7 4 Logische Operationen 110 1 3 7 5 Vergleiche 2 a2 nn 112 1 3 7 6 Bitoperationen 114 1 3 7 7 stointeroperationen 115 1 3 7 3 Ein und Ausgabe Operationen 116 1 3 7 9 Sonstige Operationen 119 1 3 7 10 Vorrang und Reihenfolge 120 1 3 8 Anweisungen 2 222222 122 1 3 8 1 Leere Anweisung 122 1 3 8 2 Zuweisung als Anweisung 123 1 3 8 3 Kontrollanweisungen 123 1 3 84 Riickgabewert 131 1 3 9 Memo Bausteine 134 INHALT ix 1 3 10 bung Bausteine 135 1 4 Funktionen 136 1 4 1 Aufbau und Deklaration 136 1 4 2 Pointer auf Funktionen 137 1 4 3 Parameter bergabe 137 1 4 4 Kommandozeilenargumente main 151 1 4 5 Funktionen mit wechselnder Argumentan zahl ond N ee ee ee de ae 153 1 4 6 Iterativer Aufruf einer Funktion 157 1 4 7 Rekursiver Aufruf einer Funktion
81. access to a Transparent copy of the Docu ment and likewise the network locations given in the Do cument 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 For any section entitled Acknowledgements or Dedications Preserve the title of the section and preserve in the sec tion all the substance and tone of each of the contributor acknowledgements and or dedications given therein Preserve all the Invariant Sections of the Document unal tered in their text and in their titles Section numbers or the equivalent are not considered part of the section titles 360 ANHANG F GNU LIZENZEN M Delete any section entitled Endorsements Such a section may not be included in the Modified Version N Do not retitle any existing section to be entitled Endorse ments or to conflict in title with any Invariant Section O Preserve any Warranty Disclaimers If the 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 de signate some or all of these sections as invariant To do this add their titles to the list of Invariant Sections in the Modified Ver sion s license notice These titles must be distinct f
82. aktuelles Objekt zurueckgeben KR KKK KKK KK KK KK KK x Hauptprogramm KR KKK KKK KK KKK KKK int Main int argc char argv int max Obergrenze PRIM pzahl Erzeugung des Objektes pzahl Obergrenze ermitteln if argc gt 1 sscanf x argv 1 d amp max else cout Obergrenze eingeben cin max Ueberschrift ausgeben 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 pzah hl Schlussbemerkung cout Gesamtzahl pzahl get_count 1 n n return 0 Quelle 1 73 C Programm zur Berechnung von Primzahlen Im Hauptprogramm wird zun chst die Obergrenze aus der Kommandozeile oder im Dialog ermittelt Dann wird eine ber schrift ausgegeben Der Witz kommt im Rumpf der while 1 9 PR PROZESSOR 213 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 Hinter 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
83. and you may publicly display copies 3 COPYING IN QUANTITY If you publish printed copies or copies in media that common ly 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 legib ly 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 satisfy 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 rea sonably on the actual cover and continue the rest onto adjacent pages 358 ANHANG F GNU LIZENZEN 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 network using public has access to download using public standard network protocols a complete Transparent copy of the Doc
84. anderer lieber mit Komman dozeilen Einer schreibt einen langen Kommentar an den Pro grammanfang 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 cest homme 1 1 88 Programmiertechnik Bei kurzen Programmen wie sie in diesem Buch berwiegen setzt man sich oft gleich an das Terminal und legt los Beson ders jugendliche BASIC Programmierer neigen zu dieser Pro grammiertechnik Wenn man sich das nicht schnellstens abge w hnt kommt man nicht weit Um wirkliche Programme zu schreiben muss man systematisch vorgehen und viel Konzept papier verbrauchen ehe es ans Hacken geht Es gibt mehrere Vorgehensweisen Eine verbreitete sieht f nf Stufen vor water fall approach e Aufgabenstellung Vorstudien Analyse Formulierung e Entwurf Struktur Anpassen an Werkzeuge wie make 1 RCS CVS 24 KAPITEL 1 PROGRAMMIEREN IN C C e Umsetzung in eine Programmiersprache Codierung Im plementation e Test Fehlersuche Pr fungen Messungen Vergleich mit Punkt 1 e 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 vorangehenden Punkte schlecht erledigt worden sind kann auch ein Meister in C C nichts mehr retten Der Zeitbedarf der
85. ar 1 7 3 5 Dynamische Langzahl Arithmetik 1 7 3 6 Ein und Ausgabe in C XSC 1 7 3 7 C XSC Numerikbibliothek 1 7 3 8 Beispiel Intervall Newton Verfahren 22 igh ais ae 8 1 7 4 X11 Programmierung mit dem Qt Toolkit 1 8 Uberladen von Operatoren 1 9 Pr prozessor 23 323 4 2 ab ee Awe I 1 9 1 define Anweisungen 1 9 2 include Anweisungen 1 9 3 Bedingte Kompilation ifdef 1 9 4 Memo Pr prozessor 2 2 2222200 1 9 5 bung Pr prozessor 1 10 Dokumentation e CIO Zweck u Se eg 1 10 2 Anforderungen DIN 66 230 1 10 3 Erstellen einer man Seite 1 11 Weitere C Programme ES E WE EE Wes PAU AU EEGEN 1 11 3 Eehlersuche zn 2 ee a 4 2204 eS 1 11 4 Optimierung 2222200000 1 11 5 curses Fluch oder Segen 1 11 6 Mehr oder weniger zuf llig 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 1 11 9 Dynamische Speicherverwaltung malloc 1 11 10X Window System 1 11 llcgi Programme 1 12 Obfuscated C 2 2 was 22 se 8 ar ee a 198 200 202 INHALT xi 1 13 Portieren von Programmen 280 1 1 1 Regen san as sa at een 280 1 13
86. argc ist der Argu ment Counter eine Ganzzahl Sie ist gleich der Anzahl der Argumente 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 Argument Vector ein Array of Strings also ein Array of Arrays of Charac ters 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 64 KAPITEL 1 PROGRAMMIEREN IN C C envp wird nur ben tigt falls man Werte aus der Umgebung ab fragt Es ist wie argv ein Array of Strings Die Namen argc argv und envp sind willk rlich aber blich Typ und Reihenfol ge 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 Ergeb nis ist der Index i des gesuchten Strings im Array envp Den Systemaufruf access 2 finden wir in der Sektion 2 des Referenz Handbuches Er untersucht die Zugriffsm glich keiten 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 ein setzen Als zweites steht eine Ganzzahl die die Art des gefragten Zugriffs kennzeichnet Falls der gefragte Zugriff m
87. aus int zahlen 100 nr 12 inet macr x 137 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 je doch die Gr e eines Arrays zur Laufzeit mittels der Standard funktion malloc 3 ndern siehe Abschnitt 1 11 9 Dynamische Speicherverwaltung auf Seite 258 Es gibt mehrdimensionale Arrays Matrizen usw mit ent sprechend 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 In dizierung 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 94 25Felder in Datens tzen sind etwas v llig anderes 1 3 BAUSTEINE EINES QUELLTEXTES 91 Strings Zeichenketten In C C sind Strings oder Zei chenketten chaine de caracteres Arrays of characters abge schlossen durch das ASCII Zeichen Nr 0 nicht zu verwechseln mit der Ziffer 0 entsprechend ASCII Nr 48 Strings d rfen nicht beliebi
88. beanchbarte Gleitkommazahlen F r alle Dotprecision Datentypen steht ein verringerter Satz vordefinierter Operatoren zur Verf gung um fehlerfreie Ergeb nisse zu berechnen Die berladene Skalarprodukt Funktion accumulate und die Rundungsfunktion rnd sind f r alle sinnvollen Typkombinationen verf gbar 1 7 3 5 Dynamische Langzahl Arithmetik Neben den Klassen real und interval gibt es die dynami schen Klassen 1_real long real und 1_interval long in terval ebenso wie die entsprechenden dynamischen Vektoren und Matrizen samt allen arithmetischen und relationalen Ope ratoren und allen Standardfunktionen mit mehrfacher Genau igkeit 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 Deklaratio nen wird ein Anwendungsprogramm zu einem Programm mit mehrfacher Genauigkeit Dieses Konzept gibt dem Benutzer ein m chtiges und einfach zu handhabendes Werkzeug zur Fehler analyse in die Hand Weiterhin ist es m glich Programme zu schreiben die numerische Ergebnisse mit einer vom Benutzer vorgegebenen Genauigkeit liefern indem man intern die Re chengenauigkeit zur Laufzeit in Abh ngigkeit von den Fehler schranken der Zwischenergebnisse anpa t Alle vordefinierten Operatoren f r die Typen real und interval sind auch f r die Typen 1_real und l_interval verf gbar Zus tzlich sind auch alle m glichen Kombinationen 1
89. ber eine Datei liefert das Kom mando 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 aufru fenden Prozesses mit einer neuen Prozess ID Im Beispiel wird fork 2 in einer ewigen for Schleife aufgerufen 70 KAPITEL 1 PROGRAMMIEREN IN C C 1 2 10 Begriffe Programmer s Workbench Folgende Begriffe sollten klarer geworden sein Archiv Bibliothek Builder make Debugger Linker Profiler Quelltext oder code ausf hrbarer Code bersetzer Compiler Interpreter Systemaufruf Standardfunktion Versionsverwaltung Folgende Kommandos sollten beherrscht werden cc oder gcc lint Anfange von make Anfange von RCS ci co 1 2 11 Memo Programmer s Workbench Die Programmquellen werden mit einem Editor geschrie ben Mit dem Syntaxpriifer 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 empfehlen Der Compileraufruf ver einfacht sich wesentlich Auch f r Texte verwendbar Mit einem Compiler wird der Quellcode in den Maschinen code des jeweiligen Prozessors bersetzt Der schwerste Ha
90. der Programmierer das Er folgserlebnis fehlt Wir stellen hier einige Regeln auf die f r Programme zum Eigengebrauch gelten bei kommerziellen Pro grammen gehen die Forderungen weiter Die erste Gelegenheit zum Dokumentieren ist der Kommen tar im Programm Man soll reichlich kommentieren aber keine nichtssagenden Bemerkungen einflechten Wenn der Kommen tar etwa die H lfte des ganzen Programms ausmacht ist das noch nicht bertrieben 1 10 2 Anforderungen DIN 66 230 Zur Dokumentation legt die Norm DIN 66 230 Programmdo kumentation Begriffe und Regeln fest Eine weitere Norm ist der ANSVIEEE Std 1063 1987 Standard for Software User Do cumentation in Verbindung mit einer Reihe weiterer IEEE Standards Wir verwenden folgende vereinfachte Gliederung 1 Allgemeines e Name des Programms Programmart Vollprogramm Funktion e Zweck des Programms e Programmiersprache e Computertyp Betriebssystem e Ger te Drucker Plotter Maus e Struktur als Grafik Flie bild e externe Unterprogramme soweit verwendet 2 Anwendung e Aufruf e Konstante Variable e Eingabe von Tastatur aus Dateien e Ausgabe zum Bildschirm Drucker in Dateien e Einschr nkungen e Fehlermeldungen 1 10 DOKUMENTATION 223 e Beispiel e Speicherbedarf e Zeitbedarf 3 Verfahren e Algorithmus e Genauigkeit e G ltigkeitsbereich e Literatur zum Verfahren 4 Bearbeiter e Name Datum der Erstellung e Name Datum von nderun
91. der Schwerpunkt in Richtung Debian GNU Linux Ich habe auch fremde Hilfe bean sprucht 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 zahlrei chen Studenten f r Anregungen und Diskussionen Dar ber hin aus habe ich flei ig das Internet angezapft und viele dort umlau fende Guides Primers HOWTOs Tutorials und Sammlungen von Frequently Asked Questions FAQs verwendet Weingarten Baden 15 Februar 2006 Wulf Alex berblick 1 Programmieren in C C Zahlensysteme Zeichens tze UNIX Systemaufrufe C Lexikon Karlsruher Test GNU Lizenzen Zeittafel T o sa EB a D gt Zum Weiterlesen vi 291 298 314 317 329 345 365 377 Inhalt 1 Programmieren in C C 2 1 1 Grundbegriffe 0 2 1 1 1 Wozu Programmierkenntnisse 2 1 1 2 Warum braucht man Programmiersprachen 3 1 1 3 Sprachenfamilien 8 1 1 4 Imperative Programmiersprachen 10 1 1 5 Objektorientierte Programmiersprachen 15 1 1 6 Interpreter Compiler Linker 18 1 1 7 Qualit t und Stil 22222220 21 1 1 8 Programmiertechnik 23 1 1 9 Aufgabenanalyse und Entwurf 25 1 1 9 1 Aufgabenstellung 25 1 1 9 2 Zerlegen in Teilaufgaben 26 1 1 9 3 Zusammensetzen aus Teilaufgaben 27 11 10 Prototy pines 224 4 2 a3 E E 28 1 1 11 Flussdiagramme
92. ein Platzhalter der erst in einer abgeleiteten Klasse einen Inhalt bekommt x geof C Beispiel fuer Klassen und Vererbung geometrische Formen Compileraufruf HP CC o geof geof C define PI 3 14159 symbolische Konstante include lt iostream h gt fuer Ein und Ausgabe include lt string h gt wegen strcmp include lt stdlib h gt wegen exit void exit int Prototyp Systemaufrui class Form abstrakte Basisklasse public nach aussen sichtbar virtual void lesen 0 reine virt Funktione virtual void schreiben 0 protected public fuer abg Klas ansonsten private private nach aussen unsichtbe by 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 186 KAPITEL 1 PROGRAMMIEREN IN C C virtual double inhalt double double 0 private bi 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 virtual double volumen double private iz class Kreis public Kreis void lesen cout u umfang a i in
93. ein Rechenergebnis liefert Typ double x double area float rad return rad zx rad x PI x Funktion die einen Pointer zurueckgibt Typ char x gt char xmaxi char wl char w2 int i J for a 0 wl i Je O i 5 for j 0 w2 j de j return j gt 1 w2 wil Quelle 1 32 C Programm mit return Anweisungen Im Hauptprogramm main haben return n und 134 KAPITEL 1 PROGRAMMIEREN IN C C exit n dieselbe Wirkung In anderen Funktionen f hrt return zur R ckkehr in die n chsth here Einheit exit zum Abbruch des gesamten Programmes In der Syntax unterschei den 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 vor kommen k nnen 1 3 9 Memo Bausteine e Kommentar ist f r den menschlichen Leser bestimmt der Compiler bergeht ihn oder bekommt ihn gar nicht erst zu Gesicht e Namen bezeichnen Funktionen Konstanten Variable aller Art Makros oder Sprungmarken Labels Sie sollen mit einem Buchstaben beginnen e Operanden haben Namen Typ Geltungsbereich Lebens dauer und sp testens bei ihrer erstmaligen Benutzung einen Wert und belegen damit einen Platz und eine Adresse im Speicher e Eine Vereinbarung besteht aus Deklaration und Definiti on Die Deklaration weist einem Operanden Na
94. eine Datei na mens makefile mit folgenden Zeilen fehler fehler c cc fehler c o fehler 20 Real programmers can read core dumps 1 2 PROGRAMMER S WORKBENCH 75 und rufen anschlie end nur noch das Kommando make 1 oh ne Argumente auf Das Ergebnis 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 Fas sung mit dem Beautifier cb 1 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 E cflow fehler c cxref fehler c strings fehler nm fehler size fehler AS tl fehler strip fehler ls l fehler strings 1 ist ein ziemlich dummes Werkzeug das aus einer ausf hrbaren Datei alles heraussucht 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 Debugger nicht aber f r die Ausf hrung wichtigen Informationen heraus und verk rzt dadurch die Datei Abmel den mit exit Schreiben Sie in einer Programmiersprache Ihrer
95. einem Programmaufruf ohne Argumente steht also der Programmname in argv 0 der Argumentz hler argc hat den Wert 1 Das erste nichtbelegte Element des Argu mentvektors enth lt einen leeren String Die Umwandlung der Argumente vom Typ String in den gew nschten Typ besorgt die Funktion sscanf 3 Der Anfang eines Hauptprogrammes mit Kommandozeilen argumenten sieht folgenderma en aus int main int argc char argv char a int x if argc 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 Kommando zeile bernimmt Das erste Kommandozeilenargument nach dem Kommando 152 KAPITEL 1 PROGRAMMIEREN IN C C selbst wird als Zeichen verarbeitet 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 Funktionen ist k nnte die Typdekla ration weggelassen werden Sie kann Argumente bernehmen braucht es aber nicht Infolgedessen sind folgende Deklaratio nen g ltig main int main extern int main main void int main void extern int main void main int argc char xargqvyl int main int argc char argv extern int main int argc char x argv main int argc char xxargv int main int argc char xxargv extern int main int argc char xargv und alle anderen falsch Di
96. einfachen Pro grammiersprache f r das Gr bste kurzum nach einem Begin ners All Purpose Symbolic Instruction Code JOHN KEMENY und THOMAS KURTZ vom Dartmouth College in den USA erf llten 1964 mit BASIC diesen Bedarf Der Gebrauch von BASIC gilt in ernsthaften Programmiererkreisen als anriichig Richtig ist dass es unz hlige miteinander unvertr gliche BASIC Dialekte gibt dass BASIC die Unterschiede zwischen Betriebssystem und Programmiersprache verwischt und dass die meisten BASIC Dialekte keine ordentliche Programmstruktur erm glichen und daher nur f r kurze Programme brauchbar 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 Programmier sprache die Bearbeitung von Strings so einfach ist wie in BA SICH In der Messwerterfassung ist es beliebt Fazit die Kennt nis 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 theo retischer berlegungen entwickelt und nach einer umfangrei chen berarbeitung als ALGOL 68 ver ffentlicht Diese Pro grammiersprache ist nie in gro em Umfang angewendet worden spielte aber eine bedeutende Rolle als Wegbereiter f r die heu tigen Programmiersprachen beziehungsweise die heutigen Fas sungen lterer Sprachen Viel
97. 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 1960 1961 1962 1963 1964 1965 1966 1967 369 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 Eine Gleitkommaoperation dauert 15 ms Au er Maschinensprache 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 Chips auf JOSEPH CARL ROBNETT LICKLIDER hat zwei Visionen den interak Computer und das galaktische Netz wenn schon denn schon Er w Direktor in der ARPA und geht an die Verwirklichung seiner Vision Weltweit arbeite
98. et Zeichen Kaufmanns Und 2 Untiefe im Wattenmeer 0 Alias Buscontroller Algol Rom Dram Diskette Directory Dekrement Sprungbefehl Oktalzahl 335 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 fiir Rum 1 Read only memory 2 Dynamic random access memory 2 danisch fiir Schnaps 1 StraBenbahn 0 Madchen 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 336 ANHANG E KARLSRUHER TEST Subroutine Kleidungsst ck eines Priesters 0 was im Unterbewu ten 0 Unterprogramm 2 Spoiler virtuell Klammeraffe ESC Monitor Unix Joystick Maus Icon Pascal 337 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 da
99. existieren x 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 k return 0 Quelle 1 27 C Programm Ausgabe per Standardfunktion fputs 3 Das Programm macht im Grunde das Gleiche wie das voran gegangene die Schreibfunktion fputs 3 ist jedoch optimiert f r das Schreiben von Strings in eine Datei Es gibt auch eine Standardfunktion fwrite 3 zum Schreiben eines Blocks bi n 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 3 BAUSTEINE EINES QUELLTEXTES 119 1 3 7 9 Sonstige Operationen Ferner bietet C noch einige Operatoren f r verschiedene Aufga ben e Datentyp Umwandlung cast Operator Komma Operator e sizeof Operator sizeof Der cast Operator oder Umwandlungsoperator enthalt 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 Gleitkommazahl doppelter Genauigkeit Die Ty pumwandlung von n wird durch den cast Operator double bewirkt Bei der Typumwandlung k nnen Bits oder Dezimal stellen verlorengehen wenn der
100. exit x Pruefung des Programmaufrufs if argc 2 printf Aufruf duden FILENAME n exit 1 x Arbeitsspeicher allokieren x stat argv 1 amp buf if mp malloc unsigned buf st_size NULL printf Kein Speicher frei n exit 1 ap 0 mp x Textfile einlesen fuehrende NOCHARs loeschen x if fp fopen argv 1 r NULL printf File s kann nicht goeffnet werden n argv l exit 1 while a fgetc fp EOF if flag 0 amp amp NOCHAR a else flag 1 xmp a if xmp n flag 0 ap t t i mp else mptt fclose fp x Zeilenpointer sortieren if sort i 1 0 A 1 11 WEITERE C PROGRAMME 263 printf Sortieren ging daneben n exit 1 x Textfile zurueckschreiben z if fps fopen strcat argv 1 EXT w NULL printf File s s kann nicht geoeffnet werden n argv 1 exit 1 for j 0 j lt i j While la e lapl 71 An fputc a fps fputc n fps fclose fps x Ende Hauptprogramm Za Sortierfunktion Bubblesort stabil x int sort int imax int flag 0 i 0 3 0 k 0 char pl p2 extern char xap while flag 0 flag 1 k i p2 ap imax for J imax j gt k j 4 p1 ap j 1 if vergleich pl p2 lt 0 ap j p2 p2 pl else ap j pl i j
101. fclose fp fp fopen TEXT r for i 0 i lt 30 i zeile i fgetc fp putchar Le for i 0 i lt 30 i putchar zeile i Za Stringfunktionen x strcpy zeile buffer printf n s zeile putstf n nBitte eine Zeile eingeben gets zeile puts zeile 174 KAPITEL 1 PROGRAMMIEREN IN C C 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 Ver arbeitung von Netzadressen Protokolleintr gen Remote Proce dure Calls zum Mounten ferner Datei Systeme zur Verwaltung von Benutzern und Passw rtern im Netz Geht ber den Rah men dieses Textes hinaus Falls Sie sich ein eigenes Programm telnet oder ftp schreiben wollten m ten Sie hier tiefer ein steigen 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 1m Ferner mu im Programmkopf die Zeile include lt math h gt stehen Dann verf gt man ber Logarithmus Wurzel Potenz trigonometrische und hyperbolische Funktionen Weiteres siehe math 5 Eigentlich sollte man bei diesen Funktionen den zugrunde liegenden Algorithmus und seine Programmierung kennen da jedes numerisch
102. herer Ebene werden Funktionen einer Toolbox wie der Xt Bibliothek definiert die ihrerseits auf der Xlib auf setzt Die Xt Funktionen werden auch als Intrinsics bezeichnet Sie kennen z B Widgets das sind Window Gadgets oder Ob jekte im Sinne von C des Client Programms Zu einem Wid get geh 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 einheitlichen Regeln gebauter Wid gets 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 Kleinigkeit 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 kommerziel le Bibliothek stehen die bei vielen numerischen Aufgaben die Arbeit erleichtert Die FORTRAN Bibliothek umfa t etwa 1200 Subroutinen die C Bibliothek etwa 250 Funktionen Sie stam men aus folgenden Gebieten e Nullstellen Extremwerte e Differential und Integralgleichungen e Fourier Transformation e Lin
103. hnt 124 KAPITEL 1 PROGRAMMIEREN IN C C Bedingung Die Ausf hrung eines Blocks kann von einer Be dingung condition abh ngig gemacht werden Die Bedingung ist ein Ausdruck der nur die Werte true oder false annimmt Ist die Bedingung true wird der Block abgearbeitet und dann im Programm fortgefahren Ist die Bedingung false wird der Block bersprungen Kann die Bedingung niemals true werden hat man toten unerreichbaren Code geschrieben Ist die Bedin gung immer true sollte man auf sie verzichten In C wird die Bedingung mit dem Schl sselwort if eingelei tet ohne then im Unterschied zu einem Shellscript Besteht der Block nur aus einer einzigen Anweisung kann auf die ge schweiften Klammern verzichtet werden if Ausdruck einzelne_Anweisung x oder x if Ausdruck Block von Anweisungen Verzweigung C Bei einer Verzweigung branch entschei det sich der Computer in Abh ngigkeit von einer Bedingung in einem von zwei Programmzweigen weiterzumachen Im Gegen satz zur Schleife kommt kein R cksprung vor Verzweigungen d rfen geschachtelt werden 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 folgen derma 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
104. mit cin die beiden Index grenzen n und m von stdin eingelesen Die Vereinbarung eines Vektors oder einer Matrix ohne Angabe der Indexgrenzen lie fert 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 Anwei sung wie Resize durch eine Zuweisung erfolgen Falls die In dexgrenzen des Objektes auf der rechten Seite einer Zuweisung nicht mit den Indexgrenzen des Objektes auf der linken Seite bereinstimmen wird das linke Objekt angepa t wie es hier mit der Matrix C geschieht Der dynamisch zugewiesene Speicherplatz eines lokal ver einbarten Arrays wird automatisch beim Verlassen des G ltig keitsbereiches freigegeben Hinsichtlich Lebensdauer und G l tigkeitsbereich besteht kein Unterschied zu den aus C gewohn ten 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
105. 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 wiederholen Das ist seine St rke Wie derholungen von Anweisungen kommen daher in fast allen Pro grammen vor sie werden Schleifen loop genannt Eine Schleife hat einen Eingang sonst k me man nicht hin ein 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 126 KAPITEL 1 PROGRAMMIEREN IN C C Entweder Ein oder Ausgang sind an eine Bedingung ge kn pft die entscheidet wie oft die Schleife durchlaufen wird Folgende Konstruktionen sind m glich e Eingang Eintrittsbedingung e Schleifenrumpf Anweisungen e Ausgang R cksprung zum Eingang Diese Schleife wird nur betreten falls die Eintrittsbedingung er f llt ist unter Umst nden also nie Sie wird deshalb abweisen de 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 Bedingung einzelne_Anweisung x oder while Bedingung Block von Anweisungen Die zweite M glichkeit l sst sich grunds tzlich auf die erste zu r ckf hren wird aber trotzdem verwendet weil das Programm dadurch einfacher
106. 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 x changing the background of window x XSetWindowBackground mydisplay mywin2 color3 pixel XSetBackground mydisplay mygcl color2 pixel x setting foreground attribute in GC structure x XSetForeground mydisplay mygcl yellow pixel x setting background attribute in GC structure x XSetForeground mydisplay mygcl2 colorl pixel XSetBackground mydisplay mygcl2 color3 pixel XSetBackground mydisplay newgc mybackground XSetFont mydisplay mygcl XLoadFont mydisplay yrb 25 x setting font attribute in GC structure z 268 KAPITEL 1 PROGRAMMIEREN IN C C XSetFont mydisplay mygc12 XLoadFont mydisplay gust E St Re XSetFont mydisplay newgc XLoadFont mydisplay yri 25 window mapping XMapRaised mydisplay mywinl XMapRaised mydisplay mywin2 Za input event selection x XSelectInput mydisplay mywinl KeyPressMask ExposureMask XSelectInput mydisplay mywin2 KeyPressMask ExposureMas
107. myhint height 450 myhint flags PPosition PSize window creation mywinl 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 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 x creation of a new window x XSetStandardProperties mydisplay mywin2 Hallo Hallo None argv argc amp myhint x pixmap creation mypixmap XCreatePixmap mydisplay DefaultRootWindow mydisplay 400 200 DefaultDepth mydisplay myscreen Za GC creation and initialization mygcl XCreateGC mydisplay mywinl 0 0 1 11 WEITERE C PROGRAMME 267 mygcl2 XCreateGC mydisplay mywin2 0 0 newgc XCreateGC mydisplay mywin2 0 0 x determination of default color map for a screen cmap DefaultColormap mydisplay myscreen yellow red 65535 yellow green 65535 yellow blue Za allocation of a color cell if XAllocColor mydisplay cmap amp yellow 0 fprintf stderr Cannot specify color exit 2 x allocation of color cell using predefined color name if XAllocNamedColor
108. nach rechts d n kK ik J printf Eingabe d mit d bitweise und BENT pe a ai ae j printf Eingabe d mit d bitweise oder Sq n return 0 Quelle 1 25 C Programm mit Bitoperationen 1 3 7 7 st ointeroperationen Folgende Operationen behandeln Pointer e Referenzierung amp e Dereferenzierung x oder bei Arrays e Strukturverweis gt minus gr er bei Strukturpointern e Strukturverweis Punkt bei Strukturnamen Weiterhin sind folgende f r Ganzzahlen zul ssige Operationen f r Pointer definiert e Vergleich zweier Pointer auf denselben Typ e 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 Vergleich gr er kleiner setzt eine be stimmte Ordnung der Adressen voraus und ist problematisch man l sst besser die Finger davon double pl p2 if pl p2 Za ok ai if p1 p2 Za ok x if pl NULL x ok x Te pP Sp E Za gefaehrlich 116 KAPITEL 1 PROGRAMMIEREN IN C C Bei der Addition oder Subtraktion einer ganzen Zahl bedeutet die ganze Zahl nicht eine Anzahl von Bytes sondern eine An zahl 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 Za erstes El
109. nicht alle Compiler unterstiitzen die Angabe der Argumenttypen Auch den Standardtyp int soll te man deklarieren um zu verdeutlichen da man ihn nicht ver gessen hat Anderungen werden erleichtert 1 4 2 Pointer auf Funktionen Der Name einer Funktion ohne die beiden runden Klammern ist der Pointer auf ihren Eingang entry point Damit kann ein Funktionsname berall verwendet werden wo Pointer zul ssig sind Insbesondere kann er als Argument einer weiteren Funk tion dienen In funktionalen Programmiersprachen ist die M g lichkeit Funktionen als Argumente h herer Funktionen zu ver wenden noch weiter entwickelt Arrays von Funktionen sind nicht zul ssig wohl aber Arrays von Pointern auf Funktionen siehe Programm 1 90 auf Seite 254 Makros define sind keine Funktionen infolgedes sen gibt es auch keine Pointer auf Makros Zu Makros siehe Ab schnitt 1 9 Pr prozessor auf Seite 213 1 4 3 Parameter bergabe Um einer Funktion die Argumente oder Parameter zu bermit teln gibt es mehrere Wege Grunds tzlich m ssen in der Funk tion die entsprechenden Variablen als Platzhalter oder forma le Parameter vorkommen und deklariert sein Im Aufruf der 138 KAPITEL 1 PROGRAMMIEREN IN C C Funktion kommt der gleiche Satz von Variablen gegebenen falls unter anderem Namen mit jeweils aktuellen Werten vor sie werden als aktuelle Parameter oder Argumente bezeich net Die Schnittstelle von Programm und Funktion mu
110. oben den zu programmierenden Aufgaben aus der realen Welt her kommen die Anforderungen an die Sprache Von unten der Hardware CPU und dem Betriebssystem her kom men die M glichkeiten zur L sung der Aufgaben Wir haben fol gende Schichten e Aufgabe Problem e Losungsweg Algorithmus e Programm in einer h heren problemorientierten Sprache e Assemblerprogramm e Maschinenprogramm e Mikroprogramme Firmware im Computer e 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 Com pilerbauer 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 sich 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 Compi lern hinaus und erstreckt sich ganz allgemein auf die Analyse und Verarbeitung von Zeichenfolgen 8 KAPITEL 1 PROGRAMMIEREN IN C C 1 1 3 Sprachenfamilien Hat man eine Aufgabe ein Problem zu l sen so kann man drei Abschnitte auf dem Weg unterscheiden e Aufgabenstellung e L sungsweg e Ergebnis Das Ergebnis ist nicht bekannt sonst w re die Aufgabe bereits gel st Die Aufgabenstellung und erforderlichenfalls einen L sungsweg sollten wir k
111. oder ver ndert werden Dar ber hinaus sind auch Variable denkbar die in einem Ver zeichnis einem Datei System oder in einer Netz Domain gelten Je gr er der Geltungsbereich ist desto sorgf ltiger muss man mit der Schreibberechtigung umgehen 1 3 6 11 Lebensdauer Beim Eintritt in einen Bereich wird f r die in diesem Bereich de finierten Variablen Speicher zugewiesen allokiert Beim Verlas sen des Bereiches wird der Speicher freigegeben von den Varia blen 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 Die se Speicherklasse wird als auto bezeichnet und ist die Standard klasse 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 Spei cher samt Inhalt bleibt beim Verlassen der Funktion bestehen Die Variable besteht ist aber vor bergehend unsichtbar exis tent aber nicht zug nglich 108 KAPITEL 1 PROGRAMMIEREN IN C C 1 3 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 Ope randen anstellen kann Der Operator bestimmt was mit dem Operand geschieht Un re Operatoren wirken auf genau einen Operanden bin re auf
112. of mathematics a Seconda ry 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 commercial philosophical ethical or political position regarding them The Invariant Sections are certain Secondary Sections whose titles are designated as being those of Invariant Secti ons in the notice that says that the Document is released under this license If a section does not fit the above definition of Se condary 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 there 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 356 ANHANG F GNU LIZENZEN 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 dra wings some widely available drawing editor and that is suita ble for input to text formatters or for automatic translation to a variety of formats suitable f
113. prandom input output 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 Zufallszah len 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 242 KAPITEL 1 PROGRAMMIEREN IN C C weil beide Sprachen den Typ Ganzzahl kennen und die C Funktion einfach ist Wie wir anfangs auf Seite bemerkt haben ist es prinzipi ell unm glich mit einer deterministischen Maschine Zufallser gebnisse zu erzeugen Die vorstehenden Programme liefern da her auch nur Pseudo Zufallszahlen pseudo random number die hinsichtlich bestimmter Eigenschaften mit echten Zufallszahlen bereinstimmen F r viele Zwecke reicht das f r einen Vokabel trainer 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 hnungsbe d rftig Sie sind bei C Programmierern beliebt weil sie zu ele ganten und schnellen Programmen f hren Wir wollen uns an Hand einiger Beispiele an ihren Gebrauch gew hnen Eine Wie derholung Der Computer kennt
114. quad c lm x define EPS 1 0e 30 x Typ double x include lt stdio h gt x wg puts printf scanf 3 include lt math h gt wg fabs sqrt int done int main dou pt az br 7 Gs Me sy Xl 2 double z 2 puts Loesung von axx xx bxx c 0 puts Bitte a b und c eingeben scanf 1f SIT SI amp a amp b amp c x 1 Fall a nahe Null lineare Gleichung if fabs a lt EPS puts WARNUNG a nahe Null als Null angenommen if fabs b lt EPS puts WARNUNG auch b nahe Null Unsinn done else printf Loesung 1f n c b 288 KAPITEL 1 PROGRAMMIEREN IN C C done else Berechnung der Diskriminanten d x d bxb Ek ee e AE E h se a Ja 2 Fall eine oder zwei reelle Loesungen x if d gt 0 0 s sqrt d xl b s h x2 b s h puts Eine oder zwei reelle Loesungen printf x1 l1f n x1 printf x2 LEN x2 done else x 3 Fall konjugiert komplexe Loesungen x z 0 b h z 1 sqrti d bs puts Konjugiert komplexe Loesungen printf xL slr Sty was ZTO sie yc printf x2 1f EE aert 210 z 1 done i x Funktion done zur Beendigung des Programms x int done return 0 Quelle 1 103 C Programm Quadratische Gleichung mit reellen Koeffizienten und komplexen L sungen aus FORTRAN bertra gen 1 14 EXKU
115. 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 lt magic h gt void exit long lseek int main argc argv envp int argc char xargv envp int i fildes struct stat buffer long asec msec csec struct tm xpa xpm Je if argc lt 2 puts Dateiname fehlt return 1 Za Informationen aus dem Environment x for i 0 envp i NULL i if strncmp envp i LOGNAME 4 PrINEL nss n envplil x Informationen mittels Systemaufruf access 2 x 66 prin if else if else if else if else Fa I if KAPITEL 1 PROGRAMMIEREN IN C C t f nFile heisst 8s n argv 1 access argv 1 0 puts File existiert puts File existiert nicht Iaccess argv 1l 1 puts File darf ausgefuehrt werden puts File darf nicht ausgefuehrt werden access argv 1l 2 puts File darf beschrieben werden puts File darf nicht beschrieben werden access argv 1l 4 puts File darf gelesen werden puts File darf nicht gelesen werden nformationen aus der Inode Systemaufruf stat 2 stat argv 1 amp buffer printf nDevice gld 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
116. that is to say a work containing the Program or a portion of it either verbatim or with modifications and or transla ted into another language Hereinafter translation is in cluded without limitation in the term modification Each licensee is addressed as you Activities other than copying distribution and modification are not covered by this License they are outside its scope F 1 GNU GENERAL PUBLIC LICENSE 347 The act of running the Program is not restricted and the output from the Program is covered only ifits contents con stitute a work based on the Program independent of ha ving 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 Pro gram s source code as you receive it in any medium pro vided 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 of the 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 of the Program or any portion of it thus forming a work based on the Program and copy and distribute such modifications or work under the ter
117. time Das Argument von time ist hier der Nullpointer Die Funktion srand oder srandom startet den Gene rator rand beziehungsweise random Beide Funktionspaare verwenden unterschiedliche Algorithmen siehe die zugeh rigen man Seiten Das Ergebnis des Generators wird modulo MOD ge nommen um den Zahlenbereich zu begrenzen Da wir Zahlen von 1 bis MOD die Grenzen eingeschlossen haben wollen addie ren 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 Rech nung in einer Funktion zufallszahl durchgef hrt wird und das Hauptprogramm nur die Zahlen ausgibt x random2 c zur Erzeugung von Zufallszahlen MAX Zufallszahlen von 1 bis MOD x 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 int main IDE SC for i 0 i lt MAX i print i sd n zufallszahl int MOD return 0 x Funktion zufallszahl x int zufallszahl int m static int r 0 unsigned s 240 KAPITEL 1 PROGRAMMIEREN IN C C TE Ir s unsigned time time_t zi 0 srand s r 1 rand m return r Quelle 1 85 C Programm zur Erzeugung von MAX Zufallszah len im Bereich von 1 bis MOD mit Funktion Um die Funktion zufallszahl allgemein verwendbar zu gestalten ber
118. und benennt source b in source c um 1 2 3 Unentbehrlich make Gr ere Programme sind stark gegliedert und auf mehrere bis viele Dateien und Verzeichnisse verteilt Der Compileraufruf wird dadurch l nglich und die Wahrscheinlichkeit etwas zu ver gessen steigt Hier hilft make 1 Man schreibt einmal alle An gaben f r den Compiler in ein makefile auch Makefile und ruft dann zum Kompilieren nur noch make 1 auf F r Manu skripte ist make 1 ebenfalls zu gebrauchen Statt Makefiles lie Ben sich auch Shellskripte einsetzen die St rke von make 1 liegt jedoch im Umgang mit Dateien unter Beachtung des Zeit stempels mt ime j ngster schreibender Zugriff Werkzeuge wie make 1 werden als Builder bezeichnet 36 KAPITEL 1 PROGRAMMIEREN IN C C 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 einfaches makefile sieht so aus Zei len mit Kommandos m ssen durch einen Tabulatorstop nicht durch Spaces einger ckt sein pgm a o b o cc a o b o o pgm a 0 incl h a c Ce C arC Dio Tiel in pse Be a Dre Quelle 1 7 Einfaches Makefile und ist folgenderma en zu verstehen e Das ausfiihrbare Programm Ziel Target namens pgm h ngt ab von den Modulen im Objektcode a o undb o Es entsteht durch den
119. und die Programme nicht portierbar sind l t man nach M glichkeit die Finger davon Es kann jedoch zweckm ig sein einfache kur ze Funktionen auf Assembler umzustellen Einmal kann man so unmittelbar auf die Hardware zugreifen beispielsweise in An wendungen zum Messen und Regeln zum anderen zur Beschleu nigung oft wiederholter Funktionen x fakul c Berechnung von Fakultaeten x 162 KAPITEL 1 PROGRAMMIEREN IN C C x Die Grenze fuer END liegt in der Segmentgroesse x x bis 260 werden alle Werte in einem Array gespeichert darueber wird Wert fuer Wert berechnet und ausgegeben x x Ziffern in Neunergruppen nutzt long aus define END 260 define MAX 1023 define DEF 16 define GRP 58 define GMX 245 x GRP muss in aadd asm eingetragen werden x GMX muss in laadd asm eingetragen werden include lt stdio h gt unsigned long f END 1 GRP Za global x void add unsigned long x unsigned long asi void exit int long time long Za Assemblerfunktionen zur Beschleunigung amp extern void aadd unsigned long x unsigned long zi extern void lshift unsigned long x x Hauptprogramm x int main int argc char argv int e i J k S flag ende max DEF unsigned long x GRP unsigned long z long zl Z2 233 x Auswertung der Kommandozeile if argc gt 1 sscanf x argv 1 d amp max max max lt 0 max max if max gt MAX pri
120. verst ndliche Form k nnte ein er fahrener Programmierer noch von Hand schreiben Fr her gab es nichts anderes Im Gro en und Ganzen entspricht eine An weisung in C oder FORTRAN vier Assembler Anweisungen Die Assembler Befehle werden zu einem wesentlichen Teil durch den Hersteller der CPU bestimmt hier also durch Intel Das Assembler Programm ist an die Hardware und das Betriebssys tem gebunden Nun folgt als dritter Schritt die bersetzung des Assembler programms in ein Maschinenprogramm hier gek rzt und mit 6 KAPITEL 1 PROGRAMMIEREN IN C C Hexadezimalzahlen anstelle der Nullen und Einsen wiedergege ben 4c01 0300 66da 7d31 da00 0000 Od00 0000 0000 0401 2e74 6578 7400 0000 0000 0000 0000 0000 3000 0000 8c00 0000 ben 0000 0000 0000 0300 0000 2000 0000 2e64 6174 6100 0000 3000 0000 3000 0000 0000 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 Maschine 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 ver wenden eine Standard Funktion printf zur Ausgabe auf den Bildschirm Auch hinter dem W rtchen main verbirgt sich ei niges Deren Code mu noch hinzugef gt werden dann kann die Maschine loslegen mit der Begr ung Diesen letzten Schr
121. void p gt _flag Gs A _IOERR _IOEOF define feof p p gt _flag amp _IOEOF define ferror p p gt _flag amp _IOERR define fileno p p gt _file else void clearerr endif not lint extern FILE _iob _NFILE extern FILE fopen xfdopen xfreopen popen extern FILE tmpfile extern long ftell extern void rewind setbuf extern char ctermid cuserid xfgets gets extern char tmpnan extern unsigned char x_bufendtab endif NFILE Quelle 1 74 Include Datei usr include stdio h gek rzt Die Standard Include Dateien wie stdio h d rfen in belie biger Reihenfolge im Programm aufgef hrt werden auch mehr mals 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 218 KAPITEL 1 PROGRAMMIEREN IN C C 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 Pro gramms erzeugen ohne daf r verschiedene Quellfiles schreiben zu m ssen Unser C Programm 1 89 auf Seite 251 zur Berech nung von Primzahlen hat verschiedene Obergrenzen je nach dem ob es unter PC DOS oder UNIX l uft Im Programmkopf vor main stehen daher folgende Zeilen ifdef UNIX define MAX
122. 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 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 Tonen Telegraphon 01 Januar 1900 00 00 00 GMT Nullpunkt der gegenw rtigen NTP Ara eine NTP ra umfasst 136 Jahre Gr ndung der Deutschen Hollerith Maschinen GmbH Berlin der 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 gungszweck 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
123. von UNIX C Funktionen die sich in ihrer Syntax nicht von ei genen oder fremden C Funktionen unterscheiden Deshalb m s sen 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 der POSIX Standard offen l sst ob diese vom Betriebssystem zur Verf gung gestellten Funktionen als Systemaufrufe oder als Bibliothek verwirklicht sind Aufjeden Fall geh ren sie zum Be triebssystem nicht zum Compiler Die Unterscheidung spielt ei ne Rolle wenn man f r verschiedene Betriebssysteme und oder Compiler programmiert Der Programmierer muss wissen wo her seine Funktionen stammen In Sektion 3 finden sich vorgefertigte Unterprogramme Subroutinen oder Standardfunktionen standard function 17Standardfunktionen sind erst verf gbar nachdem andere Programmierer sie geschrieben haben 58 KAPITEL 1 PROGRAMMIEREN IN C C fonction l mentaire f r h ufig vorkommende Aufgaben F r den Anwender besteht kein Unterschied zu den Systemaufrufen Streng genommen geh ren diese Standardfunktionen jedoch zu den jeweiligen Programmiersprachen zum Compiler und nicht zum Betriebssystem Der Kreis der Standardfunktionen ist be liebig erg nzbar Um den Benutzer zu verwirren sind die Sys temaufrufe und die Standardfunktionen in einer Funktionsbi
124. 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 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 1 2 PROGRAMMER S WORKBENCH 35 nicht nur Fehler sondern auch Stilm ngel Manchmal beanstan det er auch Dinge die man bewu t gegen die Regeln geschrieben hat Man mu seinen Kommentar sinnvoll interpretieren Auf ruf 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 erleich tert cb source c gt source b Wenn man mit dem Ergebnis source b zufrieden ist l scht man die urspr ngliche Datei source c
125. whose distribution conditions are different write to the author to ask for permission For software which is copyrighted by the Free Software Foundation wri te to the Free Software Foundation 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 TO THE EX TENT PERMITTED BY APPLICABLE LAW EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOL DERS AND OR OTHER PARTIES PROVIDE THE PROGRAM 352 12 ANHANG F GNU LIZENZEN AS IS WITHOUT WARRANTY OF ANY KIND EITHER EX PRESSED 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 REDIS TRIBUTE THE PROGRAM AS PERMITTED ABOVE BE LIABLE TO YOU FOR DAMAGES INCLUDING ANY GENERAL SPECI AL INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DA TA
126. wird e Eingang wird in jedem Fall betreten e Schleifenrumpf Anweisungen e 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 x oder x do Block von Anweisungen while Bedingung Eine Variante die eine define Zeile erfordert sieht folgende ma en aus define Please Please do Block while Bedingung 1 3 BAUSTEINE EINES QUELLTEXTES 127 In hartn ckigen F llen soll diese Schleife der Standard Schleife berlegen sein Rein aus Bequemlichkeit gibt es in C noch eine dritte Schleife 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 Schleifen rumpf betreten Zuletzt wird der Ausdruck inkrementierung ausgewertet und zur Bedingung zur ckgesprungen 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 for Wr ist die ewi
127. 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 251 den modulo Operator verwenden Die berladung bewirkt da der Pr fix Operator ange wandt aufein Objekt der Klasse PRIM die jeweils n chste Prim zahl erzeugt Man h tte auch einen anderen Operator nehmen k nnen Die f r Klassen definierten Operatoren wie d rfen nicht berladen werden da sie gebraucht werden Bei Opera toren wie der Bedingten Bewertung ist schwer vorstellbar welche neue Bedeutung sie erhalten sollten 1 9 Pr prozessor Beim Aufruf des Compilers wird der Quelltext als erstes von ei nem Pr prozessor bearbeitet Dieser f hrt die define und include Anweisungen aus und entfernt Kommentare sowie Zeichenpaare Backslash Zeilenwechsel verbindet Fortsetzungs zeilen der Zeilenwechsel muss unmittelbar auf den Backslash folgen 1 9 1 define Anweisungen Die define Anweisung dient zwei Zwecken Sie definiert sym bolische Konstanten sowie Makros Eine symbolische Kon stante 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 x MWST 214 KAPITEL 1 PROGRAMMIEREN IN C C Damit erleichtert man nderungen die sich so auf eine Stelle beschr nken und vermeidet das Auft
128. 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 lauft und damit den hiesigen Rekord an Betriebsjahren halt Preis 23 MDM 3 Zentraleinheiten 256 Kilo Worter zu je 36 Bits Arbeitsspeicher 20 Bildschirme Die Karlsruher Fakultat fiir Informatik wird gegriindet 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 und Telnet RFC 137 werden vorgeschlagen und diskutiert IBM entwickelt das Konzept des virtuellen Speichers und stellt die 8 Zoll Floppy Disk vor Xerox ROBERT METCALFE DEC und Intel entwickeln den Ethernet Standard Das ARPANET wird der Offentlichkeit vorgestellt Ein Student namens STEPHAN G WOZNIAK lotet sich einen Computer zusammen der den Smoke Test nicht tibersteht In der Bundesrepublik arbeiten rund 8 200 Computer Erster wis
129. x 5 Bern ee else return x 2 Quelle 1 29 C Programm mit zusammengesetzter for Schleife Im Initialisierungsteil wird der Schleifenz hler i mit 3 be legt und getrennt durch den Komma Operator mittels der Standard Funktion puts 3 ein String ausgegeben In der Ein trittsbedingung wird gerechnet wichtig ist nur dass schlieBlich ein Wert 0 oder nicht 0 herauskommt Dann wird gegebenenfalls der Schleifenrumpf ausgefiihrt wobei im Rumpf auf die Varia blen i und j des Schleifenkopfes zugegriffen wird Abschlie end wird der Schleifenz hler i inkrementiert und wieder durch den 1 3 BAUSTEINE EINES QUELLTEXTES 129 Komma Operator getrennt nochmals mit Hilfe einer Funktion sum x ver ndert Wenn die Schleife nach einigen Durchl ufen verlassen wird steht der Schleifenz hler i weiterhin zur Verf gung In dem Kopf der for Schleife l sst sich allerhand unter bringen auch Anweisungen die mit der Schleife nichts zu tun haben 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 sparsam zu ver wenden Bei der Behandlung von Ausnahmen Division durch Null brauch
130. xlist_query xarray_query struct list_item xparam_list struct array_item param_array x hiermit beginnt die Ausgabe x printf Content Type text plain 015 012 015 012 Za query string ermitteln und duplizieren list_query get_query if list_query NULL printf Keine Parameter n return 0 array_query strdup list_query x linked list erzeugen x param_list parse_list list_query printf Parameter per Linked List n 274 KAPITEL 1 PROGRAMMIEREN IN C C while param_list NULL printf s s n param_list gt key param_list gt valu param_list param_list gt next x array erzeugen x param_array parse_array array_query printf nParameter per Array n while param_array gt key NULL printf s s n param_array gt key param_array gt va param_arraytt return 07 Quelle 1 98 C Programm cgi_test c zum Ausprobieren der cgi Schnittstelle cgi c Funktionen x Teil einer Implementation der CGI Schnittstelle in C x include lt stdio h gt include lt stdlib h gt include lt string h gt include lt ctype h gt include cgi h x x Wandelt alle xx Tripel in einzelne Zeichen um und in x wobei der uebergebene String veraendert wird x void unescape_str char xs size t r for i strlen s i gt 2 i S A if xs xs Es else if xs amp amp isxdigit s 1 Se isxdigit s 2
131. 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 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 Pu blic 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 for bid anyone to deny you these rights or to ask you to surrender the rights These restrictions translate to certain responsibilities for you if you distribute copies of the software or if you modify it 345 346 ANHANG F GNU LIZENZEN For example if you distribute copies of such a program whe ther 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 term
132. zu dereferenzieren ist verfr ht und f hrt zu einem t dlichen 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 und ihre Adresse dem Pointer py zuweisen Damit enth lt auch er einen Wert und zwar die Adresse von x und darf beliebig weiterverwendet 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 ers ten 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 auftau chen ein Arrayname ist wie jede Konstante als Linkswert un geeignet 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 Null pointer genannt und zeigt auf kein g ltiges Datenobjekt Wie im richtigen Leben gibt es keine Hausnummer Null Sein Auf
133. zwei tern re auf drei Mehr Operanden sind selten Operator plus Operanden bezeichnet man als Aus druck 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 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 Gleichheitszeichen darf von Spaces umgeben sein und sollte es wegen der besseren Les barkeit 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 bergeordneten Ausdruck auftreten Auf der rechten Seite einer Zuweisung kann alles stehen was einen Wert hat beispielsweise eine Konstante ein berechenba rer 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 ste hen was einen Wert annehmen kann beispie
134. 00 fs 29 11101 35 ld 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 i 35 100011 43 23 11 101 36 100100 44 24 11 110 37 100101 45 25 11 111 I 38 100110 46 26 11 1000 amp 39 100111 47 27 11 1001 40 101000 50 28 100 0 41 101001 51 29 100 1 42 101010 52 2a 100 10 S 43 101011 53 2b 100 11 44 101100 54 2c 100 100 45 101101 55 2d 100 101 46 101110 56 2e 100 110 a 47 101111 57 2f 100 111 48 110000 60 30 100 1000 0 49 110001 61 31 100 1001 1 50 110010 62 32 101 0 2 51 110011 63 33 101 1 3 52 110100 64 34 101 10 4 53 110101 65 35 101 11 5 54 110110 66 36 101 100 6 55 110111 67 37 101 101 7 56 111000 70 38 101 110 8 57 111001 71 39 101 111 9 58 111010 12 3a 101 1000 59 111011 73 3b 101 1001 60 111100 74 3c 110 0 lt 61 111101 75 3d 110 1 62 111110 76 3e 110 10 gt 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 1100001 1100010 1100011 1100100 1100101 1100110 TT 100 101 102 103 104 105 106 107 110 111 112 113 114 115 116 117 120 121 122 123 124 125 126 127 130 131 132 133 134 135 136 137 140 141 142 143 144 145 146 110 11 110 100 110
135. 1 all 7 a 2 1 ta 2 u 1 a 3 lt 2 x a 3 al3 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 abge legt ist ist irgendeine kaum verst ndliche und v llig belanglo se Hexadezimalzahl Der Wert der Variablen a 0 hingegen ist 4 und das aus Gr nden die im wirklichen Leben zu suchen sind Ein Zugriff auf das nicht deklarierte Element a 4 f hrt sp tes tens zur Laufzeit auf einen Fehler Bei der Deklaration des Ar rays 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 abgeschlos sen mit dem unsichtbaren ASCII Zeichen Nr 0 hier dargestellt durch Infolgedessen muss das Array immer ein Element l n ger sein als der String Zeichen enth lt Wir deklarieren einen 1 3 BAUSTEINE EINES QUELLTEXTES 99 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 Stringkonstanten 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 Pointer Adresse Speicher Wert Variable s lt U xs s 0 U s 1 lt N s 1 s 1 N s 2 lt I s
136. 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 1001 111 1001 1000 1001 1001 1 0 0 1 0 1 1 0 10 293 DECHE EREECHEN EE ENN a vn OD Dao Tv 294 ANHANG A ZAHLENSYSTEME 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 J 107 1101011 153 6b 1 0 111 k 108 1101100 154 6c 1 0 1000 l 109 1101101 155 6d 1 0 1001 m 110 1101110 156 6e 1 1 0 n 111 1101111 157 6f 1 1 1 o 112 1110000 160 70 1 1 10 p 113 1110001 161 71 1 1 11 q 114 1110010 162 12 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 vV 119 1110111 167 77 1 1 1001 Ww 120 1111000 170 78 1 10 0 x 121 1111001 171 79 1 10 1 y 122 1111010 172 Ta 1 10 10 Z 123 1111011 173 7b 1 10 11 124 1111100 174 Te 1 10 100 125 1111101 175 7d 1 10 101 126 1111110 176 Te 1 10 110 127 1111111 177 7f 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 203 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
137. 111 11110000 11110001 11110010 11110011 11110100 11110101 11110110 11110111 11111000 11111001 11111010 11111011 11111100 11111101 11111110 11111111 337 340 341 342 343 344 345 346 347 350 351 352 353 354 355 356 357 360 361 362 363 364 365 366 367 370 371 372 373 374 375 376 377 df e0 el e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef SSP SSISKRCKBINE fc fd fe ff 10 10 11 10 10 100 10 10 101 10 10 110 10 10 111 10 10 1000 10 10 1001 10 11 0 10 11 1 10 11 10 10 11 11 10 11 100 10 11 101 10 11 110 10 11 111 10 11 1000 10 11 1001 10 100 0 10 100 1 10 100 10 10 100 11 10 100 100 10 100 101 10 100 110 10 100 111 10 100 1000 10 100 1001 10 101 0 10 101 1 10 101 10 10 101 11 10 101 100 10 101 101 297 B Zeichens tze BI EBCDIC ASCII Roman8 IBM PC Die Zeichens tze sind in den Ein und Ausgabeger ten Termi nal Drucker gespeicherte Tabellen die die Zeichen in Zahlen und zur ck umsetzen dezimal oktal EBCDIC ASCII 7 Romand 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 eng eng 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 lf If If 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 Graf
138. 181 182 183 184 221 222 223 224 225 226 227 230 231 232 233 234 235 236 237 240 241 242 243 244 245 246 247 250 251 252 253 254 259 256 257 260 261 262 263 264 265 266 267 270 91 92 93 pl p2 ts CC mw sg eg ss gc SC ci st oc pm ac ns i gt aS 311 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 Single graphic character introducer sgci Single character introducer sci Control sequence introducer csi String terminator st Operating system command osc Privacy message pm Application program command apc No break space Inverted exclamation mark Cent sign Pound sign Currency sign kiinftig 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 312 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 271 272 273 274 275 276 277 300 301 302 303 304 305 306 307 310 311 312 313 314 315
139. 2 Kopfbedeckung 1 Teil einer Kolbenmaschine 1 Unterteilung eines Plattenspeichers 2 340 ANHANG E KARLSRUHER TEST FTP kleine aber liberale Partei 0 File Transfer Protocol 2 Floating Point Processor 0 Dom ne Bridge Email Baum Internet Split Mini Cut 2B 2B Shell 341 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 342 ANHANG E KARLSRUHER TEST Slip Unterbekleidung 1 Schlupfschuh 0 Internet Protokoll 2 Di resis Space Bar Popper Rohling Schleife Alex Altair Halbbitter 343 Durchfall 0 Diakritisches Zeichen Umlaute 2 Ern hrungslehre 0 Kneipe im Weltraum www spacebar com 0 Ma einheit f r den Druck im Weltraum 0 Gr te Taste auf der Tastatur 2 Popc
140. 2 s 2 I s 3 lt gt X x s 3 s 3 X s 4 lt gt 8 s 4 s 4 o s 5 o 22 x 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 Ganz zahlen eine nichtquadratische Matrix int a 3 4 die mit folgenden Werten belegt sei 1 2 3 4 5 6 7 8 9 10 11 12 Im Arbeitsspeicher steht dann folgendes Pointer 2 Pointer 1 SpeicherWert Variable a gt al Oo 1 xx a soll al0 0 1 gt allt lt 2 a 0 1 af0 1 2 gt al0 2 gt 3 a 0 2 a 0 2 3 a0 3 4 a 0 3 al0 3 4 100 KAPITEL 1 PROGRAMMIEREN IN C C a l lt all oO 5 xal a 1 0 gt ol LI e 6 a 1 1 all 1 6 OU LI gt 7 stall 2 all 2 7 all 3 gt 8 stall 3 afl 8 a 2 gt ol 9 geed a 2 0 gt a 1 ao 10 x a 2 1 a 2 1 10 gt a 2 2 gt 11 x a 2 2 a 2 2 11 gt al2 3 gt 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 a 0 all und a 2 zeigen ihrerse
141. 2 bertragen von ALGOLnachC 282 1 13 3 Ubertragen von FORTRAN nachC 285 1 14 Exkurs ber Algorithmen 289 A Zahlensysteme 291 B Zeichens tze 298 BI EBCDIC ASCII Romans IBM PC 298 B2 German ASCH 222er 305 B 3 ASCII Steuerzeichen 305 BA Latin 1 ISO 8859 1 0 0 0020 306 C UNIX Systemaufrufe 314 D C Lexikon 317 DI Schl sselw rter 0 317 1 2 Operatoren sg sis ate enw oe wes See un 320 D Standardfunktionen 321 DA printf 3 scanf 3 22222200 326 D 5 Inelude Dateien 326 DG Praprozessor Anweisungen 327 E Karlsruher Test 329 F GNU Lizenzen 345 F 1 GNU General Public License 345 F 2 GNU Free Documentation License 354 G Zeittafel 365 H Zum Weiterlesen 377 Abbildungen 1 1 Flussdiagramm e e e o o o ss e e e 1 2 Nassi Shneiderman Diagramm 1 3 Syntax Diagramm e e e e o Xii Tabellen 1 1 L nge von Datentypen xiii Programme und andere Quellen 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 10 1 11 1 12 1 13 1 14 1 15 1 16 1 17 1 18 1 19 1 20 1 21 1 22 1 23 1 24 1 25 1 26 1 27 1 28 1 29 1 30 1 31 1 32 1 33 1 34 1 35 LISP Programm 544 4 2 2 2 4 Ewe ee 9 SCHEME Programm 9 PROLOG Programm
142. 298 EBCDIC 298 IBM PC 298 Latin 1 306 ROMANS 298 Zeilenkommentar C 80 Ziel make 35 Zirkeldefinition 159 Zirkelschluss 159 Zufallszahl 237 ZUSE Z22 11 ZUSE Z 22 365 Zuweisung 108 123 Zweierkomplement 279
143. 38 139 140 141 142 143 144 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 Yo NUN gan nam e BB Fu O o DO ko OO RAE RAST RSSEEEEEE amp ANHANG B ZEICHENSATZE 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 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 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 B 4 LATIN 1 ISO 8859 1 145 146 147 148 149 150 151 152 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
144. 41 puts Filenamen vergessen return 1 x File muss bereits existieren x 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 Name als ers tes Argument bergeben wird zum Schreiben Die DAtei muss bereits vorhanden sein Der Systemaufruf gibt einen Datei Deskriptor zur ck eine fortlaufende Nummer der vom Pro gramm ge ffneten Dateien beginnend 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 Feh lerbehandlung Die C Standardfunktionen sind in der Sektion 3 des Hand buchs zu finden die wichtigsten lauten fopen 3 felose 3 scanf 3 und printf 3 Hier ein Programmbeispiel x Demo Standardfunktion fopen 3 x include lt stdio h gt Za wegen fopen 3 fputs 3 usw 118 KAPITEL 1 PROGRAMMIEREN IN C C int main int argc char xargv FILE xfp x File Pointer char string UNIX ist prima int x if argc lt 2 puts Filenamen vergessen return 1 x File braucht noch nicht zu
145. 42 b b b 99 143 c c c 100 144 d d d 101 145 e e e 102 146 f f f 103 147 g g g 104 150 h h h 105 151 i i i B 1 EBCDIC ASCH ROMANS IBM PC 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 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 KI xX m E PI EP PI e o V I I 2 N gt CO mu NUM Se E et pm vg om o BB win NN Ede et mv oe op Bure ANUM Se E om wm ep Bere ET 3 went del del Grafi Eh gt Pu ye OO Ow Die Die m m Oe O 302 ANHANG B ZEICHENS TZE 145 221 j 146 222 k ZE 147 223 l 148 224 m 149 225 n 150 226 o a 151 227 p 152 230 q y 153 231 r 154 2832 a 155 233 o 156 234 157 235 Yen 158 236 ZE Pt 159 237 f 160 240 u 161 241 nm A i 162 242 s 163 243 t 164 244 u 165 245 v 166 246 w I a 167 247 x I o 168 250 y S 169 251 Z Grafik 170 252 i Grafik 171 253 i 1 2 172 254 x 1 4 173 255 i 174 256 U K 175 257 gt 176 260 Grafik 177 261 Grafik 178 262 Yen Grafik 179 263 o Grafik 180 264 f Grafik 181 265 Grafik 182 266 q Grafik 183 267 fi Grafik B 1 EBCDIC ASCH ROMANS I
146. 5 10111001 271 b9 1 1000 101 186 10111010 272 ba 1 1000 110 187 10111011 273 bb 1 1000 111 188 10111100 274 be 1 1000 1000 189 10111101 275 bd 1 1000 1001 190 10111110 276 be 1 1001 0 191 10111111 277 bf 1 1001 1 192 11000000 300 c0 1 1001 10 193 11000001 301 c1 1 1001 11 194 11000010 302 c2 1 1001 100 195 11000011 303 c3 1 1001 101 196 11000100 304 c4 1 1001 110 197 11000101 305 c5 1 1001 111 198 11000110 306 c6 1 1001 1000 199 11000111 307 c7 1 1001 1001 200 11001000 310 c8 10 0 0 201 11001001 311 c9 10 0 1 202 11001010 312 ca 10 0 10 203 11001011 313 cb 10 0 11 204 11001100 314 cc 10 0 100 205 11001101 315 cd 10 0 101 206 11001110 316 ce 10 0 110 207 11001111 317 cf 10 0 111 208 11010000 320 do 10 0 1000 209 11010001 321 di 10 0 1001 210 11010010 322 d2 10 1 0 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 de 10 10 0 221 11011101 335 dd 10 10 1 222 11011110 336 de 10 10 10 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 11011111 11100000 11100001 11100010 11100011 11100100 11100101 11100110 11100111 11101000 11101001 11101010 11101011 11101100 11101101 11101110 11101
147. 66 67 68 69 70 71 72 73 74 x Sonder und Satzzeichen x 48 49 50 51 52 53 89 Za Grossbuchstaben x 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 x Sonder und Satzzeichen x 75 89 95 58 59 60 x Kleinbuchstaben 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 x Sonder und Satzzeichen x 75 897955 893 1 11 WEITERE C PROGRAMME 261 x DEL x ELL ROMAN EXTENSION x x undefinierte Zeichen x Oz E Oy 0y 07 O IE DO El be 00 Oe Dig 04 OS gt Os Ee Oe OF 0 0z 0y Cie Oe e Oh oO E Oza Oe DE x Buchstaben x Lay T57 7795 79 TOS 83y 837 x Zeichen x ge U AE Oy 103 Ja Buchstaben x 03 937 x Zeichen x Oz G Mie 0 0 x Buchstaben x 77 77 88 88 x Zeichen x Oy Bt DD Os Dir Za Buchstaben x T5 197 893 95 75r e 893 95 794 1 0 2 BO e 15 gt 79s 897 95 T5 83 897 75 75y 83 Bo 755 Lae Cag 89 ln VIE 83 93589 Ty boa Voge Lege Te eer Ee GE 89 89 89 93 93 95 99 99 101 101 x Zeichen und undefinierte Zeichen z Dr lO lps DEREN TE DE RO Oy EE Oe 0 bi char xap MAX x P auf Zeilenanfaenge x x Hauptprogramm x int main int argc char xargv int flag 0 char a xmp FILE ip fps struct stat buf extern char xap ES Oy J 262 KAPITEL 1 PROGRAMMIEREN IN C C extern char xstrcat void
148. 7 KLASSEN BIBLIOTHEKEN 201 von Operatoren f r Typen einfacher und mehrfacher Genauig keit vorhanden Im folgenden wird ein Programm mit einfacher Genauigkeit und sie entsprechende Version mit mehrfacher Ge nauigkeit gezeigt main interval a b x Standard Intervall x a 1 0 fue gt EZE Ie 0 7 b 3 0 x b 3 0 3 0 ey cout lt lt a b lt lt a b x a b 0 333333333333 0 333333333334 Quelle 1 66 C XSC Programm einfacher Genauigkeit main l_interval a b Za Langzahl Intervall x a 1 0 b 3 0 stagprec 2 Za Globale int Variable x cout lt lt a b lt lt a b x a b 83933333333 33333333333333 Ox S 33333333333 35333 33395394 77 Quelle 1 67 C XSC Programm mehrfacher Genauigkeit Zur Laufzeit bestimmt die vordefinierte globale int Variable stagprec staggered precision die Rechengenauigkeit der Langzahl Arithmetik in Schritten einer real Zahl 64 Bit Maschinenwort Die Genauigkeit einer Langzahl ist als die An zahl von real Zahlen definiert die zur Speicherung der lan gen Zahl verwendet werden Ein Objekt des Typs 1_real oder l_interval kann seine Genauigkeit zur Laufzeit ndern Kom ponenten eines Vektors oder einer Matrix d rfen von unter schiedlicher Genauigkeit sein Alle Standardfunktionen und 202 KAPITEL 1 PROGRAMMIEREN IN C C sonstigen Funktionen der Langzahl Arithmetik berechnen nu merische Ergebnisse mit einer Genauigkeit die durch de
149. 996 1997 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 MURDOCK Student an der Purdue University stellt am 16 August das Debian Projekt vor Gegen Jahresende Debian GNU Linux Version 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 die 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
150. AMMER S WORKBENCH 63 dritte Argument den R ckgabewert von ctime 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 ers te Komponente ein Pointer auf character ist Damit wei sprintf 3 wohin mit der Ausgabe Die write Zeile ist wie der pures FORTRAN An diesem Beispiel erkennen Sie dass Sie auch als FORTRAN oder PASCAL Programmierer etwas von C verste hen m ssen um die Systemaufrufe und C Standardfunktionen syntaktisch richtig zu gebrauchen Bei manchen FORTRAN Compilern Hewlett Packard Mi crosoft 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 Systemauf rufen 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 Kom mandozeile den Namen der Datei als Argument bernehmen wie wir es von UNIX Kommandos her kennen Dazu ist ein be stimmter Formalismus vorgesehen int main int argc char argv char xenvp Die Funktion main tibernimmt die Argumente argc argv und gegebenenfalls envp Das Argument
151. Anfang Umgekehrt ist ein Aus druck 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 if Abfrage vor der Auswahl abgefangen werden berfl ssige Typumwandlungen insbesondere die unauf f lligen impliziten sollten zumindest in Schleifen vermieden werden Der Typ numerischer Konstanten sollte von vornherein zu den weiteren Operanden passen Beispielsweise f hrt float f g g f 1 2345 zu einer Typumwandlung von fin double und einer R ckwand lung des Ergebnisses in float da Gleitkommakonstanten stan dardm ig vom Typ double sind Gleitkommarechnungen sind aufwendiger als Rechnun gen mit ganzen Zahlen und haben zudem noch T cken infolge von Rundungsfehlern Eine Gleitkomma Null ist nicht immer wirklich null Wer mit Geldbetr gen rechnet sollte mit ganz zahligen Centbetr gen anstelle von gebrochenen Eurobetr gen arbeiten Wenn schon mit Gleitkommazahlen gerechnet werden mu und der Speicher ausreicht ist der Typ double vorzuzie hen der intern ausschlie lich verwendet wird Von zwei m glichen Operationen ist immer die einfache re zu w hlen Beispielsweise ist eine Addition einfacher als ei ne Multiplikation eine Multiplikation einfacher als eine Potenz 232 KAPITEL 1
152. BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PRO GRAM 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 Appendix How to Apply These Terms to Your New Programs If you develop a new program and you want it to be of the grea test 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 attach the following notices to the program It is safest to attach them to the start of each source file to most ef fectively 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 F 1 GNU GENERAL PUBLIC LICENSE 353 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 of the GNU Gene ral Public License as published by the Free Software Foundation 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 FITNESS FOR A PARTICULAR PURPOSE See the GNU General Public License for more details You s
153. BM PC 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 270 271 272 273 274 275 276 277 300 301 302 303 304 305 306 307 310 311 312 313 314 315 316 317 320 321 322 323 324 325 326 327 330 331 332 333 334 335 336 va E Oil Dl com i P Setal e Oe e o CG Ers E Qe x 44 mp th pe Ch CH ER e pe D I IEN g or E door Er E CA D E Oo E 303 Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik Grafik 304 ANHANG B ZEICHENS TZE 223 8337 Grafik 224 340 A a 225 341 A B 226 342 S T 227 343 T T 228 344 U gt 229 345 V o 230 346 W M 231 347 X T 232 350 Y 233 351 Z O 8 234 352 6 Q 235 353 6 236 354 oo 237 355 238 356 Y S 239 857 y N 240 360 0 thorn 241 361 1 Thorn 242 362 2 gt 243 363 3 SS 244 364 4 Haken 245 365 5 Haken 246 366 6 247 367 7 1 4 x 248 370 8 1 2 o 249 371 9 a e 250 372 o e 251 373 U K y 252 374 E n 253 375 gt 2 254 376 U L 255 377 FF B 2 GERMAN ASCII 305 B 2 German ASCII Falls das Ein oder Ausgabeg
154. Baden 1993 606 S BDSG mit Landesdatenschutzgesetzen und Interna tionalen Vorschriften Texte kein Kommentar 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 17 Geschichte der Informatik Newsgruppen comp society folklore alt folklore computers de alt folklore computer 395 Kleine Chronik der IBM Deutschland 1910 1979 Form Nr D12 0017 138 S 1980 1991 Form Nr D12 0046 82 S Reihe Uber 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 A History of Modern Computing MIT Press Cambridge USA 1998 400 S Computergeschichte seit 1945 aus nordamerikani scher Sicht O A W Dilke Mathematik Ma e und Gewichte in der Antike
155. Betriebssystem Und Shell Kommandos sind eine Sache der Shell Sektion 1 Diese Unterscheidung spielt eine Rolle wenn Programme por tiert werden Soweit m glich sind Standardfunktionen zu ver wenden da sie Eigenheiten des Systems verdecken Die mit dem C Compiler eines UNIX Systems mitgelie ferte Standardbibliothek wird im Referenz Handbuch unter intro 3 vorgestellt und umfa t mehrere Teile 1 5 FUNKTIONS BIBLIOTHEKEN 171 e die Standard C Bibliothek meist gekoppelt mit der Standard Input Output Bibliothek den Netzfunktionen und den Systemaufrufen weil sie zusammen gebraucht werden e die mathematische Bibliothek e gegebenenfalls eine grafische Bibliothek e gegebenenfalls eine Bibliothek mit Funktionen zum Mes sen und Regeln e gegebenenfalls Datenbankfunktionen und weitere Spezia litaten Au er Funktionen enth lt sie Include Dateien mit Definitio nen 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 lib 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 prin
156. Bitfolge 1000111 dargestellt Ihre bitweise Negation ist 0111000 was der Ziffer 8 entspricht Das Mini Programm 112 KAPITEL 1 PROGRAMMIEREN IN C C x Bitweise Negation include lt stdio h gt int main char x G printi Tse San xy X return 0 Quelle 1 24 C Programm zur Veranschaulichung der bitweisen Negation gibt den Buchstaben G und die Ziffer 8 aus zumindest auf Ma schinen die den 7 bit ASCII Zeichensatz verwenden Der Zweck der bitweisen Operation ist der Umgang mit Informationen die nicht in einem Wert als Ganzem sondern in einzelnen Bits ste cken Das kommt bei der Systemprogrammierung vor Beispiels weise l sst sich die Information ob ein Ger t ein oder ausge schaltet ist in einem Bit unterbringen In der Anwendungspro grammierung ist man meist gro z giger und spendiert eine gan ze 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 logische Operationen k nnen jedes beliebige Ergebnis im Bereich der ganzen Zahlen haben 1 3 7 5 Vergleiche Die Vergleichs oder Relations Operationen sind e gleich weil schon die Zuweisung ist e ungleich e kleiner lt e kleiner gleich lt e gr er gt e gr er gleich gt e Bedingte Bewertung 1 3 BAUSTEINE EINES QUELLTEXTES 113 Das Ergebnis eines Vergleichs ist ein boolesch
157. C be handelt werden soll Der R ckgabewert von sprint f 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 t loc spielt weiter keine Rolle Die ber gabe als Pointer by reference ist in FORTRAN Standard f r Zahlenvariable und braucht nicht eigens vereinbart zu werden Der R ckgabewert von time geht in die Variable sec vom Typ long integer integer 4 Die call Zeile ruft die Subroutine foratime alias C Funktion sprintf 3 auf Diese C Funktion erwartet drei Ar gumente den Ausgabestring als Pointer auf char einen Format string 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 Pointer auf char Da dies kein in FORTRAN zul ssiger Typ ist deklarieren wir die Funktion ersatzweise als vom Typ 4 Byte integer Der Poin ter l sst sich auf jeden Fall in den vier Bytes unterbringen Nach unserer Erfahrung reichen auch zwei Bytes ebenso funktioniert der Typ logical nicht jedoch real Der Formatstring besteht aus der Stringkonstanten s ge folet von dem ASCII Zeichen Nr 0 wie es bei Strings in C Brauch ist F r sprintf 3 besagt dieser Formatstring das 1 2 PROGR
158. Cliffs 1994 926 S Enth lt auch C Ausgepr gtes Lehrbuch J Hanly E Koffman Problem Solving and Program De sign in C Addison Wesley Boston 1999 276 S 388 ANHANG H ZUM WEITERLESEN 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 AN SI ISO T Jensen A Tutorial on Pointers and Arrays in C http www netcom com tjensen ptr pointers htm 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 288 S Standardwerk zur Programmiersprache C Lehrbuch R Klatte u a C XSC Springer Berlin Heidelberg 1993 269 S C Klassenbibliothek f r wissenschaftliches Rech nen 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 421 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 Yor
159. Debugger 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 In tegrated development environment IDE Damit zu arbeiten ist die moderne Form des Programmierens und kann effektiv sein 1 2 PROGRAMMER S WORKBENCH 57 1 2 9 Systemaufrufe 1 2 9 1 Was sind Systemaufrufe Dem Programmierer stehen zwei Hilfsmittel zur Verf gung um seine W nsche auszudr cken e die Schl sselw rter Wortsymbole der Programmierspra che e die Systemaufrufe des Betriebssystems Die Schl sselw rter keyword mot cl der Programmierspra che C C FORTRAN oder PASCAL sind auch unter verschie denen Betriebssystemen PC DOS OS 2 oder UNIX dieselben Sie geh ren zur Programmiersprache das hei t zum Compi ler Die Systemaufrufe system call system primitive fonction systeme eines Betriebssystems UNIX sind f r alle Program miersprachen C FORTRAN PASCAL COBOL dieselben Sie geh ren zum Betriebssystem 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 Eingrif fe in den Kern des Betriebssystems ver ndert werden Da UN IX zum gro en Teil in C geschrieben ist sind die Systemaufrufe
160. Der Quell code 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 gewach sen ist hat die Programmierergemeinschaft Regeln und Gebr u che 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 wei tergehende finden sich in e NELSON FORD Programmer s Guide siehe Anhang 1 1 GRUNDBEGRIFFE 23 e B W KERNIGHAN P J PLAUGER Software Tools siehe Anhang e ROB PIKE Notes on Programming in C pub pikestyle ps auf ftp ciw uni karlsruhe de e Firmen Richtlinien wie Nixdorf Computer C Programmierrichtlinien Hausstandard 1985 e K HENNING Portables Programmieren in C Program mierrichtlinien verfasst 1993 vom Hochschuldidaktischen Zentrum und vom Fachgebiet Kybernetische Verfahren und Didaktik der Ingenieurwissenschaften der RWTH Aachen im Auftrag von sechs Chemiefirmen Der Verbreitung die ser Richtlinien stehen leider ein Hinweis auf das Urheber recht sowie ein ausdr ckliches Kopierverbot entgegen Ein und dieselbe Aufgabe kann von einfachen F llen ab gesehen auf verschiedene Weisen gel st werden Der eine be vorzugt viele kleine Programmbl cke der andere wenige gro e Einer arbeitet gern mit Men s ein
161. Die C Programmiersprache Addison Wesley Boston Bonn 2000 1024 S Lehrbuch fiir Fortgeschrittene der Klassiker fiir C 390 ANHANG H ZUM WEITERLESEN 13 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 EFF _Net _Guide Einf hrung in die Dienste des Internet S Carl Mitchell J S Quarterman Practical Internet working 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 IIIb 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 Lehr buch und Nachschlagewerk fiir 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 general z 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 14 391 E Krol The Hitchhikers Guide to the Intern
162. 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 docu ment under the terms ofthe 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 of the license is included in the section entitled GNU Free Documentation License on page 354 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 gekenn zeichnet Geschrieben mit dem Texteditor vi formatiert mit BIEX 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 Ausga be in kleinerer Schrift 9 Punkte in gro er Schrift 14 Punkte sowie eine Textausgabe f r Leseprogramme Screenreader 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 Vorkenntnis sen in der Elektro
163. Ferraro Programmer s Guide to the EGA and VGA Cards Addison Wesley Boston 1990 1040 S Viele Grundlagen die ber EGA und VGA hinausge hen 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 386 ANHANG H ZUM WEITERLESEN 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 t 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 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 Ubersetzerbau Springer Berlin Heidelberg 1999 368 S M Marcotty
164. Griff haben will also an den Grenzen Software Hard ware Treiberprogramme Dar ber hinaus sind gute Assembler programme schnell weil sie nichts Unn tiges tun Programmie ren in Assembler setzt vertiefte Kenntnisse der Hardware vor aus 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 unbedingt den herben Reiz der Assembler programmierung kennenlernen will hat es mit dieser Kombina tion einfach Die meisten Programmierer wollen jedoch nicht Speicherin halte verschieben sondern Gleichungen l sen oder W rter su chen Schon Mitte der f nfziger Jahre entstand daher bei der Firma IBM die erste h here Programmiersprache und zwar zum Bearbeiten mathematischer Aufgaben Die Sprache war daher Recht betrachtet will man auch keine Gleichungen sondern Aufgaben wie die Dimensionierung eines Maschinenteils oder das Zusammenstellen eines Sachregisters l sen 12 KAPITEL 1 PROGRAMMIEREN IN C C stark an die Ausdrucksweise der Mathematik angelehnt und zu mindest f r die mathematisch gebildete Welt einigerma en be quem 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
165. H Ledgard The World of Programming Languages Springer Berlin Heidelberg 1987 360 S S Pfleeger Software Engineering The Production of Qua lity 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 12 387 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 App lications Benjamin Cummings Redwood City 1994 590 S U Breymann Designing Components with the C STL Addison Wesley Boston 2000 320 S B J Cox A J Novobilski Object Oriented Program ming 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
166. HENSATZE 3 etx End oftext control c 4 eot End of transmission control d 5 eng Enquiry control e 6 ack Acknowledge control f 7 a bel Bell control g 8 b bs Backspace control h BS 9 Ne ht Horizontal tab control i TAB 10 n lf Line feed control j LF 11 v vt Vertical tab control k 12 K ff Form feed control 13 r cr Carriage return control m RETURN 14 so Shift out control n 15 si Shiftin control o 16 dle Data link escape control p 17 del Device control 1 xon control q 18 deii 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 separator control 31 us Unit separator control _ 127 del Delete DEL RUBOUT BA Latin 1 ISO 8859 1 Die internationale Norm ISO 8859 beschreibt gegenwartig zehn Zeichens tze die jedes Zeichen durch jeweils ein Byte darstellen Jeder Zeichensatz umfa t also maximal 256 druck bare Zeichen und Steuerzeichen Der erste Latin 1 genannt ist f r west und mitteleurop ische Sprachen darunter Deutsch vorgesehen Latin 2 deckt Mittel und Osteuropa B 4 LATIN 1 ISO 8859 1 307 ab soweit das lateinische Alphabet verwendet wird
167. Klasse 188 KAPITEL 1 PROGRAMMIEREN IN C C public Quader Mas bet x y Z 0 Constructor void lesen cout Laenge cin a cout Brerter y 2077 gt D cout Hoehe T CLAD Ch f flaeche a b c v volumen a b c protected double flaeche double x double y double z return 2 x y x Z yx z double volumen double x double y double z return x x y x Z private double a Dy Cy Xy Yr SE VF class Wuerfel public Quader 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 ks Hauptprogramm int main int x 0 char figur 32 cout nFlaechen und Koerperberechnung n n cout Welche Figur cin figur cout nFigur figur endl 1 6 KLASSEN 189 Stringvergleiche erforderlich weil in der switch Anweisung nur eine int Variable stehen kann if strcmp figur Kreis x 21 if strcmp figur Rechteck x 22 if strcmp figur Quadrat x 23 if strcmp figur Kugel x 31 if strcmp figur Quader x 32 if strcmp 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 Bl
168. L Veraendert x den uebergebenen String x struct list_item parse_list char xquery struct list_item first NULL last amp first F x while query 0 x neues Listenelement allozieren x last gt next malloc sizeof last if last NULL return first next last last gt next last gt next NULL Za einen Parameter extrahieren last gt key query do Query te while query 0 amp amp query amp x query if query 0 query 0 Za in key und value splitten last gt value last gt key do last gt valuert while last gt value 0 amp amp last gt value if last gt value 0 last gt value 0 x Sxx Tripel umwandeln unescape_str last gt key unescape_str last gt val e 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 Werte key und value NULL si Veraendert den uebergebenen String struct array_item parse_array char query int count char xtemp 1 11 WEITERE C PROGRAMME 277 struct array iten xfirst xlast Za Anzahl Parameter bestimmen z for count 0 temp query x
169. N C C 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 ge stalten da es bei einem Fehler nicht ein richtiges Ergebnis vor t 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 Fehler meldung Die Programmeinheiten Funktionen lasse man nicht zu um fangreich werden Ein bis zwei Seiten Quelltext berschaut man noch wird es mehr sollte man die Funktion unterteilen Weiter hin gebe man im Entwicklungsstadium an kritischen Stellen die Werte mittels printf oder fprintf aus Diese Zeilen kom mentiert man sp ter aus oder klammert sie gleich in ifdef und endif Anweisungen ein Bew hrt hat sich auch die eige nen Programme 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 Zeitgenossen der Saurier waren auch nachtjagende Insektenfresser 1 11 4 Optimierung Das erste und wichtigste Ziel beim Programmieren ist n chst der selbstverst ndlichen aber unerre
170. O auf Bits Strukturen oder Pointer Dann haben wir noch den Cast Komma und Sizeof Operator e Anweisungen enden immer mit einem Semikolon e Aus einer Zuweisung wird durch Anf gen eines Semikolons eine Anweisung e Die Kontrollanweisungen Bedingung if Verzweigung if else Auswahl switch Schleife while do while for und Sprung break continue return goto steuern den Pro grammablauf 1 3 10 Ubung Bausteine Uberlegen Sie welche Operanden mit welchen Typen Sie fiir 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 136 KAPITEL 1 PROGRAMMIEREN IN C C 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 Hauptpro gramm Unterprogramme Subroutinen Prozeduren usw sind in C allesamt Funktionen Eine Funktion ist die kleinste kompilier bare 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 globa
171. 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 Karls ruhe um eine Klassenbibliothek namens C XSC Extended Scientific Calculation mit Datentypen wie komplexen Zahlen Vektoren Matrizen und Intervallen samt den zugeh rigen Ope rationen 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 181 kennen class HelloWorld public static void main String args for A System out print Hello World Quelle 1 6 JAVA Programm Hello World hnlichkeiten zu C sind erkennbar die JAVA Entwickler wa ren vermutlich C Programmierer Auf die brigen 989 Programmiersprachen soll aus Platz gr nden nicht eingegangen werden Braucht man berhaupt mehrere Sprachen Einige Sprachen wie FORTRAN und CO BOL sind historisch bedingt und werden wegen ihrer weiten Verbreitung noch lange leben Andere Sprachen wie BASIC und SMALLTALK ist ungewohnt und sehr inter essant auch f r LINUX verf gbar N heres siehe www software ibm com ad smalltalk www exept de www cetus links org oo_smalltalk html oder www gsug org 10Real programmers can write
172. Prototyp 28 robustes P 21 Struktur 26 28 Test 23 Top down Entwurf 26 Version 21 Programmiersprache ALGOL 13 algorithmische P 8 Assembler 10 11 BASIC 13 C 14 C 8 15 SACHVERZEICHNIS COBOL 12 deklarative P 8 FORTRAN 11 Freiburger Code 11 funktionale P 8 HASKELL 8 imperative P 8 JAVA 8 LISP 8 logische P 8 maschinenorientierte P 10 Maschinensprache 10 Mischen von P 139 MODULA 13 objektorientierte P 8 Paradigma 8 PASCAL 13 pradikative P 8 problemorientierte P 10 PROLOG 8 prozedurale P 8 SCHEME 8 SMALLTALK 8 Sprachenfamilie 8 SQL 8 Programmierstil 22 Programmiertechnik 23 Programmierumgebung 56 Programmquelle 3 PROLOG 8 Pro nescia 41 Public Member 182 Quasar Toolkit 205 Quellcode 18 Quine 280 r Wert 108 rand 3C 237 random 3M 237 409 ranlib 43 read 64 116 read 2 172 realloc 3 258 Referenzebene 102 referenzieren 96 115 register C 105 Rekursion 159 relozierbar 19 reserviertes Wort 81 return C 131 Revision Control System 48 Richtlinien C 22 Rienne Vaplus H hle von R 39 rlog RCS 49 robust 21 R ckgabewert 131 138 227 Rundungsfehler 87 sarge 376 scanf 117 scanf 3 172 326 SCHEME 8 Schleife C 125 Schleife abweisende 125 Schleife nichtabweisende 126 Schleifenz hler 129 Schl sselwort 57 76 81 Schl sselwort 317 sdb 40 Seed 238 Sequenz 123 Shared Library 33 shift C 114 short C 85 Signal Qt 205 Single UNIX S
173. Quit Button include lt qtimer h gt fuer zeitverzoegertes Beende an dieser Stelle wird das moc File eingebunden es enthaelt die Prototypen fuer unsere Klasse 208 KAPITEL 1 PROGRAMMIEREN IN C C include qhello moc Hel E die Konstruktorfunktion unserer Klasse loWidget HelloWidget QWidget xparent const char name QWidget parent name die Groesse des Hauptfensters setzen resize 200 100 As 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 x helloLabel SLOTL SEETEZEL const char x 77 quitButton wird erzeugt und plaziert quitButton new QPushButton Quit this quitButton gt move 0 80 quitButton gt resize 200 20 und verbunden mit unserem Slot tschuesst 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 OTimer this quitTimer gt start 1500 bei Ablauf des Timers wird Slot quit der Haupt applikation ausge
174. RS BER ALGORITHMEN 289 Bei der bertragung haben wir keinen Gebrauch von unse ren Kenntnissen ber quadratische Gleichungen gemacht son dern ziemlich schematisch gearbeitet Mathematische Kenntnis se 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 aufgerufen wird 1 14 Exkurs ber Algorithmen Der Begriff Algorithmus benannt nach einem usbekischen Mathematiker des 9 Jahrhunderts 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 Algorithmus eine Vorschrift die mit endlich vielen Schritten zur L sung eines gegebenen Problems f hrt Ein Programm ist die Umsetzung eines Algorithmus in ei ne Programmiersprache Algorithmen werden mit Worten For meln 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 Prinzre gententorte oder die Beschreibung des Aufstiegs auf die Hoch wilde in den tztaler Alpen sind demnach Algorithmen Einige Anforderungen an Algorithmen sind e Korrektheit Das klingt selbstverst ndlich ist aber meist schwierig zu beweisen
175. Und Korrektheit in einem Einzelfall besagt gar nichts Umgekehrt beweist bereits ein Fehler die Inkorrektheit e Eindeutigkeit Das stellt Anforderungen an die Darstel lungsweise die Sprache denken Sie an eine technische 39Dr Oetker Backen macht Freude Ceres Verlag Bielefeld Die Ausf hrung dieses Algorithmus l t sich teilweise paralle lisieren 40H KLIER Alpenvereinsf hrer Otztaler Alpen Bergverlag Rudolf Rother M nchen Der Algorithmus mu sequentiell ab geschwitzt werden 290 KAPITEL 1 PROGRAMMIEREN IN C C Zeichnung oder an Klaviernoten Verschiedene Ausf h rungswege sind zul ssig bei gleichen Eingaben mu das gleiche Ergebnis herauskommen Endlichkeit Die Beschreibung des Algorithmus mu ei ne endliche L nge haben sonst k nnte man ihn endlichen Wesen nicht mitteilen Er mu ferner eine endliche Aus f hrungszeit haben man m chte seine Fr chte ja noch zu Lebzeiten ernten Er darf zur Ausf hrung nur eine endli che 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 Fragestellungen aber f r den Anfang gilt obiges Eine f nfte technisch wie theoretisch bedeutsame Forderung ist die nach einem guten zweckm igen Algorithmus oder gar die nach dem besten Denken Sie an die vielen Sortierverfahren kei
176. Vorzei chen Die Deklaration von Variablen als ganzzahlig sieht so aus INE Xy Yj Zy 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 By tes gleich 32 Bits 32 Bit Architektur Festgelegt ist nur die Rei henfolge char lt short lt int lt long Alle Annahmen die dar ber hinausgehen sind Vermutungen die auf einer Maschine zutreffen 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 Diskussi on 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 86 KAPITEL 1 PROGRAMMIEREN IN C C werden wird sich die Diskussion nochmals wiederholen aller dings aufbauend auf den Erfahrungen des gegenw rtigen Wech sels Das Ziel sind Programme die unabh ngig von der Daten gr e auf allen Architekturen laufen und Daten die zwischen verschiedenen Architekturen ausgetauscht werden k nnen Datentyp LP32 ILP32 ILP64 LLP64 LP64 2 4 4 4 4 4 8 8 8 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
177. Wahl ich empfehle C ein Programm das e eine Datei mittels creat 2 erzeugt e dessen Zugriffsrechte mittels chmod 2 und seine Zeit stempel mittels utime 2 setzt e die verwendeten Werte mittels fprintf 3 als Text in die Datei schreibt fprint f 3 finden Sie unter printf 3 76 KAPITEL 1 PROGRAMMIEREN IN C C Schreiben Sie ein Programm hnlich who 1 Sie brauchen dazu getut 3 und utmp 4 1 2 13 Fragen Programmer s Workbench e Wozu braucht man einen Compiler Einen Linker e Was ist lint e Was macht make Wie sieht ein einfaches Makefile aus e Wozu braucht man Debugger e Was ist eine Funktionsbibliothek Vorteil e Wozu braucht man eine Versionsverwaltung Wie benutzt man RCS e Was sind Systemaufrufe Wer braucht sie e Unterschied zu Standardfunktionen e Welche Aufgaben erledigen die Systemaufrufe haupts ch lich 1 3 Bausteine eines Quelltextes 1 3 1 bersicht Alle Zeichen oder Zeichengruppen eines Programmes im Quell code sind entweder e Kommentar comment e Namen identifier e Schl sselw rter Wortsymbole keyword e Operatoren operator e Konstanten Literale constant literal e Trennzeichen separator oder e bedeutungslos Ein Quelltext Programmquelle Source ist ein Textfile be stehend aus Zeilen diese wiederum aus druck und sichtbaren Zeichen fast immer des US ASCII Zeichensatzes einschlie lich des Zwischenraums space Die Zeichen sind zu
178. Wege offen so spricht man von einer Auswahl selection Sie l sst sich grunds tzlich durch eine Schachtelung einfacher Verzwei gungen mit if else darstellen das ist jedoch un bersicht lich Zur Konstruktion einer Auswahl braucht man die Schl ssel w rter switch case break und default Die Syntax ist die folgende 1 3 BAUSTEINE EINES QUELLTEXTES 125 switch x case a Anweisungsfolge 1 break case b case c Anweisungsfolge 2 break default Anweisungsfolge 3 Die Variable x nur vom Typ int oder char wird auf berein stimmung 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 ber ein oder fehlt nach case a das break wird dann x auf berein stimmung mit b oder c gepr ft Trifft kein case zu wird die default Anweisungsfolge ausgef hrt Fehlt diese macht das Programm nach der Auswahl weiter ohne eine der Anweisun gen 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 effek tiv Wenn aus einer einfachen Verzweigung eine Auswahl werden k nnte soll man gleich zu dieser greifen Auswahlen d rfen ge schachtelt werden Mit etwas Phantasie kann man sich die Bedingung als ei ne Auswahl mit nur einer Wahlm glichkeit vorstellen die Ver zweigung als eine Auswahl
179. Wer einen polnisch deutschen Text schreiben will braucht Latin 2 Die deutschen Sonderzeichen liegen in Latin 1 bis 6 an denselben Stellen 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 Zeichen s tze Zu jedem Zeichen geh rt eine standardisierte verbale Be zeichnung Einige Zeichen wie das isl ndische Thorn oder das Cent Zeichen konnten 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 07 bl Bell bel 008 010 08 bs Backspace bs 009 011 09 ht Character tabulation ht 010 012 0a lf Line feed If 011 013 Ob vt Line tabulation vt 012 014 Oc ff Form feed ff 013 015 Od cr Carriage return cr 014 016 Oe so Shift out so 015 017 Of si Shift in si 016 020 10 dl Datalink escape dle 017 021 11 d1 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 sy
180. X 10 x Array der Primzahlen unsigned d MAX 1000 Za Haeufigkeit der Differenzen x unsigned long h 2 11 x Haeufigkeit der Primzahlen x unsigned long z 1 x aktuelle Zahl x unsigned n 1 Za lfd Anzahl Primzahlen 1 x x Funktionsprototypen x void ttest Za Funktion Teilbarkeitstest long time Ja Systemaufruf zur Zeitmessung int main int arge char xargv x Hauptprogramm x ine Aes int er Jy K unsigned long ende DEF 248 KAPITEL 1 PROGRAMMIEREN IN C C unsigned long xqg unsigned long dp dmax 1 dl d2 unsigned long g long zeitl zeit2 zeit3 x Auswertung der Kommandozeile x dem Aufruf kann als Argument die Obergrenze mitgegeben werden x x keine Pruefung auf negative Zahlen oder Strings gt if arga gt DI sscanf x argv 1 lu amp ende if ende gt MAX printf nZ zu gross Maximal lu n MAX exit 1 if ende lt MIN printf nZ zu klein genommen wird lu n n n MIN ende MIN if g ende 10 printf nZ muss durch 10 teilbar sein lu n n n ende ende g x Algorithmus time amp zeitl xp 2 x p 1 3 x die ersten Primzahlen ende 3 while z lt ende z 4 ttest zZz 2 ttest x Da z pro Durchlauf um 6 erhoeht wird kann eine Primzahl zuviel berechnet werden 1 11 WEITERE C PROGRAMME 249 gegebenenfalls loeschen Wi
181. X Makros stellt eine pro blemangepasste Sprache dar Der Preis f r die Erleichterungen ist ein Verlust an Allgemeinheit Denken Sie an die Notenspra che 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 1 1 GRUNDBEGRIFFE 11 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 BLS Bringe den Inhalt von Register 15 in den Akk U6 Kopiere den Akku nach Register 6 B18 Bringe den Inhalt von Register 18 in den Akk Addiere Akku und Reg 6 Summe in Akku und 6 B13 Bringe den Inhalt von Register 13 in den Akk 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 fiir 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 Assemb lerprogrammierung Man braucht sie wenn man die Hardwa re fest im
182. Za Sortieren Bubblesort x for j 0 j lt MAXLIN jtt j line j while flag 0 flag 1 for j 0 j lt i j if stremp array line j array line j 1 gt 0 z bijel lt b Ei line j 1 line j line j z flag 0 Za Ausgeben nach stdout if DEBUG Ducat Arrays j 0 while j lt i printf er line j puts Ende Array endif J 0 while jJ lt i printf s array line j x Ende x 1 2 PROGRAMMER S WORKBENCH 55 return 0 Quelle 1 15 C Funktion Bubblesort Bubblesort eignet sich fiir kleine Sortieraufgaben mit bis zu etwa hundert Elementen Kopieren Sie sich die Bausteine in ein eige nes Verzeichnis und entwickeln Sie das Programm unter Ver wendung des RCS weiter N heres siehe rcsintro 5 Anfangs erscheint das Arbeiten mit RCS bei kleinen Projek ten als l stig hnlich wie das Anlegen eines Makefiles Man ge w hnt sich aber schnell daran und spart sofort das Eintragen des nderungsdatums von Hand Nach kurzer Zeit ist man f r die selbst auferlegte Ordnung dankbar Das Source Code Control System SCCS verwaltet die Ver sionen der Module indem es die erste Fassung vollst ndig spei chert 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 Verwaltungsda ten werden in einer einzige
183. 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 internationa 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 die deutsche die 400 000 die franz sische die 300 000 Laut http www netcraft com sind die am h ufigsten besuchten Google Yahoo Microsoft BBC CNN Ebay Fox News Amazon und Wik Das Deutsche Forschungsnetz nimmt das X Win in Betrieb eine Netzinf mit Anschl ssen bis zu 10 Gigabit s und 43 Kernstandorten Mitte des Jahres gibt es 10 Mio Eintr ge unter der Top Level Domain c sie ist damit weltweit nach com die zweitumfangreichste Debian stellt den Sicherheitssupport fiir woody ein und erklart 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 Interne
184. ahl make include Unterverzeichnisse assem bilder feuer j w Ce Il 256 KAPITEL 1 PROGRAMMIEREN IN C C K kontur S schall T text Weitere Makros OBJS schiff obj titel obj bilder obj text obj feuer obj schall obj kontur obj sound obj nosound obj delay ob7 Anweisungen all schiff exe install clean schiff exe schiff obj titel obj bilder_o text_o feuer_o kontur_o schall_o assem_o S LD S LDFLAGS OBJS wr schiff obj schiff c schiff h CC CFLAGS schiff c titel obj titel c CC CFLAGS titel c bilder_o cd B MAKE all cd text_o ed S T S MAKE all cd feuer_o cd F S MAKE all cd kontur_o cd K S MAKE all cd schall_o cd SC 1 11 WEITERE C PROGRAMME 257 S MAKE all Gad 23 assem_o cd A S MAKE all Eck E install S CP schiff exe s exe clean S RM bak oC RM 067 Quelle 1 92 Makefile zu schiff c Dieses Projekt obwohl bescheiden ware ohne make 1 nur noch mtihsam zu beherrschen Ks ist fiir das Gelingen entschei dend sich zu Beginn die Struktur sorgfaltig zu tiberlegen Infolge der Verwendung von Grafikfunktionen des MS Quick C Compilers ist das Programm nicht auf andere Systeme ber tragbar Man m te eigene Grafikfunktionen verwenden die Verpackungen um die Grafikfunktionen des jeweiligen Compi lers darstellen Dasselbe gilt f r die Funktion zum Tuten eine Assemblerroutine Vielleicht stelle
185. alb weichen wir auf die C Standardfunktion ctime 3 aus deren Riickgabewert vom Typ Pointer auf character ist was es in FORTRAN n herungs weise gibt In FORTRAN ist ein Zeichen ein String der L n ge 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 integerx4 time tloc sec ctime character atimex26 sec time tloc call foratime atime s char 0 ctime sec write 6 a atime end IIFORTRAN 90 kennt Strukturen 62 KAPITEL 1 PROGRAMMIEREN IN C C Quelle 1 17 FORTRAN Programm zur Anzeige der Systemzeit Die ALIAS Anweisung ist als Erweiterung zu FORTRAN 77 in vielen Compilern enthalten und dient dazu den Aufruf von Unterprogrammen anderer Sprachen zu erm glichen Der Compiler wei damit dass das Unterprogramm au erhalb des Programms zum Beispiel in einer Bibliothek einen anderen Namen hat als innerhalb des Programms Wird eine Sprache an gegeben hier C so erfolgt die Parameter bergabe gem der Syntax dieser Sprache Einzelheiten siehe im Falle unserer Anla ge 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
186. ale Sprachen BASIC FORTRAN CO BOL C PASCAL objektorientierte Sprachen SMALLTALK C Java 1 1 GRUNDBEGRIFFE 9 e Deklarative Sprachen funktionale oder applikative Sprachen LISP SCHE ME HASKELL logische oder pr dikative Sprachen PROLOG Diese Sprachentypen werden auch Paradigmen Beispiel Mus ter genannt Auf imperative und objektorientierte Sprachen ge hen wir bald ausf hrlich ein Zuerst ein kurzer Blick auf funk tionale und pr dikative Sprachen Programme in funktionalen Programmiersprachen wie LISP oder SCHEME bestehen aus Definitionen von Funktionen u Berlich hnlich einem Gleichungssystem die auf Listen von Werten angewendet werden Hier das Hello World Programm in LISP LISE DEFUN HELLO WORLD PRINT LIST HELLO WORLD Quelle 1 1 LISP Programm Hello World und auch noch in SCHEME define hello world lambda begin write Hello World newline hello world Quelle 1 2 SCHEME Programm Hello World Die gro z gige Verwendung runder Klammern f llt ins Au ge aber ansonsten sind die Programme zu einfach um die Ei genheiten der Sprachen zu erkennen Die Sprache C ist trotz der Verwendung des Funktionsbegriffes keine funktionale Program miersprache da ihr Konzept nicht anders als in FORTRAN oder PASCAL auf der sequentiellen Ausf hrung von Anweisungen be ruht Programmen in logischen oder pr dikativen Sprachen wie PROLOG werden Fakten und Rege
187. amming 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 Mathe matik 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 380 ANHANG H ZUM WEITERLESEN K Loudon Mastering Algorithms in C O Reilly Sebastopol 1999 560 S T Ottmann P Widmayer Algorithmen und Datenstruk turen 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 Umset zung in C 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 Miinchen 1990 420 S Allgemeiner als Tanenbaum Woodhull A S Tanenbaum A S Woodhull Operating Systems Design and Implementati
188. an den Quellen erlaubt sind Bekannt wurde t als Basis der Arbeitsumgebung KDE www kde org Die X11 Programmierung gestaltet sich mit t deutlich ein facher als mit anderen Bibliotheken Motif und ist gepr gt ei nerseits 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 Programmierung besser zu verstehen Ben tigt man beispielsweise eine neue Art von Knopf entwickelt man auf der Basis der abstrakten Klasse OButton eine neue Klasse die damit alle Grundeigenschaften von Kn pfen erbt abstrakt bedeutet hier da die Klasse einige Funktionen enth lt die im plementiert werden m ssen bevor die Klasse verwendet wer den kann neu schreiben mu man nur noch die Funktionen drawButton und drawButtonLabel die f r die eigentli che Darstellung des Knopfes verantwortlich zeichnen Diese Vor gehensweise l t sich verallgemeinern Um ein neues Widget zu entwickeln geht man von einem in der Bibliothek bereits vor handenen aus das in seinen Eigenschaften dem gew nschten Ergebnis m glichst nahe kommt und schreibt nur diejenigen Funktionen neu die sich unterscheiden beziehungsweise dazu kommen Signale und Slots gestalten die Kommunikation zwischen verschiedenen Programmteilen Ein Widget z B ein Knopf sendet bei ein
189. anchen Compilern geh rt auch eine Sammlung von Gra fikfunktionen Da es hierf r noch keinen Standard gibt und Grafik eng an die Hardware gebunden ist verzichten wir auf eine Darstellung Auf einer UNIX Anlage findet man sie in usr lib plot Die Bibliothek enth lt Funktionen zum Set zen von Punkten Ziehen von Linien zur Umwandlung von Ko ordinaten 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 wei tergehende Gestaltung eines alphanumerischen 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 Bei Verwendung von curses 3 Funktionen ist die Include Datei curses h in das Programm 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 zwi schen C Programmen und dem X Protokoll 1 5 FUNKTIONS BIBLIOTHEKEN 177 Auf n chsth
190. ary programs If your program is a subroutine library you may consider it more useful to permit lin king 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 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 The purpose of this license is to make a manual textbook or other functional and useful document free in the sense of free dom to assure everyone the effective freedom to copy and redis tribute it with or without modifying it either commercially or noncommercially Secondarily this license preserves for the au thor 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 sen se 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 documenta tion a free program should come with manuals providing t
191. ase 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 Quelle 1 18 C Programm zum Abfragen von Informationen ber eine Datei Die Verwendung von Systemaufrufen oder Standardfunktio nen 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 Syntax halten Es empfiehlt sich die genannten Sektionen einmal durchzubl t tern um eine Vorstellung davon zu gewinnen wof r es Sys temaufrufe und Standardfunktionen gibt Die Ausgabe des Pro gramms sieht folgenderma en aus LOGNAME wualexl Datei heisst a out Datei existiert 1 2 PROGRAMMER S WORKBENCH 69 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 104 Group ID 20 Device ID 102536 Dateigroesse 53248 Letzter Zugriff 24 1 91 Letzte Modifik 24 1 91 Letzte Stat Ae 24 1 91 Datei ist executable Die Bedeutung von File Mode finden Sie bei mknod 2 Es handelt sich um ausf hrliche Informationen ber die Zugriffs rechte usw hnliche Ausk nfte
192. auchen r tselhafter Zah len 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 hr bare Code etwas l nger Ein Beispiel define NEWFILE fprintf stderr Datei n if gets name NULL done if argc lt 2 NEWFILE Der Pr prozessor ersetzt jedes NEWFILE im Programm buch st blich durch die definierte Folge Das spart Tipperei und ver bessert die bersichtlichkeit Zeichenfolgen in Stringkonstanten in G nsef chen werden nicht ersetzt das Progr mmchen define PI 3 14159 int main ENEE 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 1 9 PR PROZESSOR 215 PROD a b ax b i
193. 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 Programm hallo cpp ist mit dem GNU gcc kompi liert 96 kB gro Ein Assemblerprogramm das dasselbe tut be legt 120 Bytes Die Speicherhersteller profitieren mit Sicherheit von der Objektorientierung 1 6 2 Datenabstraktion Klassenbegriff In C ebenso wie in FORTRAN oder PASCAL beschreibt ein Da tentyp eine Menge von Werten samt den zugeh rigen Operatio nen Die Datentypen sind durch den Compiler festgelegt der Be nutzer kann keine neuen Datentypen definieren Ein abstrakter Datentyp ist ein vom Benutzer definier ter Typ dessen Schnittstelle Interface Au enseite Verbindung zum brigen Programm von seiner Implementierung Imple mentation interne Programmierung Innenleben getrennt ist eine Black Box mit bestimmten nach au en sichtbaren Eigen schaften Klassen sind in einer Programmiersprache formulier te Beschreibungen abstrakter Datentypen Objekte sind Vertre ter Exemplare Instanzen Verwirklichungen von Klassen C Typen und C Klassen sowie C Variable und C
194. be 1 7 KLASSEN BIBLIOTHEKEN 203 1 7 3 7 C XSC Numerikbibliothek Die C XSC Numerikbibliothek ist eine Sammlung von Funktio nen und Programmen zur L sung von Standardaufgaben der nu merischen Analysis mit garantierter Genauigkeit der Ergebnis se Folgende Bereiche werden abgedeckt e Auswertung und Nullstellen von Polynomen e Lineare Systeme Matrizeninvertierung e Eigenwerte Eigenvektoren e Schnelle Fourier Transformation e Nullstellen nichtlinearer Gleichungen e Anfangswertprobleme bei gew hnlichen Differentialglei chungen 1 7 3 3 Beispiel Intervall Newton Verfahren Zu bestimmen sei der Einschlu einer Nullstelle einer reellen Funktion f x Die erste Ableitung f x sei stetig im Intervall a b und es gelte 0 f x z a b und f a f b lt 0 Falls X eine Einschlie ung der Nullstelle ist dann wird eine verbesserte Einschlie ung X mittels der Formel Ti DES SES berechnet wobei m X ein Punkt im Intervall X ist blicher weise die Mitte Die Funktion sei in diesem Beispiel f z Vet a4 1 cose Nun das Programm Xn mix x C XSC Programm Newton Verfahren mit Intervallen Funktion f x sqart x x 1 cos x Inst Angewandte Mathematik Universitaet Karlsruhe x include interval hpp Interval arithmetic package 204 KAPITEL 1 PROGRAMMIEREN IN C C include imath hpp Interval standard functions interval f real amp x fe Function f int
195. behandelt und erst bei der Ausgabe einer Zahl oder einem ASCII Zeichen zu geordnet Es ist zu erwarten da auf Systemen mit 8 bit oder 1 3 BAUSTEINE EINES QUELLTEXTES 89 16 bit Zeichens tzen die Grenze h her liegt aber die Arbeitswei se bleibt Manchmal will man ein Byte wahlweise als Ganzzahl oder als Zeichen auffassen aber das geh rt zu den ber chtig ten 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 womit die Portabilit t des Programms eingeschr nkt wird Das Ausgabeger t empf ngt nur die Nummer des auszuge benden Zeichens gem seiner Zeichensatz Tabelle ASCII RO MANS die Umwandlung des Wertes entsprechend seinem Typ ist Aufgabe der Funktion printf 3 Boolescher Typ Eine Gr e vom Typ boolean oder logical kann nur die Werte true wahr richtig oder false falsch an nehmen In C werden statt des booleschen Typs die Integerwerte 0 false und nicht 0 true verwendet Verwirrend ist dass viele Funktionen bei Erfolg den Wert 0 und bei Fehlern Werte ungleich 0 zuriickgeben Leerer Typ Der leere Datentyp void wird zum Deklarieren von Funktionen verwendet die kein Ergebnis zur ckliefern so wie zum Erzeugen generischer allgemeiner Pointer die auf Va riablen eines vorlaufig beliebigen Typs zeigen Der Typ hat kei ne G
196. bene Versionen berschrieben wer den 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 einfachs ten aus dem Netz wo au er dem Programmpaket selbst auch kurze oder ausf hrliche deutsche oder englische Anleitungen zu finden sind Unter den Namen WinCVS und MacCVS liegen Fas sungen f r weitere Betriebssysteme im Netz Der Oberbegriff des ganzen Gebietes lautet Software Con figuration Management SCM oder allgemeiner Configuration Management CM Lassen Sie einmal eine Suchmaschine dar auf los es gibt mehrere freie oder kommerzielle Produkte sowie bersichten Einf hrungen 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 auftau chenden Probleme Auch hierf r gibt es Werkzeuge beispiels weise gnats aus dem GNU Projekt Aber das sprengt den Rah men 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 Soft Bench von Hewlett Packard besteht darin da die einzelnen Programmierwerkzeuge wie syntaxgesteuerte Editoren Compi ler Linker Builder make 1 Analysewerkzeuge
197. bjekt sie tritt nur in Verbindung mit Feh lern 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 264 kom men beim ffnen einer Datei zum Lesen folgende Zeilen vor if fp fopen argv l r NULL printf Datei s kann nicht goeffnet werden n argv 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 ausf llt al so 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 Dateianfangs 1 11 7 2 Pointer auf Typ void Man braucht gelegentlich einen Pointer der auf eine Variable von einem zun chst noch unbekannten 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 die ser Typ belegt genau ein Byte woraus man jeden anderen Typ 244 KAPITEL 1 PROGRAMMIEREN IN C C aufbauen kann Nach ANSI ist hierf r der Typ void zu w h len Jeder Pointer kann ohne Verlust an Information per cast in einen Pointer auf void verwandelt werden und umgekehrt Die Pointer beleg
198. bliothek 1ib libc a und andere vereinigt Die Aufgabenverteilung zwischen Schl sselw rtern System aufrufen und Standardfunktionen ist in gewissem Umfang will k rlich Systemaufrufe erledigen Aufgaben die aus dem Aufbau und den kennzeichnenden Eigenschaften des Betriebssystems herr hren bei UNIX also in erster Linie e Ein und Ausgabe auf unterster Stufe e Umgang mit Prozessen e Umgang mit dem Datei System e Sicherheitsvorkehrungen Das Offnen einer Datei zum Lesen oder Schreiben ist Sache eines Systemaufrufs open 2 Sortieren hingegen Sache einer Stan dardfunktion qsort 3 Es gibt aber zus tzlich auch Stan dardfunktionen zum Umgang mit Dateien die den jeweiligen Systemaufruf komfortabel verpacken fopen 3 Nach au en definiert die Menge der Systemaufrufe das Betriebssystem Zwei Systeme die in ihren Aufrufen bereinstimmen sind f r den Benutzer identisch Neue Funktionalit ten des Betriebssystems stellen sich dem Programmierer als neue Systemaufrufe dar sie he zum Beispiel unter stream 2 Einige UNIX Systemaufrufe haben gleiche oder hnliche Auf gaben 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 System aufruf In Linux UNIX sind Systemaufrufe Funktionen de
199. cat verkettet Strings trchr sucht Zeichen in String tremp vergleicht Strings trcpy kopiert String trcspn sucht Teilstring trerror verweist auf Fehlermeldung trlen ermittelt Stringl nge trncat verkettet n Zeichen von Strings trncmp vergleicht n Zeichen von Strings trncpy kopiert n Zeichen eines Strings trpbrk sucht Zeichen in String trrchr sucht Zeichen in String trspn ermittelt L nge eines Teilstrings trstr sucht Zeichen in String Dies sind alle Funktionen des ANSI Vorschlags Die meisten Compiler bieten dar berhinaus eine Vielzahl weiterer Funktio nen die das Programmieren erleichtern aber die Portabilit t verschlechtern 326 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 Format bezeichner stimmen weitgehend berein Bezeichner Typ Beispiel Bedeutung Ic char a Zeichen s char Karlsruhe String od int 1234 dezimale Ganzzahl mit Vorzeichen Gil int 1234 dezimale Ganzzahl mit Vorzeichen Ku unsigned 1234 dezimale Ganzzahl ohne Vorzeichen ld long 1234 dezimal Ganzzahl doppelter L nge f double 12 34 Gleitkommazahl mit Vorzeichen Re double 1 234 E1 Gleitkommazahl Exponentialform Kg double 12 34 kurze Darstellung von e oder f o unsigned octal 2322 oktale Ganzzahl ohne Vorzeichen Tox unsigned hex 4d2 hexadezimale Ganzzahl o Vorzeic
200. chen Nr 0 abge schlossen sind Sie m ssen als Array angesprochen werden wie ein Array von Zahlen Merke zweitens Ein einzelnes Zeichen kann als Zeichen cha racter a oder als String array of characters a dargestellt werden F r ein Programm sind das verschiedene Dinge Strukturen Eine Struktur auch als Verbund und in PAS CAL als Record bezeichnet vereint Komponenten ungleichen 92 KAPITEL 1 PROGRAMMIEREN IN C C Typs im Gegensatz zum Array Eine Ordnung der Komponenten liegt nicht vor ebenfalls anders als beim Array Strukturen d r fen geschachtelt werden aber nicht sich selbst enthalten keine Rekursion M glich ist jedoch dass eine Struktur einen Poin ter auf sich selbst enth lt ein Pointer ist ja nicht die Struktur selbst womit Verkettungen hergestellt werden Das Schl ssel wort lautet struct Ein typisches Beispiel f r eine Struktur ist eine Personal oder Mitgliederliste bestehend aus alphanumerischen und nu merischen Komponenten Mit den numerischen wird gerechnet auf die alphanumerischen werden Stringfunktionen angewen det Telefonnummern oder Postleitzahlen sind alphanumerische Gr en da Rechenoperationen mit ihnen sinnlos sind Wir er zeugen einen Strukturtyp ohne eigenen Namen und deklarieren zugleich eine Variable namens mitglied Seck char nachname 32 char vorname 32 int beitrag Mitglied Man kann auch zuerst nur die Struktur definieren und in einem zweiten Sch
201. cht zu ndern sein Die Entdeckung von Fehlern die Ber cksichti gung neuer W nsche die Entwicklung der Hardware Bestre bungen zur Standardisierung und Lernvorg nge der Program mierer f hren dazu dass Programme immer wieder berarbei tet werden Kleinere Korrekturen werden durch Patches be hoben w rtlich Flicken Das sind Erg nzungen zum Code die nicht gleich eine neue Version rechtfertigen F r manche Fehler lassen sich auch ohne nderung des Codes Umgehungen fin den sogenannte Workarounds Nach umfangreichen nderun gen m glichst Verbesserungen erscheint eine neue Version des Programmes Ein Programm von dem nicht einmal j hr lich eine berarbeitung erscheint ist tot Jede Woche eine neue Version ist nat rlich auch keine Empfehlung Leichte nderbar keit beruht auf bersichtlichkeit ausf hrlicher Dokumentation und Vermeidung von Hardwareabh ngigkeiten Die bersicht lichkeit wiederum erreicht man durch eine zweckm ige Struk turierung verst ndliche Namenswahl und Verzicht auf beson dere Tricks einer Programmiersprache die zwar erlaubt aber nicht allgemein bekannt sind Gerade C erlaubt viel was nicht zur bersichtlichkeit beitr gt nderungen zu erleichtern kann auch hei en nderungen 22 KAPITEL 1 PROGRAMMIEREN IN C C von vornherein zu vermeiden indem man die Programmteile so allgemein wie mit dem Aufwand vereinbar gestaltet Effizienz ist immer gefragt Fr her bedeutete das vo
202. ck 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 interessant Auf einer 32 Bit Maschine liegt die gr te vorzeichenlose Ganzzahl etwas ber 4 Milliar den 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 Be rechnung von Fakult ten erforderliche Multiplikation durch die Addition Diese beschleunigen wir durch Einsatz einer Assemb lerfunktion aadd COMMENT C Funktion aadd in MS Assembler die ein Array of unsigned long in ein zweites Array addiert Parameter Pointer auf die Arrays MODEL small c CODE grp EQU 4 x 58 siehe C Programm milliarde DD 1000000000 fuer laadd obige Zeile austauschen E grp EQU 4 x 245 siehe C Programm 1 4 FUNKTIONEN 167 aadd PROC USES SI y PTR DWORD g PTR DWORD sub Cx CX sub si Si ele for Schleife nachbilden toril aktuelles Element in den Akku holen long 4 Bytes mov bx y mov ax WORD PTR bx si 0 mov dx WORD PTR bx si 2
203. ck oder e einer Anweisung e gegebenenfalls weiteren Anweisungen e und einer schlie enden geschweiften Klammer Da ein Block syntaktisch gleichwertig einer Anweisung ist las sen sich Bl cke schachteln Ein Block kann berall stehen wo eine Anweisung erwartet wird Ein weiterer Weg zur Beschreibung der Syntax einer Pro grammiersprache ist die Backus Naur Form die von JOHN BACKUS einem der V ter von FORTRAN und PETER NAUR ei nem der V ter von ALGOL als Metasprache zu ALGOL 60 ent wickelt worden ist Weiteres siehe bei D GRIES 1 3 3 Kommentar Alle Programmiersprachen erm glichen Text in ein Programm einzuf gen der vom Compiler berlesen wird und nur f r den menschlichen Leser bestimmt ist Dieser Kommentar muss mit einem besonderen Zeichen eingeleitet und gegebenenfalls been det werden 1 3 BAUSTEINE EINES QUELLTEXTES 79 if else Anweisung bool Anw D Ausdr Q Block Anw Block Block a Anweisung a x e Abb 1 3 Syntax Diagramm der if else Anweisung und des Blockes In C C leitet die Zeichengruppe x den Kommentar ein Er kann sich ber mehrere Zeilen erstrecken darf aber nicht ge schachtelt werden Zu einer ungewollten Schachtelung kommt es wenn man kommentierte Programmteile durch Einrahmen mit Kommentarzeichen vor bergehend unwirksam macht Die Fehlermeldung des Compilers sagt irgendetwas mit Pointern und
204. classes auto extern e register e 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 angegeben zu werden Variablen die ser Klasse leben nur innerhalb des Bereiches in dem sie dekla riert 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 ex tern an register Variable werden nach M glichkeit in Registern na he dem Rechenwerk gehalten 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 Schleifen z hler Optimierende Compiler ordnen von sich aus einige Va riable dieser Speicherklasse zu Auf register Variable kann der Referenzierungs Operator amp nicht angewendet werden Es ist auch unsicher ob das System der register Anweisung folgt Am besten verzichtet man auf diese Speicherklasse 106 KAPITEL 1 PROGRAMMIEREN IN C C Lokale Operanden gelten
205. damit man sie nicht extra zu nennen braucht e Input Output Klassen wie basic_ios e String Klassen wie basic_string e numerisches Klassen wie complex e Klassen zur Ausnahmebehandlung wie exception e sonstige Klassen wie pair und Klassen zur Lokalisation Anpassung an rtliche Gegebenheiten e die Standard Template Library STL Die C Standardbibliothek ist wesentlich umfangreicher als die C Standardbibliothek sie erfordert mehr Zeit zum Einar beiten 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 Begriffe in C einbringt 1 7 2 Standard Template Library STL Ein wichtiger Schritt vorw rts in der Standardisierung von C war die Annahme der Standard Template Library STL als Erweiterung der C Standard Bibliothek durch das ANSI Komitee im Jahr 1993 Die STL enth lt f nf Gruppen von Kom ponenten e Allgemeine Algorithmen e Iteratoren e Container e Funktionen e Adaptoren Wenn man in einem C Programm ein Array linear sequen tiell nach einem bestimmten Wert durchsuchen will sieht die Funktion fiir Ganzzahlen anders aus als fiir Strings obwohl der Suchalgorithmus derselbe ist Die Algorithmen der STL sind dagegen allgemein g ltig indem sie mit Hilfe von Templates 194 KAPITEL 1 PROGRAMMIEREN IN C C den Algorithmus vom Datentyp trennen Ein Template Vorlage Muster Schablon
206. den soll uns hier nicht beschaftigen 34 KAPITEL 1 PROGRAMMIEREN IN C C cc g source c lm L lib I DMAX 100 Die erste Zeile stellt den minimalen Aufruf dar die zweite einen um g ngige Optionen erweiterten Die Option g veranla t den Compiler zus tzliche Informationen f r den symbolischen De bugger zu erzeugen Weitere Optionen sind e y verbose f hrt zu etwas mehr Bemerkungen beim ber setzen e 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 e c h rt vor dem Linken auf erzeugt Objektfile mit der Ken nung o e p profile erzeugt beim Ablauf des Programmes eine Da tei mon out das mit dem Profiler prof 1 ausgewertet werden kann um Zeitinformationen zum Programm zu er halten 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 Na me mit der Kennung c enden Die anschlie ende Option 1m fordert den Linker auf die mathematische Standard Bibliothek einzubinden Die Option L 1ib wendet sich ebenfalls an den Linker und teilt ihm mit dass sich im Verzeichnis 1ib wei tere 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
207. der bei Schlei fendurchg ngen um genau eins Hier hilft der Computer nur we nig da der rmste ja gar nicht wei was sich der Programmie rer vorstellt Diese Fehler kosten viel M he doch solcherlei Ver dr sse pflegen die Denkungskr fte anzuregen meint WILHELM BUSCH und hat recht Eine vierte Fehlerklasse liegt fast schon au erhalb der Ver antwortung des Programmierers Wenn das mathematische Mo dell zur Beschreibung eines realen Problems ungeeignet ist mag das Programm so fehlerarm sein wie es will seine Ergeb nisse gehen an der Wirklichkeit 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 7 unendlich viele Dezimalstel len hat und gemessene Gr en statistischen Schwankungen un terliegen also unscharf begrenzte Intervalle darstellen Grund kenntnisse in moderner numerischer Mathematik bewahren vor blindem Glauben an den Computer Ob und wie inhaltliche Fehler in Texten falsche oder fehlen de Angaben einer der vorstehenden Klassen sinnvoll zugeord net 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 erwiesenerma en die Arbeit erleichtert
208. distribute the same sections as part of a whole which is a work ba sed 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 exercise the right to control the distribution of derivative or collective works based on the Program In addition mere aggregation of another work not based on the Program with the Program 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 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 a Accompany it with the complete corresponding machine readable source code which must be distri buted under the terms of Sections 1 and 2 above ona 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 distribution a complete machine readable copy of the corresponding source code to be distributed under the terms of Sectio
209. e berset zung wird nicht auf Dauer gespeichert Da der Quellcode zeilen weise bearbeitet wird lassen sich nderungen schnell und ein fach ausprobieren Andererseits kostet die bersetzung Zeit In terpreter findet man vorwiegend auf Home Computern f r BA SIC 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 Pro gramm 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 Misch 1 1 GRUNDBEGRIFFE 19 formen 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 e Pr prozessor e eigentlicher Compiler bersetzung in Assembler Code e Assembler bersetzung in Maschinen Code e Linker Der Pr prozessor entfernt Kommentar und f hrt die Pr prozessor Anweisungen siehe Abschnitt 1 9 Pr prozes sor auf Seite 213 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 Quellco de in maschinenspezifische
210. e ist eine allgemeine Vorstufe zu einer Funk tion oder einer Klasse der die Typen der verwendeten Daten als Parameter mitgegeben werden hnlich wie bei einem Funkti onsaufruf 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 wer den eingesetzt um auf Elemente von Containern zuzgreifen so wie man mittels Pointerarithmetik auf die Elemente eines Ar rays zugreift Im Gegensatz zu Pointern bringen sie jedoch ei ne gewisse eigene Intelligenz mit so da der Programmierer wenn er erst einmal ihre Funktionsweise begriffen hat weni ger Arbeit aufzuwenden braucht Unter Containern auch Collection genannt werden Daten strukturen Klassen verstanden die andere Datenstrukturen oder Objekte enthalten Damit l sst sich eine Gruppe von Ob jekten unter einem Namen gemeinsam handhaben Sequenti elle Container speichern ihre Objekte in einer Reihe linear auf sie kann entweder der Reihe nach oder wahlfrei zugegriffen werden Daneben gibt es die assoziativen Container deren Objekte ber einen Schl ssel oder Index zug nglich sind Der einfachste sequentielle Container ist der Vektor ein Array varia bler Gr e Der einfachste assoziative Container ist die Menge Set in der jeder Schl ssel nur einmal vorkommen darf Zu je der Art von Containern geh rt ein Satz von Methoden A
211. e EDV einsteigen oder sich angenehmeren Dingen widmen sollten haben wir ganz besonders f r 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 329 330 ANHANG E KARLSRUHER TEST einarmiger Bandit 1 niederdeutsch f r Kamin 0 Fortran Mainframe PC Puffer Software Port Strichcode Chip Pointer Page 331 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
212. e Konzepte gehen auf ALGOL zu r ck Ende der sechziger Jahre hatte sich das Programmieren vom Kunsthandwerk zur Wissenschaft entwickelt und NIKLAUS WIRTH von der ETH Z rich brachte PASCAL heraus um sei nen Studenten einen anst ndigen Programmierstil anzugew h nen PASCAL ist eine strenge und logisch aufgebaute Sprache daher gut zum Lernen geeignet Turbo PASCAL von Borland ist auf PCs weit verbreitet Ein PASCAL Beispiel findet sich in Ab No programmers write in BASIC after the age of 12 51964 bot keine andere Programmiersprache nennenswerte M glichkeiten zur Verarbeitung von Strings 14 KAPITEL 1 PROGRAMMIEREN IN C C schnitt 1 4 3 Parameter bergabe auf Seite 137 Eine Weiterent wicklung von PASCAL ist MODULA Die Sprache C wurde von BRIAN KERNIGHAN DENNIS RIT CHIE und KEN THOMPSON in den siebziger Jahren entwickelt um das Betriebssystem UNIX damit portabel zu gestalten Lan ge Zeit hindurch gab das Buch der beiden Erstgenannten den Standard vor In den Achtzigern hat das American Natio nal Standards Institute ANSI an einem Standard fiir C ge arbeitet dem alle neueren Compiler folgen hinterherhinken Das ANSI Dokument wurde als Internationaler Standard AN SVISO IEC 9899 1990 anerkannt Ende der neunziger Jahre wurde eine erneute berarbeitung als Internationaler Standard ANSI ISO IEC 9899 1999 ver ffentlicht der auch als C9X be zeichnet wird Den Stand der Dinge erf hrt man bei http anubis dk
213. e Schleife durch die Verwendung von Subarrays Das vereinfacht das Programm Zweitens ist der obige Programmausschnitt unabh ngig vom Typ der Matrix A rmatrix imatrix cmatrix oder cimatrix da alle arith metischen Operatoren so vordefiniert sind wie man es in der Ma thematik erwartet 1 7 3 4 Genaue Auswertung von Ausdr cken Beim Auswerten arithmetischer Ausdr cke spielt die Genau igkeit eine entscheidende Rolle in vielen Algorithmen Auch wenn alle arithmetischen Operatoren und Standardfunktionen f r sich allein maximaler genau sind so liefern zusammenge setzte Ausdr cke doch nicht notwendigerweise Ergebnisse maxi maler Genauigkeit Deshalb sind Verfahren entwickelt worden n 1 7 KLASSEN BIBLIOTHEKEN 199 die numerische Ausdr cke mit hoher und auf mathematischem Wege garantierter Genauigkeit auswerten Eine besondere Art solcher Ausdr cke sind die sogenann ten Skalarproduktausdr cke Sie sind als eine Summe ein facher Ausdr cke definiert Ein einfacher Ausdruck ist entwe der eine Variable eine Konstante oder ein einzelnes Produkt von zweien solcher Objekte Die Variablen d rfen vom Typ Ska lar Vektor oder Matrix sein Nur die mathematisch sinnvollen Operationen sind f r die Addition und die Multiplikation zuge lassen Das Ergebnis der Auswertung eines solchen Ausdrucks ist entweder ein Skalar ein Vektor oder eine Matrix In der numerischen Analysis sind Skalarprodukte von entscheidender Bedeutung Beispielswe
214. e Verfahren und erst recht seine Umsetzung in ein Programm Grenzen haben aber das Referenz Handbuch be schr nkt sich unter trig 3 usw auf die Syntax der Funk tionen Ein Beispiel f r die Verwendung der mathematischen Bibliothek x Potenz x hoch y mathematische Funktionen 22 12 92 x x zu compilieren mit cc o potenz potenz c lm x x Aufruf potenz x y 1 5 FUNKTIONS BIBLIOTHEKEN 175 define EPSILON 0 00001 include lt stdio h gt include lt math h gt double pow floor int main int argc char xargv double x y Z if argc lt 3 puts Zuwenig Argumente return 1 x Umwandlung Kommandozeilenargumente secant argv ily LE amp x sscanf argv 2 1 amp y x Aufruf Funktionen pow floor Sektion 3M x x wegen Fallunterscheidungen nachlesen x if x lt 0 x Xx lt EPSILON 4 if y gt 0 x 0 else puts Bei x 0 muss y positiv sein return 1 else if x lt 0 y floor y Z pow x y x Ausgabe printi sIf hoch SIE sie Wap Xy ya return 0 Quelle 1 61 C Programm mit mathematischen Funktionen 176 KAPITEL 1 PROGRAMMIEREN IN C C Der lint 1 gibt bei diesem Programm eine l ngere Liste von Warnungen aus die daher r hren da in lt math h gt viele Funktionen deklariert werden die im Programm nicht auftau chen Das geht aber in Ordnung 1 5 2 4 Standard Grafik Bibliothek Zu m
215. e aufgeteilt Von jedem Modul entstehen im Verlauf der 63 64 1 2 PROGRAMMER S WORKBENCH 49 Arbeit mehrere Fassungen oder Versionen Der Zustand des ganzen Projektes l t sich in einem dreidimensionalen Koordi natensystem 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 Entwick lung Ordnung zu halten Es ist einfach handzuhaben und ver tr gt sich gut mit make 1 Das RCS erledigt drei Aufgaben e Es f hrt Buch ber die nderungen an den Texten e Es erm glicht ltere Versionen wiederherzustellen oh ne da diese vollst ndig gespeichert zu werden brauchen Speichern von Differenzen e 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 Ein arbeiten 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 fol genderma en e Unterverzeichnis anlegen hineinwechseln e Mit einem Editor die erste Fassung des Quelltextes schrei ben Irgendwo im Quelltext z B im Kommentar sollte SHeader home debian unix unix8 tex v 1 1 1 1 2005 0 oder
216. e ersten sechs sind in ihrer Bedeutung gleich die weiteren gelten bei Argumenten in der Kommandozei le Die Norm ISO IEC 9899 1999 sieht f r C Programme die un ter einem Betriebssystem laufen hosted environment nur die beiden folgenden Formen vor int main void int main int argc char xargv 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 xargv char xenvp Den R ckgabewert von maint sollte man nicht dem Zufall berlassen sondern mit einer return Anweisung ausdr cklich festlegen 0 bei Erfolg Er wird von der Shell bernommen 1 4 FUNKTIONEN 153 1 4 5 Funktionen mit wechselnder Argumen tanzahl Mit main haben wir eine Funktion kennengelernt die eine wechselnde Anzahl von Argumenten bernimmt Auch f r ande re Funktionen als main gibt es einen Mechanismus zu diesem Zweck schauen Sie bitte unter varargs 5 nach Der Mecha nismus ist nicht berm ig intelligent sondern an einige Vor aussetzungen gebunden e Es mu mindestens ein Argument vorhanden sein e der Typ des ersten Arguments mu bekannt sein e es mu ein Kriterium f r das Ende der Argumentliste e kannt sein Die erforderlichen Makros stehen in den include Dateien lt varargs h gt f r UNIX System V oder lt stdarg h gt f r ANSI C Wir erkl ren die Vorgehensweise an einem Beispiel das der Funkti
217. e hinausragen Bitfelder sind kei ne Arrays es gibt keinen Index Ebensowenig lassen sich Bitfel der referenzieren amp Operator Bitfelder werden verwendet um mehrere Ja nein Angaben in einem Wort unterzubringen Der Name einer Strukturvariablen ist ein gew hnlicher Va riablenname kein Pointer 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 augenblickli chen 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 unter gebrachte Datentyp Die Deklaration einer Variablen als Union sieht aus wie bei einer Struktur union unioneins 94 KAPITEL 1 PROGRAMMIEREN IN C C int i double x ch r Gs ux Damit wird ein Unionstyp mit dem Namen unioneins dekla riert und zugleich eine Variable ux dieses Typs Auf die jeweilige Variable wird zugegriffen wie auf die Komponenten einer Struk tur printf d n ux i printf f n ux x printf Tsen AE Man darf nur jeweils die Variable herausholen die als letzte hin eingesteckt worden ist andernfalls gibt es berraschungen Die Union habe ich noch nie gebraucht sie soll in der Systempro grammierung vorkommen und tr gt sicher nicht zur Klarheit ei nes Programmes bei 1 3 6 6 Aufz hlungstypen Durch Aufz hlen lasse
218. e mehr oder weniger zuf lliger nat rli cher Zahlen und gibt sie auf stdout aus x random c zur Erzeugung von Zufallszahlen MAX Zufallszahlen von 1 bis MOD x define MAX 100 define MOD 200 238 KAPITEL 1 PROGRAMMIEREN IN C C include lt stdio h gt include lt time h gt include lt stdlib h gt int main rne Sige Epos s int time time_t amp 0 I srand unsigned s for i 0 i lt MAX i r 1 rand MOD printf d n r srandom unsigned s for i 0 1 lt MAX kk r 1 random MOD printf d n r return 0 Quelle 1 84 C Programm zur Erzeugung von MAX Zufallszah len 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 be stimmt Weiter binden wir die Include Dateien stdio h f r die Funktion printf time h f r den Systemaufruftime und stdlib h f r die Funktionen srandom und random ein Die Variable i ist ein Schleifenz hler r 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 Januar 1970 0 Uhr GMT Damit ist si chergestellt da wir bei jedem Aufruf einen anderen Wert ha 1 11 WEITERE C PROGRAMME 239 ben Die Syntax von time holt man sich mittelsman 2
219. eare Algebra e nichtlineare Gleichungen e Statistik e N herungen Interpolation Ausgleichsrechnung e Zufallszahlen usw N heres unter http www nag co uk 80 numeric html 32Ein Gadget ist laut W rterbuch ein geniales Dingsbums 178 KAPITEL 1 PROGRAMMIEREN IN C C 1 5 5 Eigene Bibliotheken Wir haben bereits in Abschnitt 1 2 6 Bibliotheken Archive auf Seite 43 gelernt eine eigene Programmbibliothek mittels des UNIX Kommandos ar 1 herzustellen Zun chst macht es Ar beit seine Programmierergebnisse in eine Bibliothek einzuord nen aber wenn man einmal einen Grundstock hat zahlt es sich aus 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 ber bleibsel aus uralten Zeiten Die Adressierung der Speicherpl tze ist unterschiedlich je nachdem ob man sich nur innerhalb ei nes Segmentes oder im ganzen Arbeitsspeicher bewegt F r je des Speichermodell ist eine eigene Standardbibliothek vorhan den Das Speichermodell wird gew hlt durch e die Angabe einer Compiler Option oder e 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 Compi ler einen Default an MS Quick C qc1 beispielswei
220. efix 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 I KK KKKKKKK KKK x Methoden x 1 8 UBERLADEN VON OPERATOREN 211 LEE EE EE PRIM PRIM int anzahl 1 int primzahl 2 Construct prim_count anzahl prim_number primzahl Folgende triviale Zugriffsmethoden sind erforderlich da die Variablen prim_count und prim_number privat sinc int PRIM get_count d return prim_count int PRIM get_prim return prim_number KK KK KKK RK HH HH HH HH HH HH HH KH A a a x Ueberladen des Praefix Operators KK KK KKK RK KH HH HH HH HH HH HH A KH a a a PRIM amp PRIM operator if prim_number 2 Test auf 2 prim_numbertt 2 1 3 naechste Primzahl ori im count Inkrementierung der Anzahl return this aktuelles Objekt zurueckgeber forr j tee Joy 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 lt haelfte i 2 if prim_number i i prim_number prim_flag 0 false teilbar break if prim_flag break Verlassen dere S prim_count Inkrementierung der Anzahl 212 KAPITEL 1 PROGRAMMIEREN IN C C return this
221. ehen in Hochkommas e logische Bl cke werden durch begin und end begrenzt es kommen nur ganzzahlige Variable vor e es wird Ganzzahl Arithmetik verwendet e an Funktionen treten read und print auf e an Kontrollanweisungen werden if then else und goto verwendet Das sieht hoffnungsvoll aus Die bertragung nach C x Groesster gemeinsamer Teiler nach Euklid Uebertragung eines ALGOL Programms aus K Nickel nach zu compilieren mit cc o ggt ggt c include lt stdio h gt 284 KAPITEL 1 PROGRAMMIEREN IN C C int main Gap te Dys E ee while 1 x Eingabe x puts oor von a und b nach Euklid puts Beenden mit Eingabe 0 printf Bitte a und b eingeben scanf dA Sd amp a amp b x Beenden falls a oder b gleich 0 x if a 0 b 0 exit 0 x x muss den groesseren Wert aus a und b enthalten if a gt b x a y b else x bp y az x Euklid x while r x y x VY y ri x 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 angereichert die goto Schleifen wur den durch while Schleifen ersetzt und der ALGOL Behelf zur Berechnung des Divisionsrestes ent ier durch die in C vorhan dene Modulo Operation Bei einem Vergleich mit dem Programm 1 55 C Programm get nach Euklid rekursiv auf Seite 160 si
222. eht man wie unter schiedlich selbst ein so einfacher Algorithmus programmiert 1 13 PORTIEREN VON PROGRAMMEN 285 werden kann Dazu kommen andere Algorithmen zur L sung derselben Aufgabe beispielsweise 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 aaaan a Q Q Q Loesung der quadratischen Gleichung axxXxxX bex c 0 reelle Koeffizienten Loesungen auch komplex program quad real Seppe e op leks real eps complex xlc x2c data eps 1 0e 30 write Loesung von axx x bex c UI write x x Bitte a b und c eingeben read Aye a b c 1 Fall a nahe Null lineare Gleichung if abs a lt eps then write x WARNUNG a nahe Null Null angenommen if abs b lt eps then write x x WARNUNG auch b nahe Null Unsinn goto 100 else write Loesung x c b goto 100 endif else 286 KAPITEL 1 PROGRAMMIEREN IN C C G 2 Fall eine oder zwei reelle Loesungen aio ee a ee re ee if doe 0 0 then s sqrt d xl b s h x2 b s h write x x Eine oder zwei reelle 1 Loesungen WELLE RL NRZ write x 722 SH x2 goto 100 Ge A Dee Eed ee eee 3 Fall konjugiert komplexe Loesungen SE else r b h s sgrt d h xlc cmplx r s x2c cmplx r s write Konjugier
223. eht 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 gebraucht werden Man kann also viele Funktionen in einer Biblio thek zusammenfassen ohne bef rchten zu m ssen seine Programme mit Ballast zu befrachten Die Bibliothek kann auf Quellfiles unterschiedlicher Programmiersprachen zu r ckgehen Sie m ssen nur f r dasselbe System kompiliert worden sein es macht keinen Sinn und ist auch nicht m g lich 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 Bibliotheken Archive auf Seite 43 im Rahmen der Programmer s Workbench erl utert Im folgenden geht es um die Verwendung von Bibliotheken 1 5 2 Standardbibliothek 1 5 2 1 bersicht Standardfunktionen sind die Funktionen die als Standard bibliothek zusammen mit dem Compiler geliefert werden Sie sind im strengen Sinn nicht Bestandteil der Programmierspra che 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 andere Programmierer vor und f r uns erledigt ha ben Die Systemaufrufe Sektion 2 geh ren dagegen nicht zur Standardbibliothek Sektion 3 sondern zum
224. eichenlos 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 282 KAPITEL 1 PROGRAMMIEREN IN C C e die Annahme da eine extern Deklaration in einem Block auch au erhalb des Blockes gilt Diese und noch einige Dinge werden von unterschiedlichen Be triebssystemen und Compilern unterschiedlich gehandhabt und man wei nie was einem begegnet Dagegen soll man e den Syntax Pr fer lint 1 befragen e Pr prozessor Anweisungen und typedef benutzen um Abh ngigkeiten einzugrenzen e alle Variablen Pointer und Funktionen ordentlich deklarie ren e Funktions Prototypen verwenden e symbolische Konstanten define anstelle von r tselhaf ten Werten im Programm verwenden e richtig ausgerichtete Unions anstelle von trickreichen Uberlagerungen von Typen verwenden e den sizeof Operator verwenden wenn man die Gr e von Typen oder Variablen braucht e daran denken da die Gr e von Datentypen je nach Ar chitektur unterschiedlich ist e umfangreiche Deklarationen in Include Dateien packen e nur die C Standard Funktionen verwenden oder f r ande re Funktionen die Herkunft oder den Quellcode angeben mindestens aber die Funktionalit t und die Syntax e bei printf 3 oder scanf 3 die richtigen Platzhalter verwenden 1d f r long e alle unvermeidlic
225. einbarung zusammen gefasst 23KERNIGHAN RITCHIE gebrauchen Objekt im Sinne eines Speicherbereiches auf den mittels eines Namens zugegriffen wird 1 3 BAUSTEINE EINES QUELLTEXTES 83 Auf die Auswahl und Strukturierung der Operanden soll man Sorgfalt verwenden Eine zweckm ige Datenstruktur erleich tert das Programmieren und f hrt zu besseren Programmen Ei ne nachtr gliche nderung der Datenstruktur erfordert meist einen gro en Aufwand weil viele Programme oder Programm teile davon betroffen sind Die Namen der Operanden sollen ihre Bedeutung erkl ren erforderlichenfalls ist ihre Bedeutung im Kommentar oder in einer Aufz hlung festzuhalten 1 3 6 1 Konstanten und Variable Operanden k nnen w hrend des Ablaufs eines Programmes kon stant bleiben wie die Zahl 7 oder sich ndern wie die Anzahl der Iterationen zur L sung einer Gleichung oder das Ergebnis einer Berechnung oder Textsuche Es kommt auch vor dass ein Operand f r einen Programmaufruf konstant ist beim n chsten Aufruf aber einen anderen Wert hat wie der Mehrwertsteuer satz Man tut gut s mtliche Operanden eines Programmes an we nigen Stellen zusammenzufassen und zu deklarieren In den Funktionen oder Prozeduren sollen keine geheimnisvollen Zah len magic numbers auftauchen sondern nur Namen Konstan ten die im Programm ber ihren Namen aufgerufen werden hei en symbolische Konstanten F r den Computer sind Konstanten Bestandteil des Pr
226. einzelnen Stufen ist schwierig abzusch t zen da Kleinigkeiten manchmal f rchterlich aufhalten Lassen wir Betrieb und Pflege als zeitlich unbegrenzt heraus und neh men wir an dass das Schreiben der Dokumentation parallel er folgt so lassen sich ungef hr folgende Anteile als Ausgangswerte f r eine Zeitplanung nehmen e Aufgabenanalyse 20 s Entwurf 30 e Codierung 20 e Test 30 Wer Softwareprojekte zu seinem Broterwerb macht sollte ein Tagebuch oder Protokoll f hren um Erfahrungen auf dem Pa pier festzuhalten und sie beim n chsten Projekt zu verwerten Bei der Codierung rechnet man mit 60 Zeilen Programmcode ohne Kommentar und Leerzeilen pro Tag und Programmierer Das sind zwei bis drei Seiten DIN A4 mit Kommentar und Leer zeilen Gleichzeitig ist das die Obergrenze f r ein Programmmo dul in C eine Funktion Haben Sie f r ihr Projekt 100 Arbeitsta ge 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 allen Abbildungen fertig vor kommt man auch auf zehn Seiten pro Tag Umgekehrt k nnen schwierige Rechnungen oder das Beschaffen exotischer Literatur ein Manu skript beliebig verz gern Korrekturlesen das Zusammenstellen 1 1 GRUNDBEGRIFFE 25 eines Index und hnliche ungeliebte Arbeite
227. eit verbunden Stattdes sen legt man ein Hilfsfile einen Index an der nur die Sortier schl ssel Namen und die Speicheradressen Pointer der zuge h rigen 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 Daten satzes Ich kann auch zwei Indexfiles mit verschiedenen Sor tierschL sseln Namen Geburtstag anlegen w hrend die Da tens tze bestenfalls nach einem einzigen Schl ssel sortiert sein k nnen Meistens verzichtet man darauf die Datens tze zu sor tieren Der dritte Band von DONALD E KNUTH befasst sich nur mit Suchen und Sortieren ein interessantes Gebiet Jeder ver steht 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 ber gabe auf Seite 137 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 Ele ment des Ergebnisses Auf Variablen kann mittels ihres Namens oder ihrer Spei cheradresse Hausnummer zugegriffen werden Die
228. eken 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 Schwierigkeiten Fur DOS PCs gibt es von Microsoft das preiswerte Quick C und aus dem GNU Projekt einen kostenlosen C Compiler im Quell code und betriebsklar kompiliert Aus C hat BJARNE STROUSTRUP von 1979 bis 1989 eine Sprache C entwickelt die ebenfalls eine Ubermenge von C bil det Der Denkansatz Paradigma beim Programmieren in C weicht jedoch erheblich von C ab so dass man eine l ngere Lern phase einplanen muss mehr als bei einem bergang von PAS CAL 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 wag ten sich die Programmierer an komplexere und umfangreiche re Aufgaben heran Dass gro e Aufgaben in kleinere Teilaufga ben untergliedert werden m ssen ist eine allt gliche Erfahrung und nicht auf Programme beschr nkt Die Strukturierung ei ner Aufgabe samt ihrer L sung gewann an Bedeutung Program miersprachen wie C die die Strukturierung eines Programms in Module Funktionen Prozeduren Subroutinen erleichtern ver breit
229. eklaration D 1 SCHL SSELW RTER 319 Dar ber hinaus verwenden einige Compiler weitere Schl ssel w 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 warin 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 Na men 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 Schl sselwort class using Deklaration in Verbindung mit namespace wchar_t Typ wide character literal 320 D 2 Operatoren ANHANG D C LEXIKON Die Operatoren von C C sind im folgenden ihrem Vorrang nach geordnet h chster Rang Bindungskraft zuoberst Alle Operatoren eines Abschnitts haben gleichen Rang bzw r e deutet von links bzw rechts her assoziativ Ein un rer Opera tor verlangt einen Operanden ein bin rer zwei und ein tern rer drei Operator A Bedeut
230. ektorientiert oder prozedural ist nicht die Programmierspra che sondern die Aufgabenanalyse Sie f hrt auf Programmbau steine Module die entweder Objekte oder Prozeduren Funk tionen Prozeduren Subroutinen sind Erst an zweiter Stelle kommen dann die Programmiersprachen die die eine oder an dere Denkweise unterst tzen Man kann mit objektorientier ten Sprachen prozedural aufgebaute Programme schreiben und mit prozeduralen Sprachen objektorientierte Programme Da der Ausgangspunkt die Aufgabenanalyse ist macht sich die Objek torientierung bei kleinen Programmen wo es nichts zu analy sieren gibt nicht bemerkbar C und Objective C wurden ent wickelt um e ein besseres C zu sein dasselbe Ziel wie ANSI C e die Datenabstraktion zu unterst tzen e das objektorientierte Programmieren zu unterst tzen Als erstes ein Hallo Programm in C mit Objektorientie rung und Klassen ist da noch nichts zu machen Za Hallo Welt in C include lt iostream h gt anstelle stdio h int main char v 20 1 6 KLASSEN 181 cout Bitte Vornamen eingeben cin v cout e Hallo v n return 0 Quelle 1 62 C Programm Hallo Welt Eine zweite Art des Kommentars Zeilenkommentar ist hin zugekommen 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 In put Stream
231. else Verzweigung darstellen einmal laut vor 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 Diagramm eine Quelle zu schreiben Das l sst sich teilweise sogar mit CASE Werkzeugen in beide Richtungen automatisieren 30 KAPITEL 1 PROGRAMMIEREN IN C C if Bedingung then else Anweisung 1 Anweisung 2 Anweisung 4 Anweisung 3 Abb 1 2 Nassi Shneiderman Diagramm einer if else Verzweigung 1 1 12 Memo Grundbegriffe Maschinen verstehen nur Maschinensprache die hardwa reabh ngig und f r Menschen unverst ndlich ist Programmierer verwenden h here an die Aufgaben an gepasste Programmiersprachen die f r Maschinen unver st ndlich sind Was sie schreiben wird Quelle source ge nannt bersetzer Compiler Interpreter bersetzen Quelltexte h herer Programmiersprachen in Maschinensprache Der umgekehrte Weg ist praktisch nicht gangbar Deklarative Sprachen beschreiben die Aufgabe prozedura le den L sungsweg Innerhalb der prozeduralen Sprachen geh ren BASIC FORTRAN PASCAl COBOL und C zum imperativen Zweig JAVA SMALLTALK und C zum objektorientier ten Die Objektorientierung ist ein Versuch mit der wachsen den Komplexit t der Programme fertig zu werden Die Herstellung eines Programms begi
232. em bestimmten Ereignis der Knopf wird vom 206 KAPITEL 1 PROGRAMMIEREN IN C C Benutzer bet tigt ein Signal aus in diesem Fall das Signal clicked das vorher mit einem Slot in einem anderen Pro grammteil verbunden wurde Viele Widgets beinhalten dearar tige Slots selbstverst ndlich kann man auch in seinen eigenen Klassen Funktionen als Slots deklarieren Um eigene Klassen mit Slots zu implementieren ist die Ver wendung des Meta Object Compilers moc vonn ten der auf die Klassendeklaration angewandt einige Makros ersetzt die ser Schritt ist notwendig da das Konzept von Signalen und Slots nicht in C enthalten ist blicherweise wird man die Klassen deklarationen 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 anstel le der Include Datei mit den Klassendeklarationen eingebunden wird Das folgende Beispiel besteht aus einem Makefile einer Include Datei und dem eigentlichen Programm Das Programm ffnet ein Fenster und bringt in dessen Mitte eine Beschriftung 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 es werden die Include Files von X11 und Qt benoetigt INC I usr X11R6 include I usr lib gt include gelinkt wird
233. ement Index 0 x x vektor 2 Za uebernaechstes Element Die selten vorkommende Subtraktion zweier gleichartiger Poin ter liefert die Anzahl der zwischen den beiden Pointern liegen den Datenobjekte 1 3 7 8 Ein und Ausgabe Operationen In C gibt es keine Operatoren zur Ein oder Ausgabe vergleich bar mit read oder write in PASCAL oder FORTRAN Statt dessen greift man entweder auf Systemaufrufe des Betriebs systems z B UNIX zur ck oder besser auf Funktionen der C Standardbibliothek die letzten Endes auch Systemaufrufe verwenden nur intelligent verpackt Die Systemaufrufe haben eine etwas schwierigere Syntax erlauben dafiir aber auch Dinge auBerhalb des Ublichen Wer portabel fiir verschiedene Betriebs systeme programmieren mochte bevorzugt die Standardfunktio nen da sie die Unterschiede verdecken Wenn keine Gr nde da gegen sprechen nimmt man die Standardfunktionen Die UNIX Systemaufrufe sind in der Sektion 2 des Hand buchs zu finden die wichtigsten lauten open 2 close 2 read 2 und write 2 Hier ein Programmbeispiel x Demo Systemaufruf open 2 include lt stdio h gt x wegen puts 3 x include lt fcntl h gt x wegen open 2 x include lt unistd h x wegen write 2 x include lt string h x wegen strlen 3 x int main int argc char argv Th int fildes size_t bufsize ssize_t n 1 3 BAUSTEINE EINES QUELLTEXTES 117 char buffer UNIX ist prima if argc lt 23
234. en curses initscr refresh endwin endif return 0 Quelle 1 82 C Programm zum Leeren des Bildschirms oder von Dateien 1 11 WEITERE C PROGRAMME 235 Das Kommando usr local bin xclear ist eine recht praktische Erweiterung von bin clear Die Funk tion 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 einfachen F llen wie dem obigen arbeiten in der Regel sind die intelligenteren curses 3 Funktionen vorzuziehen Im folgenden Beispiel verwenden wir curses 3 Funktionen zur Bildschirmsteuerung zum Erzeugen eines Hilfe Fensters x help c Programm mit curses Funktionen x x Compiler cc o help help c lcurses x define END c Q ce q Za Makros x define HELP c H ce h include lt curses h gt int main int c disp 1 WINDOW xframe initscr noecho chreak 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 4 clear refresh endwin return 0 else if HELP if disp d frame newwin 13 40 10 35 wstandout frame 236 KAPITEL 1 PROGRAMMIEREN IN C C for c 0 lt
235. en 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 Schal 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 RIP 2001 CLAUDE ELWOOD SHANNON gestorben gilt als Erfinder des Bits und Begr nder der Informationstheorie In den USA starten JIMMY DONAL WALES und LAWRENCE MARK eine internationale Online Enzyklop die auf der Grundlage eines W 2002 Die Einf hrung der Euro W hrung f hrt zu einem neuen Zeichen 2004 in internationalen Zeichens tzen Im Herbst bef llt der Wurm Slapper zahlreiche Webserver unter Lu 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 376 ANHANG G ZEITTAFEL bedrohen die Open Source Welt 2005 Anfang Juni wird Debian GNU Linux Version 3 1 sarge nach reiflicher 2006 berlegung als stabil freigegeben und l st 3 0r6 woody
236. en erschweren Die typische Fra ge vor der auch ich immer wieder stehe lautet Was ist XYZ und wozu kann man es gebrauchen Hinsichtlich vieler Einzelheiten verweise ich auf die Referenz Handb cher zu den Rechenanla gen 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 Pro grammiersprache oder der Netzdienste nicht allein aus B chern erlernen das ist wie beim Klavierspielen oder Kuchenbacken Die Beispiele und bungen wurden auf einer Hewlett Packard 9000 712 unter HP UX 10 20 und einem PC der Marke Weingar tener Katzenberg Auslese unter Debian GNU Linux entwickelt Als Shell wurden Bourne Abk mmlinge bevorzugt als Compiler V wurde 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 gehen 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 Maschi ne begleiteten Gegenw rtig verschiebt sich
237. en ja selbst unabh ngig vom Typ auf den sie zeigen gleich viele Bytes Im folgenden Beispiel wird eine Funktion xread vorge stellt diejede 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 glichkeit fehlerhafte Eingaben nach Be lieben zu behandeln Als erstes ein Programmrahmen der die Funktion xread aufruft dann die Funktion x Fkt xread zum Einlesen und Umwandeln von Strings x mit Rahmenprogramm main zum Testen 1992 05 11 x include lt stdio h gt int xread void xp char xtyp void exit Ja Systemaufruf x int ma int error 0 int X double y char z 80 Za Integer Eingabe x printf Bitte Ganzzahl eingeben n if xread amp x int printf Die Eingabe war d n x else puts Fehler von xread error 1 x Gleitkomma Eingabe gt printf Bitte Gleitkomma Zahl eingeben n if xread amp y float printf Die Eingabe war f n y x 1 11 WEITERE C PROGRAMME 245 else puts Fehler von xread error 1 x Stringeingabe x printf Bitte String eingeben n if xread z char 4 printf Die Eingabe war s n z else puts Fehler von xread error 1 exit error x Funktion xread x Parameter Variable als Po
238. en nicht im makefile 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 f77 LDFLAGS lcl all csumme fsumme clean csumme csumme c cCSV O csr o S CC o csumme csumme c csv o csr o S CC c csv c esr o csr c CC c csr c fsumme fsumme c fsr o S CC 0o fsumme fsumme c fsr o LDFLAGS ae ESTLE S FC c fsr f clean rm x o Quelle 1 8 Makefile mit Makros und Dummy Zielen Zun chst werden einige Makros definiert z B der Compilerauf ruf CC berall wo im Makefile das Makro mittels CC auf gerufen 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 Aufz hlung wei terer Ziele besteht Mittels make all wird dieses Dummy Ziel 38 KAPITEL 1 PROGRAMMIEREN IN C C 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 Dateien 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 au
239. en und die Bildunterschrift Die verschiedenen Arten der Be feuerung werden durch jeweils eine Funktion bildx x er zeugt Die Funktionspointer stehen in einem Array int xschiff MAX x MAX 126 in schiff h Die Funktionen werden ber ihren Index aufgerufen die Rei henfolge wird von einem weiteren Array int index MAXARR x MAXARR ein Mehrfaches von MAX x bestimmt das entweder mit einer wiederholten Folge der nat r lichen Zahlen von 0 bis MAX 1 belegt ist oder mit einer Zu fallsfolge von Zahlen dieses Intervalles So kann man sich die 1 11 WEITERE C PROGRAMME 255 Befeuerungen in einer systematischen oder zuf lligen Folge an zeigen lassen Die Funktionen bildx sind in einer Datei in einem ei genen Unterverzeichnis vereinigt x Funktionen bildx x Pine laude bilder h KK KKKKKKKK KKK Ja Sportboot x RRR KKK EE E EE int bild001 eet TE Kei 00L Ty textl Sportboot von vorn sportboot 0 feuersportl return 0 Quelle 1 91 C Funktion bilder c zum Programm schiff c Die Funktionen rufen im wesentlichen weitere Funktionen auf Das Unterverzeichnis enth lt eine eigene Include Datei und ein eigenes Makefile In gleicher Weise sind die tibrigen Funktio nen organisiert Das Makefile des Hauptprogramms ruft Makefiles in den Un terverzeichnissen auf Wir haben also eine Hierarchie von Make files makefile fuer schiff c include make h Compiler Ausw
240. ennen Mithilfe der bekannten Programmiersprachen von BASIC bis C beschreiben wir den L sungsweg in einer f r den Computer geeigneten Form Diese Programmiersprachen werden als algo rithmische oder prozedurale Programmiersprachen im wei teren Sinn bezeichnet weil die Programme aus Prozeduren be stehen die Anweisungen an den Computer enthalten lateinisch procedere vorangehen Diese Familie wird unterteilt in die imperativen oder prozeduralen Sprachen im engeren Sinne ei nerseits und die objektorientierten Sprachen andererseits latei nisch imperare befehlen Bequemer w re es jedoch wir k nnten uns mit der Beschrei bung der Aufgabe begn gen und das Finden eines L sungswe ges dem Computer berlassen Sein Nutzen w rde damit bedeu tend wachsen Die noch nicht sehr verbreiteten deklarativen Programmiersprachen gehen diesen Weg lateinisch declarare erkl ren beschreiben Die Datenbank Abfragesprache SQL Structured Query Language geh rt hierher in den Program men 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 Wir haben also folgende Einteilung wobei die tats chlich be nutzten Sprachen Mischlinge sind und die Einordnung ihrem am st rksten ausgepr gten Charakterzug folgt e Prozedurale Sprachen im weiteren Sinn imperative algorithmische operative oder im engeren S nn prozedur
241. ense 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 aggregate if the 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 362 ANHANG F GNU LIZENZEN Ifthe Cover Text requirement of section 3 is applicable to the se copies of the Document then ifthe Document is less than one half ofthe entire aggregate the Document s Cover Texts may be placed on covers that bracket the Document within the aggrega te 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 sec tion 4 Replacing Invariant Sections with translations requires special permission from their copyright holders but you may in clude translations of some or all Invariant Sections in addition to the orig
242. er t einen deutschen 7 Bit ASCII Zeichensatz enth lt sind folgende Ersetzungen der amerikani schen Zeichen durch deutsche Sonderzeichen blich Nr US Zeichen US ASCII German ASCII 91 linke eckige Klammer 92 Backslash 93 rechte eckige Klammer 123 linke geschweifte Klammer 124 senkrechter Strich 6 125 rechte geschweifte Klammer 126 Tilde 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 Nummern h her 127 enthalten siehe vorhergehende Tabelle B 3 ASCII Steuerzeichen Die Steuerzeichen der Zeichens tze dienen der bermittlung von Befehlen und Informationen an das empfangende Ger t und nicht der Ausgabe eines sicht oder druckbaren Zeichens Die Ausgabeger te kennen in der Regel jedoch einen Modus trans parent Monitor Display Functions in der die Steuerzeichen nicht ausgef hrt sondern angezeigt werden Die meisten Steu erzeichen belegen keine eigene Taste auf der Tastatur sondern werden als Kombination aus der control Taste und einer Zei chentaste eingegeben In C C l t sich jedes Zeichen durch seine oktale Nummer in der Form 123 oder durch seine hexa dezimale Nummer in der Form x53 eingeben hier das S 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 306 ANHANG B ZEIC
243. er Wert also true oder false beziehungsweise in C die entsprechenden Zahlen nicht 0 oder 0 Ein h ufiger Fehler ist die Verwendung des einfachen Gleich heitszeichens f r die Abfrage auf Gleichheit Dieser Fehler ist schwierig zu erkennen da der fehlerhafte Ausdruck syntaktisch korrekt ist er bedeutet nur eine Zuweisung an Stelle des beab sichtigten Vergleichs if Ce S09 Al Goes x statt x 0 x7 Der Compiler protestiert nicht Da in Vergleichen oft auf einer Seite Ausdr cke wie Konstanten vorkommen die nicht auf der linken Seite einer Zuweisung stehen k nnen r values emp fiehlt 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 ae else 2 aj Er weist der Variablen z den Betrag von a zu Rechts des Gleich heitszeichens 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 selte nen tern ren oder triadischen Operatoren drei Operanden und f hrt zu schnellerem Code als if else Welchen Wert nimmt z in f
244. er in C nicht Bei Strings taucht das Problem der L ngenangabe auf Fol gender Weg ist gangbar erf llt aber nicht alle W nsche typedef char xSTRING Dann k nnen wir schreiben STRING fehler Falsche Eingabe Der Compiler wei die L nge der Strings aufgrund der Zuwei sung der Stringkonstanten Hingegen ist die nachstehende De klaration 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 zwei maliges Dereferenzieren f hrt auf den Typ char Die Schreib weise 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 angenom men Ist man darauf angewiesen dass ein Datentyp eine be stimmte Anzahl von Bytes umfasst erleichtert man das Por tieren 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 1 3 BAUSTEINE EINES QUELLTEXTES 105 typedef int INT4 x Ganzzahl von 4 Bytes x INTA i 3 k und ndert bei Bedarf nur die typedef Zeile Zweckm f 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
245. er selbst erstellte Bibliotheken verwenden Im Handel sind beispielsweise Bibliotheken mit Funktionen f r Bildschirmmasken zur Verwaltung index sequentieller Dateien f r Grafik zur Me werterfassung und aufbereitung und f r besondere mathematische Aufgaben Auch aus dem Netz laufen Bibliotheken zu Eigene Bibliotheken er zeugt man mit dem UNIX Kommandb ar 1 das Datei Format ist unter ar 4 beschrieben Ein Beispiel zeige den Gebrauch Wir haben ein Programm statistik c zur Berechnung von Mittelwert und Varianz der in der Kommandozeile mitgegebe nen ganzen Zahlen geschrieben x Statistische Auswertung von eingegebenen Werten Privat Bibliothek libstat a erforderlich Compileraufruf cc statistik c L 2 lstat x define MAX 100 Za max Anzahl der Werte x include lt stdio h gt void exit double mwert varianz main int argc char xargv int i a MAX if argc lt 3 4 puts Zuwenig Werte exit 1 if argc gt MAX Ly 1 1 2 PROGRAMMER S WORKBENCH 45 puts Zuviel Werte exit 1 x Uebernahme der Werte in ein Array al0 argc 1 for i 1 i lt argc i sscanf argv i d a i Za Ausgabe des Arrays for i 1 i lt argc i printf d n abe x Rechnungen gt printf Mittelwert 3f n mwert a printf Varianz gf n varianz a return 0 Quelle 1 9 C Programm Statistik mit Benutzung einer ei
246. er 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 ei ner Gruppe von C Quell und Objektfiles Der Aufruf 1 2 PROGRAMMER S WORKBENCH 47 cflow statistik c liefert auf stdout main int lt statistik c 15 gt puts lt gt exit lt gt sscanf lt gt printf lt gt mwert lt gt varianz lt gt NS OP WN H was besagt da die Funktion main vom Typ int ist und in Zeile 15 des Quelltextes statistik c definiert wird main ruft seinerseits die Funktionen puts exit sscanf und printf auf die in statistik c nicht definiert werden da sie Teil der Standardbibliothek 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 Kreuzreferenzliste 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 10 EOF usr include stdio h 70 x71 FILE usr include stdio h 18 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 incelude stdio h
247. ern ist m glich ergibt jedoch nichts Sinnvol les Genauso ist es mit Pointern Aus einem Variablennamen x entsteht der Pointer auf die Va riable x durch Voransetzen des Referenzierungsoperators Umgekehrt wird aus dem Pointer p die zugeh rige Variable p durch Voransetzen des Dereferenzierungsoperators x Refe renziert werden kann nur ein Objekt im Speicher also eine Va riable aber nicht ein Ausdruck oder eine Konstante Derefe renziert werden kann nur ein Pointer der bereits auf ein Objekt im Speicher verweist der also eine Speicheradresse enth lt Ei ne Speicheradresse belegt ein Objekt erst wenn es definiert ist einen Wert hat nicht schon mit der Deklaration Folgende Zei len sind zul ssig beziehungsweise nicht int x 12 xpy ADM x x zu frueh unzulaessig 26Es gibt nat rlich auch Adresskonstanten deren Wert w h rend 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 1 3 BAUSTEINE EINES QUELLTEXTES 97 py amp x xpy x Za erlaubt aber ueberfluessig printf CH sd n Xx py 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
248. erval y y x Use interval arithmetic return Sr 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 x 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 zx Fb lt 0 0 amp amp 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 f mid y deriv y amp y amp means intersection while y y_old else cout lt lt Criterion not satisfied lt lt endl 1 7 KLASSEN BIBLIOTHEKEN 205 Quelle 1 69 C XSC Programm Intervall Newton Verfahren Weitere Beispiele finden sich in dem Buch von RUDI KLATTE und anderen siehe Anhang H Zum Weiterlesen auf Seite 377 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 fiir das X Window Sys tem X11 als auch f r Microsoft Windows erh ltlich ist F r die Entwicklung freier UNIX Software ist die Nutzung der Biblio thek kostenlos vor einiger Zeit hat Troll Tech die Bibliothek unter eine OpenSource Lizenz www opensource org gestellt so da auch nderungen
249. esperrt haben anschlie end die Ko pie 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 da sich die Beteiligten diszipliniert verhalten Hier ein Makefile mit RCS Kommandos f r das nachstehende Sortierprogramm makefile zu mysort c im RCS System SHeader home debian prog quellen sortmakef tex v 1 1 1 1 CC bin ce CFLAGS Aa DDEBUG all mysort clean mysort mysort o bubble o CC CFLAGS o mysort mysort o bubble o mysort o mysort c myheader h CC O CE LAGS c mysort c 1 2 PROGRAMMER S WORKBENCH 51 bubble o bubble c myheader h S CC CFLAGS c bubble c mysort c mysort c v CO MYSOETzE bubble c Bubble 8 8 co bubble c myheader h myheader h v co myheader h clean bin rm f c 0 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 Werten an x myheader h zu
250. estimmten Fehlern Legen Sie mitmkdir progein Unterverzeichnis prog an wechseln Sie mit cd prog dorthin und geben Sie mit vi fehler c folgendes C Programm ohne den Kommentar unter dem Namen fehler cein x Uebungsprogramm mit mehreren Fehlern x 1 Fehler Es wird eine symbolische Konstante PI definiert die nicht gebraucht wird Dieser Fehler hat keine Auswirkungen und wird von keinem Programm bemerkt 2 Fehler Eine Ganzzahl Variable d wird deklariert aber nicht gebraucht Dieser Fehler hat keine 72 KAPITEL 1 PROGRAMMIEREN IN C C Auswirkungen wird aber von lint beanstandet 3 Fehler Die Funktion scanf verlangt Pointer als Argument es muss amp a heissen Heimtueckischer Syntaxfehler lint gibt eine irrefuehrende Warnung aus der Compiler 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 Syntaxfehler wird von lint und Compiler beanstandet 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
251. et ftp ftp ciw uni karlsruhe de pub docs net genera 1987 16 S ASCII Erklarung 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 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 MTA 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 Technik 392 15 ANHANG H ZUM WEITERLESEN 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 Deutsc
252. eten sich Um 1980 herum war die Komplexit t wieder so angewach sen dass nach neuen Wegen zu ihrer Bew ltigung gesucht wur de Au erdem hatte die Software als Kostenfaktor die Hardware berholt Es galt umfangreiche Programme schnell und preis wert herzustellen und dabei noch deren Zuverl ssigkeit sicher 8 Es gibt einen International Obfuscated C Code Contest einen Wettbewerb um das un bersichtlichste C Programm sie he Abschnitt 1 12 Obfuscated C auf Seite 278 16 KAPITEL 1 PROGRAMMIEREN IN C C zustellen hnlich wie heutzutage Autos produziert werden Zwei Schlagw rter kamen auf Objektorientierung und Software Engineering Entkleidet man sie der merkantilen bertreibun gen bleibt immer noch ein brauchbarer Kern von Ideen brig Der Typbegriff wurde zur Klasse erweitert Eine Klasse ent h lt Variable und zugeh rige Funktionen die nun Methoden ge nannt werden Klassen k nnen im Gegensatz zum Typ vom Pro grammierer definiert werden Sie bilden eine Hierarchie wobei h here Klassen Eigenschaften an niedrigere vererben Klassen haben eine genau definierte Schnittstelle Interface zum Rest des Programms ihr Innenleben bleibt verborgen Was sie tun ist bekannt wie sie es tun geht niemanden etwas an Diese schar fe Trennung von Innen und Au en ist wesentlich f r den Klas senbegriff Was f r C Funktionsbibliotheken sind das sind f r C Klassenbibliotheken Die Programmierarbeit besteht zu ei nem gro e
253. etische Operatoren und mathematische Standard funktionen von hoher bekannter Genauigkeit e dynamische Langzahlarithmetik mit zugh rigen Standard funktionen e Rundungskontrolle bei der Ein und Ausgabe e Behandlung bestimmter Fehler z B berschreiten der In dexgrenzen e Bibliothek mit Routinen zur L sung von Standardproble men der numerischen Analysis Zusammen mit der Klassenbibliothek C XSC geht C in der Behandlung numerischer Aufgaben ber FORTRAN und andere Programmiersprachen hinaus 33Dieser Abschnitt ist die gek rzte bersetzung ei nes Aufsatzes 1992 von Dipl Math ANDREAS WIET HOFF Mitarbeiter des genannten Institutes siehe www uni karlsruhe de iam html language cxsc cxsc html 196 KAPITEL 1 PROGRAMMIEREN IN C C 1 7 3 2 Datentypen Operatoren und Funktionen C XSC stellt folgende einfache numerische Datentypen zur Ver f gung real interval complex cinterval complex interval samt den zugeh rigen arithmetischen und relationalen Opera toren und den mathematischen Standardfunktionen Alle vorde finierten arithmetischen Operatoren liefern Ergebnisse mit ei ner Genauigkeit von wenigstens einer Einheit der letzten Stelle Auf diese Weise sind sie maximal genau im Sinne des wissen schaftlichen 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 a
254. 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 Die ersten Zeilen enthalten Programmnamen Zweck Autor Datum Compiler Literatur und aehnliches Wi include lt stdio h gt int main x Dies ist eine eigene Kommentarzeile 80 KAPITEL 1 PROGRAMMIEREN IN C C puts Erste Zeile puts Zweite Zeile x Kommentar x x Kommentar x puts Dritte Zeile I puts Vierte Zeile Za 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 Systems in Englisch ausgegeben werden schreiben wir die Meldungen unserer Programme in Deutsch man sollte sie ohnedies mittels define Anweisungen irgend wo zusammenfassen so dass sie leicht ausgetauscht werden k n nen Damit sieht man sofort woher eine Meldung stammt Kom mentar schreiben wir wieder in Englisch da die Programmbei spiele 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 kos tet wenig Aufwand und kann viel helfen w hrend die Dokumen tation zum Programm nur zu oft ad calendas Graecas Sankt Nimmerleins Tag verschoben wird In C
255. fuehrt der das Programm beendet connect quitTimer SIGNAL timeout gApp SLOT quit Hauptprogramm 1 7 KLASSEN BIBLIOTHEKEN 209 int main int argc char xxargv d 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 F r das Hauptfenster werden ein neues Widget von der Widget Oberklasse QWidget abgeleitet das Beschriftung und Knopf erzeugt und das Signal clicked welches der Knopf bei Bet tigung aussendet mit dem klasseneigenen Slot tschuess verbunden Dieser Slot sendet das ebenfalls klasseneigene Si gnal neuerText aus das vorher mit dem Slot setText des Beschriftungsfeldes verbunden wurde Dieser Slot setzt seinem Namen gem den Text des Beschriftungsfeldes neu Gleich zeitig wird ein Timer erzeugt und gestartet der nach 1500 ms das Signal timeout aussendet welches wiederum mit dem Slot quit der Hauptapplikation verbunden wird Die Funkti on dieses Slots ergibt sich ebenfalls aus seinem Namen Dieses Basisprogra
256. g 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 sel ten 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 Zeichenfolgen in einem bestimmten sprachen spezifischen Format handelt Zum Speichern des Strings Alex ist ein Array of characters mit wenigstens f nf Elementen zu de klarieren char myname 5 In anderen Sprachen werden Strings anders dargestellt Ein String l sst sich am St ck verarbeiten 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 je den beliebigen Unsinn zulassen 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 nsch ten Typ umwandeln Ein gutes Programm vertraut Eingaben niemals blindlings sondern pr ft sie vor der weiteren Verarbei tung gr ndlich Ein Programmbeispiel dazu findet sich im Ab schnitt 1 11 7 2 Pointer auf Typ void xread c auf Seite 243 Merke Es gibt Arrays of characters die keine Strings sind n mlich solche die nicht mit dem ASCII Zei
257. ge 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 Beispiel fuer for Schleife 04 03 1993 define MAX 10 include lt stdio h gt int main int i for i 0 i lt MAX itt printf Der Schleifenzaehler spricht d n i return 0 Quelle 1 28 C Programm mit einfacher for Schleife Der Schleifenz hler i wird mit 0 initialisiert F r MAX ist e reits vom Compiler die Zahl 10 eingesetzt worden die Eintritts bedingung i lt 10 ist anfangs erf llt der Schleifenrumpf wird 128 KAPITEL 1 PROGRAMMIEREN IN C C ausgef hrt Dann wird der dritte Teil der for Zeile ausgef hrt n mlich der Schleifenz hler i um 1 erh ht und zur Bedingung i lt 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 for Schleife x Testen der for Schleife 04 03 1993 define MAX 10 include lt stdio h gt int sum int x int main inte ay J 1 for i 3 puts Anfang i lt j MAX i i sum i printf Der Schleifenzaehler spricht d d n i J T eh E A eet ee return i Za Funktion sum x x int sum int x TEN
258. geben wir den Modulus bei jedem Aufruf als Ar gument Da der Generator nur beim ersten Aufruf gestartet wer den soll deklarieren wir die Variable r als static initialisie ren sie mit null und mi brauchen sie als Flag f r den Genera torstart mittels srand Die Initialisierung wird nur einmal beim Programmaufruf ausgef hrt Danach hat r immer den je weils j ngsten Zufallswert der minimal 1 ist und negiert stets false 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 Rahmenprogramm zum Testen in PASCAL ge schrieben x Funktion zufallszahl c zur Erzeugung von Zufallszahlen MAX Zufallszahlen von 1 bis MOD x include lt time h gt Hine lide lt stdlib h gt int zufallszahl int m static int r 0 unsigned s BE ken 3 1 11 WEITERE C PROGRAMME 241 s unsigned time time_t zi 0 srand s r 1 rand mM return r Quelle 1 86 C Funktion zur Erzeugung einer Zufallszahl im Be reich von 1 bis MOD Die C Funktion gibt pro Aufruf eine Zufallszahl im Bereich von 1 bis zum Modulus zur ck 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
259. gegen die 1libX11 in usr X11R6 1ib und die libqt in usr lib dort automatisch gesucht LIB L usr X11R6 lib 1X11 lgt der verwendete C Compiler hier GNU C CPP g benoetigt wird neben dem Source Code das moc File all qhello cpp qhello moc CPP 0o ghello ghello cpp INC LIB moc File wird aus qhello h gewonnnen moc muss im PATH stehen ghello moc ghello h moc ghello h gt ghello moc 1 7 KLASSEN BIBLIOTHEKEN 207 Quelle 1 70 Makefile zu qhello cpp x Include File fuer ghello z Die Klasse HelloWidget erbt ihre Eigenschaften von der Klasse QWidget a HelloWidget public QWidget Q_OBJECT muss in jeder Klasse die Signals oder Slots implementiert stehen Q_OBJECT die Konstruktor Funktion ohne void public HelloWidget QWidget parent 0 const char xname ein Signal das diese Klasse aussendet signals void neuerText const char x Pointer fuer verwendete Widgets private QLabel xhelloLabel OPushButton soit Button OTimer xquitTimer ein Slot der spaeter mit quitButton verbunden wird private slots void tschuess Quelle 1 71 Include Datei zu qhello cpp x qhello cpp Beispiel fuer die Programmierung mit Qt include lt gapplication h gt benoetigt jedes Qt Programm include lt qwidget h gt fuer unser Hauptfenster include lt qlabel h gt fuer die Beschriftung include lt qpushbutton h gt f fuer den
260. gen Das sieht nach Arbeit aus Man braucht nicht in allen F llen alle Punkte zu ber cksichtigen aber ohne eine solche Dokumen tation l t sich ein Programm nicht zuverl ssig benutzen und weiterentwickeln Im Netz finden sich Werkzeuge die in Verbin dung mit dem Kommentar 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 h zeitig nicht erst wenn der Code fast fertig ist 1 10 3 Erstellen einer man Seite Die inhaltliche Gliederung einer man Seite wurde bereits im Ab schnitt 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 Verzeich nissen 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 224 KAPITEL 1 PROGRAMMIEREN IN C C e usr local man e usr share man e opt man In diesen Verzeichnissen finden sich fiir jede Sektion von 1 bis 9 bis zu vier Arten von Unterverzeichnissen catx e catx zZ e manx manx Z wobei f r x die Sektionsnummer einzusetzen ist Die Z Verzeichnisse enthalten die Dokumentationen komprimiert mit compress 1 unter LINUX mit GNU zip die bei
261. genau das festlegt was sich dort festlegen l t nicht mehr und nicht weniger Kontrollen und nderungen werden stets in einer bestimmten Stufe vor genommen Das Hauptprogramm main ist vergleichsweise trivial Nach ein bi chen Benutzerdialog werden in einer switch Anweisung die ausgew hlten Objekte erzeugt und deren Me thoden 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 e Bei einem abstrakten Datentyp ist das Innenleben von der Au enseite streng getrennt Black Box e Klassen sind in einer Programmiersprache formulierte Be schreibungen abstrakter Datentypen e Objekte sind Verwirklichungen von Klassen so wie Varia ble Verwirklichungen von Typen sind e Eine Klasse oder ein Objekt enth lt Daten data members und Methoden member functions 192 KAPITEL 1 PROGRAMMIEREN IN C C e Daten und Methoden sind ffentlich public gesch tzt protected oder privat Die Daten sind meist privat Min destens eine Methode mu ffentlich sein sonst n tzt die Klasse nicht viel e Aus Klassen k nnen Unterklassen abgeleitet werden die die ffentlichen und gesch tzten protected Daten und Me thoden erben Die Klassen bilden Hierarchien e Von einer abstrakten Klasse k nnen nur Unterklassen aber keine Objekte abgeleitet werden Meist in den oberen Etagen der Hierarchie a
262. genen Funktionsbibliothek Das Programm verwendet die Funktionen mwert und varianz die wir aus einer hausgemachten Funktionsbiblio thek namens libstat a entnehmen Der im Kommentar ge nannte Compileraufruf mit der Option L veranla t den Lin ker diese Bibliothek im Arbeits Verzeichnis zu suchen Die Funktionen sehen so aus double mwert x int x Int Jp AR double m for j 1 k 0 j lt x j k k x j m double k double x 46 KAPITEL 1 PROGRAMMIEREN IN C C return m Quelle 1 10 C Funktion Mittelwert ganzer Zahlen extern double mwert double varianz x int 3x7 Inte J double m s v m mwert x for j 1 s 0 j lt ae J s s x j m x x Jj m v s xx 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 Mit tels des Aufrufes ar r libstat a mwert o varianz o erzeugen wir die Funktionsbibliothek libstat a auf die mit der Compileroption lstat zugegriffen wird Der Vorteil der Bibliothek liegt darin da man sich nicht mit vielen einzelnen Funktionsfiles herumzuschlagen braucht sondern mit der Com pileroption gleich ein ganzes Biindel verwandter Funktionen er wischt In das Programm eingebunden werden nur die Funktio nen die wirklich ben tigt werden Merke Ein Archiv ist wed
263. gerufen wird 226 KAPITEL 1 PROGRAMMIEREN IN C C Der Name der Datei in der der Quellcode zu finden ist hat die Kennung c die meisten Programmierwerkzeuge erwarten das Die UNIX Compiler schreiben standardm ig das kompi lierte 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 Ausgabefi le 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 Zu n chst einige Begriffe zum Aufbau von Programmen Die kleinste Einheit die etwas bewirkt ist die Anwei sung Mehrere Anweisungen k nnen zu einem durch geschweif te Klammern zusammengefa ten Block vereinigt werden Nach au en wirkt dieser Block wie eine einzige Anweisung Der Block ist zugleich die kleinste Einheit f r den Geltungsbereich von Va riablen Mehrere Anweisungen oder Bl cke werden zu einer Funkti on zusammengefa t Die Funktion ist die kleinste kompilierba re Einheit Eine oder mehrere Funktionen k nnen in einer Da tei abgelegt sein Dem Compiler bergibt man im Minimum ei ne Datei die eine Funktion enth lt Mehrere Dateien hinwie derum k nnen ein vollst ndiges nach dem Kompilieren lauff higes Programm bilden Erinnern Sie sich an das Werkzeug make 1 Das Minimalprogramm in C und C besteht aus einer Funk tio
264. glich ist lie fert access 2 den Wert null zur ck der in einem C Programm zugleich die Bedeutung von logisch falsch FALSE hat und des halb in den i f Zeilen negiert wird Den Systemaufruf stat 2 finden wir ebenfalls in Sektion 2 Er ermittelt Dateiinformationen aus der Inode und hat die Syntax include lt sys types h gt include lt sys stat h gt int stat path buf char xpath struct stat obt Sein erstes Argument ist wieder der Dateiname das zwei te der Name eines Puffers zur Aufnahme einer Struk tur die die Informationen enth lt Diese Struktur vom Typ stat ist in der include Datei usr include sys stat h deklariert das seinerseits Bezug nimmt auf Deklarationen in usr include types h Auch einige Informationen wie S_IFREG sind in sys stat h definiert Die Zeitangaben werden wie im vorigen Abschnitt umgerechnet 1 2 PROGRAMMER S WORKBENCH 65 In UNIX Datei Systemen enth lt jede Datei am Anfang ei ne Magic Number die tiber die Art der Datei Auskunft gibt man magic Mittels des Systemaufrufs open 2 wird die frag liche Datei zum Lesen ge ffnet mittels 1seek 2 der Lesezei ger 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 x Informationen ueber eine Datei z define MEZ 3600 include lt
265. h eine eindeutige Schreibwei se int n 5 n printf 3d San n n gt on 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 Zuweisung w re als Gleichung unzul ssig bei der Addition spielt die Rei henfolge 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 dringend anzu raten die Reihenfolge einer Auswertung durch Klammern oder Einzelanweisungen zwingend vorzuschreiben und Ausdr cke zu vermeiden deren Wert von Vermutungen ber die Reihenfolge der Auswertung abh ngt 1 3 8 Anweisungen 1 3 8 1 Leere Anweisung Anweisungen statement haben eine Wirkung aber keinen Wert im Gegensatz zu Ausdr cken Die einfachste Anweisung ist die leere Anweisung also die Aufforderung an den Com puter 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 Spra chen findet sich daf r die Anweisung nop oder noop no operati on Ein Beispiel 1 3 BAUSTEINE EINES QUELLTEXTES
266. halt a Radius a a protected private double a X Vv double umfang double x double inhalt double x JI class Rechteck public Flaeche a x y 0 rein virtuelle Fkt double abgel double 0 konkr Klasse Constructor cin a double y double y public Flaeche abgel Laenge public Rechteck a b x y 0 void lesen cout cout Breites T return PI x x y return PI x x x y konkr Klasse cin o gt ay cin b 1 6 KLASSEN 187 u umfang a b inhalt a b H II protected double umfang double x double y return 2 x x y double inhalt double x double y return x y private double a b xX Y by 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 by class Kugel public Koerper abgel konkr Klasse public Kugel a x y z 0 Constructor void lesen cout Radius cin a f flaeche a a a v volumen a a 5 protected private double a X Y Z double flaeche double x double y double z return 2 x PI x x y z double volumen double x double y double z return 4 PI x Xxx yx Z 3 JI class Quader public Koerper abgel konkr
267. he F2 GNU FREE DOCUMENTATION LICENSE 355 same freedoms that the software does But this license is not li mited to software manuals it can be used for any textual work regardless of subject matter or whether it is published as a prin ted 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 me dium that contains a notice placed by the copyright holder say ing 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 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 con taining 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 rela tionship of the publishers or authors of the Document to the Document s 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
268. hen op void 68ff32e4 Pointer o Prozentzeichen Weiteres im Referenz Handbuch unter printf 3 oder scanf 3 L nge B ndigkeit Unterdr ckung f hrender Nullen Vorzeichenangabe k nnen festgelegt werden D 5 Include Dateien Die Standard Include Dateien enthalten in lesbarer Form Defi nitionen von Konstanten und Typen Deklarationen von Funk tionen 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 Gebr uch liche Include Dateien sind e ctype h Definition von Zeichenklassen conv 3 e curses h Bildschirmsteuerung curses 3 e errno h Fehlermeldungen des Systems errno 2 D 6 PR PROZESSOR ANWEISUNGEN 327 Pent Lh Steuerung des Dateizugriffs fent1 2 open 2 e malloc h Speicherallokierung malloc 3 e math h mathematische Funktionen 18943 SEE floor 3 e memory h Speicherfunktionen memory 3 e search h Suchfunktionen bsearch 3 e signal h Signalbehandlung signal 2 e stdio h Ein und Ausgabe printf 3 scanf 3 fopen 3 e string h Stringbehandlung string 3 e time h Zeitfunktionen ctime 3 e varargs h Argumentenliste variabler L nge vprint 3 e sys ioctl h Ein und Ausgabe ioctl 2 e sys stat h Zugriffsrechte chmod 2 mkdir 2 stat 2 e sys types h ve
269. hen Sicherheitsvorschrif ten 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 1990 44 S Postscript D A Curry Improving the Security of Your UNIX System ftp ftp ciw uni karlsruhe de pub docs net secur 1990 50 S Postscript Hilfe fiir UNIX System Verwalter mit Checkliste S Garfinkel G Spafford Practical Unix Internet Se curity O Reilly Sebastopol 1996 971 S Breit angelegte verst ndliche Einf hrung in Sicher heitsthemen 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 394 ANHANG H ZUM WEITERLESEN 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 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
270. hen 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 NICKEL ALGOL Praktikum 1964 aus gew hlt weil es mit Sicherheit nicht im Hinblick auf eine ber tragung nach C geschrieben worden ist Es geht um die Bestim mung des gr ten gemeinsamen Teilers mit dem Algorithmus 1 13 PORTIEREN VON PROGRAMMEN 283 von EUKLID Da wir die Aufgabe und den Algorithmus 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 Re ack READ A B IE A NOT LESS B THEN BEGIN X A ELSE BEGIN X B L2 R X Y ENTIER X Y TF R NOT EQUAL O THEN BEGIN X Y Y R Go TO L2 END PRINT A B Y GO TO Ll END Y S B gt END A END f 1 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 Kopf rechner noch eine Chance Eine Analyse des Quelltextes ergibt e Das Programm besteht aus einer Datei mit dem Hauptpro gramm war kaum anders m glich e Schl sselw rter st
271. her T 89 cdotprecision 199 char 87 character 280 cidotprecision 199 cimatrix 196 cinterval 196 civector 196 cmatrix 196 complex 196 const 83 cvector 196 dotprecision 199 double 86 einfacher Typ 85 erkl ren cdecl 84 externer T 106 float 86 ganze Zahl 85 Gleitkommazahl 86 idotprecision 199 imatrix 196 int 85 interval 196 ivector 196 long 85 long double 86 Pointer 94 real 196 rmatrix 196 rvector 196 short 85 Struktur 91 T eines Operanden 82 83 411 Typumwandlung 108 119 231 Union 93 unsigned 85 void 89 volatile 83 zusammengesetzter T 90 typedef C 103 types h 64 berladung 110 bersichtlichkeit 21 214 230 Uhr 59 Umgehung 21 union C 93 unsigned C 85 Unterprogramm 57 utime 75 utmp 76 varargs 153 Variable globale V 105 lokale V 105 register V 105 Vereinbarung 82 Vererbung Klassen 184 Vergleich 112 Version 21 Versionskontrolle 48 Verzweigung C 124 void C 89 volatile C 83 Vorrang C 120 Waterfall approach 23 Wert 82 Wertebereich 83 Wert bergabe 138 while Schleife C 125 412 SACHVERZEICHNIS who 76 Widget 176 205 Windows Microsoft 205 woody 375 Wort reserviertes 81 Wortsymbol 81 write 116 write 2 172 xdb 40 74 Xlib 176 xstr 48 Xt 176 X Window System 205 Zahl ganze Z 85 Gleitkommazahl 86 komplexe Z 17 287 Primzahl 210 246 Pseudo Zufallszahl 242 Zufallszahl 237 Zahlensystem 291 Zeichensatz ASCII
272. hes Standardwerk zum Schreiben von Websei ten 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 fiir Clients und Server der Netzdienste Sicherheit Newsgruppen comp security comp virus sci crypt alt security alt comp virus de comp security RFC 1244 FYI 8 Site Security Handbook ftp ftp nic de pub rfc rfcl244 txt 1991 101 S ASCII Sicherheits Ratgeber fiir Internet Benutzer 393 Department of Defense Trusted Computer Systems Evaluation Criteria Orange Book ftp ftp ciw uni karlsruhe de pub docs net secur 1985 120 S ASCII Abgel st durch Federal Criteria for Information Technology Security ftp ftp ciw uni karlsruhe de pub docs net secur ftp ftp ciw uni karlsruhe de pub docs net secur 1992 2 B nde mit zusammen 500 S Postscript Die amtlichen amerikanisc
273. hould 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 WAR RANTY for details type show w This is free software and you are welcome to redis tribute it under certain conditions 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 program mer 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 354 ANHANG F GNU LIZENZEN Gnomovision which makes passes at compilers written by James Hacker lt signature of Ty Coon gt 1 April 1989 Ty Coon President of Vice This General Public License does not permit incorporating your program into propriet
274. ht gemischt werden d rfen Der gleiche Fall liegt auch in der Linguistik vor wenn ber W rter gespro chen wird Vergleichen Sie die beiden sinnvollen S tze e Kaffee ist ein Getr nk e Kaffee ist ein Substantiv Im ersten Satz ist die Fl ssigkeit gemeint im zweiten das Wort was gelegentlich durch Kursivschreibung oder G nsef chen an gedeutet wird Der erste Satz ist einfaches Deutsch der zweite geh rt einer Metasprache an in der Aussagen ber die deut sche Sprache vorgenommen werden verwirrenderweise mit den selben 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 Dekla ration schafft Klarheit 1 3 BAUSTEINE EINES QUELLTEXTES 103 In C Programmen wird gern von Pointern Gebrauch gemacht In der C Bibel von BRIAN W KERNIGHAN und DENNIS M RIT CHIE ist ihnen daher ein ganzes gut lesbares Kapitel gewidmet 1 3 6 3 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 bereits ander weitig belegten Namen bereinstimmen typedef erzeugt kei nen neuen Datentyp sondern veranlasst den Compiler im Pro gramm den neuen Namen w rtlich durch seine Definition zu er setzen was man zur Pr fung auch von Hand machen kann Der neue Typname ist ein S
275. i 1 32 Eindeutigkeit 289 Eingabe 116 202 Eingang Schleife 125 Endlichkeit 289 Entscheidbarkeit 290 enum C 94 envp 63 405 etch 376 Euro 375 exit 2 129 Exponent 86 Extended Scientific Computing 195 extern C 105 106 280 77 33 90 33 fclose 117 fentl h 64 Fehler Denkfehler 40 Fehlerfreiheit 21 230 Fehlermeldung 39 Grammatik F 39 Laufzeit F 39 logischer F 40 Modell F 40 semantischer F 40 Syntax F 39 Zaunpfahl F 129 Flag Variable 264 float C 86 Flussdiagramm 29 fopen 117 for Schleife C 127 fork 69 FORM Element 272 Formatstring 157 FORTRAN 11 81 Fortsetzungszeile C 76 fprintf 75 fputs 117 free 3 258 Freiburger Code 11 Funktion Stringfunktion 172 Funktion C 406 Array von Funktionspointern 137 Bibliothek 43 169 Definition 136 Einsprungadresse 97 Funktion 136 226 grafische F 176 Input Output F 172 mathematische F 174 Pointer auf F 137 Prototyp 136 Speicherklasse 105 Standardfunktion 57 171 321 virtuelle F 184 Xlib F 265 gcc 34 gdb 40 Geltungsbereich 106 get 55 get HTML 272 gets 3 172 getut 76 Gleichung 108 gmtime 59 gnats 56 GNU Projekt 38 GNU Free Documentation License 354 GNU General Public License 345 goto C 129 gprof 42 Grafik 251 gzip 1 223 HASKELL 8 Hexadezimalsystem 291 HP SoftBench 56 huge Speichermodell 179 SACHVERZEICHNIS IEEE Std 1063 1987 222 if C 124 if else C 124 Inc
276. ichbaren Fehlerfreiheit die bersichtlichkeit Erst wenn ein Programm sauber l uft denkt man ber eine Optimierung nach Optimieren hei t schneller machen und Speicher einsparen sowohl beim Code wie auch zur Laufzeit Diese beiden Ziele widersprechen sich manch mal Im folgenden findet man einige Hinweise die teils allge mein teils nur f r C gelten Die optimierende Compiler Option 0O 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 geschachtel ten die innersten Dort sollte nur das Allernotwendigste stehen 1 11 WEITERE C PROGRAMME 231 Bedingungen sollten so einfach wie m glich formuliert sein Mehrfache Bedingungen sollten darauf untersucht werden ob sie durch einfache ersetzt werden k nnen Schleifen sollten m g lichst dadurch beendet werden da die Kontrollvariable den Wert Null und nicht irgendeinen anderen Wert erreicht Kon trollvariable 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 ver bunden wird die Auswertung nach Erkennen des ersten richti gen Gliedes abgebrochen Zweckm ig stellt man das Glied das am h ufigsten richtig ist an den
277. ie indisch arabische Schreibweise 1617 JOHN NAPIER erfindet die Rechenknochen Napier s Bones 1623 Erste mechanische Rechenmaschine mit Zehner bertragung und Multiplikation von WILHELM SCHICKARD T bingen 1642 Rechenmaschine von BLAISE PASCAL Paris f r kaufm nnische Rechnungen seines Vaters 1674 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 1714 HENRY MILL erh lt ein Patent auf eine Schreibmaschine 1801 JOSEPH MARIE JACQUARD erfindet die Lochkarte und steuert Webst hle damit 1821 CHARLES BABBAGE stellt der Royal Astronomical Society eine programmierbare mechanische Rechenmaschine vor die jedoch keinen wirtschaftlichen Erfolg hat Er denkt auch an 365 366 1840 1847 1861 1873 1876 1877 1885 1890 1894 1895 1896 1898 1900 1910 1918 1924 1930 1932 1937 1938 ANHANG G ZEITTAFEL das Spielen von Schach oder Tic tac toe auf Maschinen SAMUEL FINLEY BREEZE 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
278. iegen zwischen diesen beiden Grenzf llen 8Im 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 1 13 PORTIEREN VON PROGRAMMEN 281 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 n ge der Namen Annahmen ber die Reihenfolge der Auswertung von Aus dr cken Funktionsargumenten oder Nebeneffekten z B bei printf 3 Annahmen ber die Anordnung der Daten im Arbeitsspei cher Annahmen tiber die Anzahl der signifikanten Zeichen von Namen Annahmen ber die automatische Initialisierung von Va riablen den Gebrauch von stillschweigenden automatischen Ty pumwandlungen zum Beispiel von long nach int unter der Annahme da 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 Zuweisungen von Pointerwerten an int oder long Variable die Annahme einen Pointer dereferenzieren zu k nnen der nicht richtig auf eine Datengrenze ausgerichtet ist Ali gnment die Annahme da Gro und Kleinbuchstaben unterschie den werden die Annahme da der Typ char vorzeichenbehaftet oder vorz
279. if p t n gt ende ende 3 n 1 x Berechnung der Haeufigkeit in den Klassen g ende 10 xxh 1 xx h 1 0 j 1 k 0 for i 0 i lt n itt if x p i gt g x xh j 9 e e h 1 45 i k k i j g ende 10 x xh j oO ee Se E ee TIL ede x Berechnung der Differenz benachbarter Primzahlen x for i 1 i lt n i dp x p i x p i 1 x d dp if dp gt dmax 4 dmax dp dl x p i d2 x p i 1 time amp zeit2 x achtspaltige Ausgabe auf stdout printf tPrimzahlen bis lu n n ende eS r n 1 8 q Pr for i 0 i lt j i 8 printf tt6lu tS 6lu tse6lu ts 6lu tS6lu ts6lu t 6lu 250 KAPITEL 1 PROGRAMMIEREN IN C C t36lu n q q 1 q 2 FH x q 4 q t5 x q 6 e LEE q 8 if r 0 printf NEN for i 0 i lt r i x letzte Zeile x printf 6lu t x q ti puts printf n tGesamtzahl Zu n n n 1 for i 1 i lt 10 itt printf tZwischen 6lu und 6lu gibt es 6u Primzahlen n x h i 1 hti ht 1 i puts un printf tDifferenz 3d kommt 6u mal vor n 1 d 1 for i 2 i lt dmax i 2 printf tDifferenz 3d kommt 6u mal vor n i d i printf n tGroesste Differenz lu kommt erstmals bei lu und lu vor n dmax dqd2 d1 time amp zeit3 prin
280. ig vorkommenden Fall dass die Anforderungen an das Programm zu Beginn noch verschwommen sind ist es zweck m ig m glichst rasch ein lauff higes Grundger st ein Skelett zu haben Mit diesem kann man dann spielen und Erfahrun gen 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 ausgebaut die datennahen Funktionen schreiben vorl ufig nur ihren Namen auf den Bildschirm Von einem menugesteuerten Vokabeltrainer beispielsweise schreibt man zun chst das Menusystem 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 Gedan ken ber die Datenstruktur Steht der Prototyp nimmt man den Datenaustausch zwischen den Funktionen hinzu Parame ter bergabe und r ckgabe immer noch mit Bildschirmmeldun gen anstelle der eigentlichen Arbeit Funktioniert auch das wie gew nscht f llt man eine Funktion nach der anderen mit Code Diese Vorgehensweise lenkt die Entwicklung zu einem m g lichst fr hen Zeitpunkt in die gew nschte Richtung Bei einem kommerziellen Auftrag bezieht sie den Auftraggeber in die Ent wicklung 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 Prototyp
281. ik 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 31 em em em Grafik 26 32 cc sub sub Grafik 298 B 1 EBCDIC ASCH ROMANS IBM PC 299 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 31 37 ius us us cur down 32 40 ds Space space space 33 41 sos 34 42 fs 7 35 43 36 44 byp 37 45 If Jo Jo 38 46 etb amp amp amp 39 47 esc i j 40 50 41 51 42 52 sm S S S 43 53 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 S 59 73 60 74 dc4 lt lt lt 61 75 nak 62 76 gt gt gt 63 77 sub 2 64 100 space 65 101 A A A 66 102 B B B 300 ANHANG B ZEICHENS TZE 67 103 C C C 68 104 D D D 69 105 E E E 70 106 F F F 71 107 G G G 72 110 e H H H 73 111 I I I 74 112 J J J 75 113 K K K 76 114 lt L L L 77 115 M M M 78 116 N N N 79 117 O O 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 U U U 86 126 i 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 95 137 8 96 140 i i f 97 141 a a a 98 1
282. iligen Verzeichnis 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 Eine Suche nach dem Begriff ti me ergab 43 Seiten von at 1 bis xshrealtime Die Zu sammenstellung geh rt zur Single UNIX Specification und enth lt nicht die Seiten von zus tzlichen Programmen wie sendmail l In der GNU Welt ist f r online Hilfen das Texinfo Format ge br uchlich das mittels des Kommandos info 1 gelesen wird Einzelheiten am besten im WWW Damit kommen wir zu ei nem dritten Weg f r online Dokumentationen n mlich HTML Seiten die mit einem WWW Browser gelesen werden Trotz der erweiterten M glichkeiten Unterteilung eines umfangreichen Themas Hyperlinks Grafik dieser neueren Formate sind die d rren man Seiten immer noch am weitesten verbreitet Inhalt lich sind sie den Hilfen anderer Betriebssysteme ohnehin haus hoch 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 Programm name 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 auf
283. ilmen 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 h 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 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 72 368 1954 1955 1956 1957 1958 1959 ANHANG G ZEITTAFEL Remington 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 Festpla
284. in 161 C Programm Fakulta ten 166 Assemblerfunktion Addition1 168 C Programm Stringverarbeitung 174 C Programm Mathematische Funktionen 175 C Programm Hallo Welt 181 Xvi Programme und andere Quellen 1 63 C Programm Umrechnung UTC MEZ 184 1 64 C Programm Geometrische Formen 190 1 65 C XSC Funktion defect 200 1 66 C XSC Programm einfacher Genauigkeit 201 1 67 C XSC Programm mehrfacher Genauigkeit 201 1 68 C XSC Programm mit Ein und Ausgabe 202 1 69 C XSC Programm Intervall Newton Verfahren 204 1 70 Makefile zu ghellocpp 206 1 71 Include Datei zu ghello cpp 207 1 72 C Programm ghello cpp 209 1 73 C Programm Primzahlen 212 1 74 Include Datei usr include stdio h 217 1 75 C Programm Umrechnung Zahlenbasis 221 1 76 C Programm minimal 226 1 77 C Programm einfachst 227 1 78 C Programm einfach 227 1 79 C Programm fortgeschritten 228 1 80 C Programm Variante 228 1 81 C Programm Eingabe 229 1 82 C Programm Dateiputzete 234 1 83 C Programm curses 6 236 1 84 C Programm Zufallszahlen 238 1 85 C Programm Zufallszahlen mit Funktion 240 1 86 C Funktion Zufallszahlen 241 1 87 PASCAL Programm Zufalls
285. in einer Zeile am Anfang Die im Programm vorgesehene Grenze MAX 1023 ist noch nicht die durch das Speichersegment bestimmte Grenze sondern willk r lich Irgendwann erheben sich Zweifel am Sinn gro er Zahlen Selbst als Tapetenmuster wirken sie etwas eint nig 1 4 9 Memo Funktionen e C Programme sind aus gleichberechtigten Funktionen auf gebaut Zu diesen geh rt auch main e Eine Funktion bernimmt bei ihrem Aufruf einen festge legten 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 elektrischen Steckverbindung e Bei der Parameter bergabe by value arbeitet die Funkti on mit Kopien der bergebenen Parameter kann also die Originalwerte nicht ver ndern e Bei der Parameter bergabe by reference erf hrt die Funk tion die Adressen Pointer der Originalwerte und kann die se ver ndern Das ist gef hrlicher aber manchmal gewollt Beispiel scanf e Auch die Funktion main kann Argumente bernehmen und zwar aus der Kommandozeile Die Argumente stehen in einem Array of Strings Argumentvektor 1 5 FUNKTIONS BIBLIOTHEKEN 169 e Es gibt auch Funktionen wie printf die eine von Auf ruf zu Aufruf wechselnde Anzahl von Argumenten ber nehmen Der Mechanismus ist an einige Voraussetzungen gebunden e Eine Funktion gibt keinen oder genau einen Wert als Er gebnis an die aufrufende F
286. inal versions of these Invariant Sections You may in clude 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 Do cument except as expressly provided for under this license Any other attempt to copy modify sublicense or distribute the Docu ment 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 termina ted so long as such parties remain in full compliance 10 FUTURE REVISIONS OF THIS LICENSE F2 GNU FREE DOCUMENTATION LICENSE 363 The Free Software Foundation may publish new revised ver sions of the GNU Free Documentation 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 c
287. ing ist sicher nicht f r alle Programmierauf gaben 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 Pa pier auf zwei Dimensionen Es ist unm glich ein umfangreiches BReal programmers don t draw flowcharts 1 1 GRUNDBEGRIFFE 29 Bedingung Anweisung 1 Anweisung 2 Anweisung 4 Anweisung 3 Abb 1 1 Flussdiagramm einer if else Verzweigung Programm durch eine einzige halbwegs berschaubare Grafik zu beschreiben Flussdiagramme flow chart auch Blockdiagramme ge nannt sollen die Abl ufe innerhalb 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 Pro grammierer nicht an diese Reihenfolge Zum Teil ersetzt eine gu te typografische Gestaltung der Programmquelle auch ein Fluss diagramm w hrend das Umgekehrte nicht gilt Ein Flussdia gramm ist nicht mit einem Syntaxdiagramm zu verwechseln le sen Sie die beiden entsprechenden Abbildungen die die if
288. inge vorbereitet So wird zum Beispiel sendmail 1 durch den Aufruf des mitgelieferten Shellskripts Build erzeugt Das Skript configure erlaubt oft die Option prefix DIR wobei DIR das Verzeichnis ist in dem das ganze Ger del ein gerichtet werden soll defaultm ig meist usr local aber manchmal besser usr oder opt Da von configure alles Weitere abh ngt sollte man sich die zugeh rige Protokoll Datei config log ansehen auch wenn anscheinend keine Probleme aufgetreten sind Statt make clean kann man auch make distclean versu chen das r umt noch gr ndlicher 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 Fehlerfreiheit eines Programmes festzu stellen 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 jeweiligen 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 1int ist das bes te Werkzeug zu ihrer Entdeckung wihle statt while w re ein einfacher Syntaxfehler Fehlende oder unpaarige Klammern sind auch beliebt deshalb enth lt der vi 1 eine Funktion zur Klam merpr fung Unzul ssige Operationen mit Pointern sind eben falls an der Tagesordnung Geht es um Texte
289. inter C Typ als String define MAXLAENGE 200 x max Laenge der Eingabe include lt string h gt int atoi Za Standard C Bibliothek x long atol Ja Standard C Bibliothek double atof x Standard C Bibliothek x int xread p typ void p char typ char input MAXLAENGE int rwert 0 if gets input NULL switch typ case cers x Typ char a7 strcpy char e Mt input break case III Za Typ int case s Za Typ short x x int x p atoi input break case 1l x Typ long 246 KAPITEL 1 PROGRAMMIEREN IN C C long p atol input break case d Typ double case f Za Typ float double p atof input break default puts xread Unbekannter Typ rwert 1 else puts xread Fehler bei Eingabe rwert 2 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 3 call by referen ce auf die einzulesende Variable als zweites Argument den ge w nschten Typ in Form eines Strings Auf eine wechselnde An zahl von Argumenten verzichten wir hier Falls wir nicht f r jeden einzulesenden Typ eine eigene Funk tion schreiben wollen mu xread einen Pointer auf einen be liebigen Typ sprich void bernehmen Erst nach Auswertung des zweiten Argumentes wei xread auf was f r einen Typ der Pointer zeigt
290. ise gr nden sich Verfahren zur Fehler korrektur 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 cidotprecisior Zwischenergebnisse eines Skalarproduktes k nnen ohne jeden Rundungsfehler in einer Dotprecision Variablen errechnet und gespeichert werden Die folgende Funktion berechnet eine ma ximal 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 i b i accu accumulate accu A i x INCL i rnd accu return INCL 200 KAPITEL 1 PROGRAMMIEREN IN C C Quelle 1 65 C XSC Funktion defect zur Defekteinschlie Bung In obigem Beispiel berechnet die Funktion accumulate die Summe a gt Ara 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 Akku mulator maximal genau auf das Standard Intervall INCL i ge rundet Auf diese Weise sind die Grenzen von INCL i entweder gleich oder zwei
291. its auf 3 Arrays bestehend aus je 4 Ganz zahlen Gespeichert sind 12 Ganzzahlen die Pointer 1 Ordnung sind nicht gespeichert Da die Elemente allesamt gleich gro sind gleich viele Bytes lang hindert uns nichts daran das Ele ment a 1 2 n mlich die Zahl 7 als Element a 0 6 aufzu fassen Die gespeicherten Werte lassen sich auch als eindimen sionales 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 Behauptungen nachzuvollziehen eler 5 a 1 elle all a 2 1 8 a 1 1 a 1 1 6 Im Programm 1 16 zeit c auf Seite 61 haben wir ein Ar ray 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 Wie ee E 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 Wert Variable x x ptag xptag 0 ptag 0 0 5 ptag 0 1 ptag 0 1 o Pointer 2 Pointer 1 Sp ptag gt ptag0 S lt ptag 0 1 o 1 3 BAUSTEINE EINES QUELLTEXTES 101
292. itt vollzieht der Linker Der Anfang des ausf hrbaren Programmes hallo exe sieht nicht besser aus als vorher der Umfang des Programmfiles ist gr er geworden 4d5a 0000 0400 0000 2000 2700 ffff 0000 6007 0000 5400 0000 Od0a 7374 7562 Zepp 2067 656e 6572 6174 6564 2066 726f 6d20 7374 1562 2861 736d 2062 7929 646a 6173 6d2c 206f 6e20 5475 6520 4361 6e20 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 ei ner problemangepassten maschinenfernen Sprache SQL Die Aufgabe sei die Abfrage einer Datenbank die ihre Daten in Form von Tabellen mit Spalten und Zeilen h lt 2Genauer Das R ck bersetzen ist m glich das Ergebnis je doch praktisch unbrauchbar wenn es um mehr als triviale Pro gramme geht 1 1 GRUNDBEGRIFFE 7 select nachname vorname telefon from mitarbeiter where wohnort Karlsruhe order by nachname vorname Die Datenbank soll bittesch n ein Liste mit Nachnamen Vor namen und Telefonnummer aus der Tabelle mitarbeiter her ausziehen und dabei nur die Mitarbeiter ber cksichtigen deren 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 Aufgabe kaum formulieren Eine Programmiersprache wird von zwei Seiten her ent wickelt Von
293. k ButtonPressMask x main event reading loop x while 1 XNextEvent mydisplay amp myevent x read next event switch myevent type process keyboard input gt case KeyPress i XLookupString amp myevent text 10 amp mykey 0 if i 1 amp amp text 0 Toi text 0 o XFreeGC mydisplay mygcl XFreeGC mydisplay mygcl2 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 window mywinl XClearWindow mydisplay mywinl XSetFont mydisplay mygcl XLoadFont mydisplay fgb 13 XDrawImageString mydisplay mywinl mygcl 240 400 SUBWIN strlen SUBWIN XDrawImageString mydisplay mywinl mygcl 240 420 CLEAR strlen CLEAR 1 11 WEITERE C PROGRAMME 269 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 n text 0 NI amp amp myevent xkey window mywinl if win 2 newwin
294. k i gibt den Wert von i zur ck und erh ht ihn dann um eins Der Ausdruck i 110 KAPITEL 1 PROGRAMMIEREN IN C C erh ht den Wert von i um eins und gibt dann den erh hten Wert zur ck F r das Dekrement gilt das Entsprechende Der kompi lierte Code ist effektiver als der des quivalenten Ausdrucks i i 1 Spielt es vom Programm her keine Rolle ob man den Pr fix oder den Postfix verwendet ist der Pr fix i unter Umst nden schneller und daher zu bevorzugen Ferner gibt es noch eine ab gek rzte Schreibweise f r h ufig wiederkehrende Operationen TS ay Ry Der Ausdruck y X weist die Summe der beiden Operanden dem linken Operanden zu und ist somit gleichbedeutend mit dem Ausdruck y y tx Entsprechendes gilt f r die anderen Abk rzungen Die ausf hr liche Schreibweise bleibt weiterhin erlaubt Die Division f r ganze Zahlen ist eine andere Operation als f r Gleitkommazahlen die brigen Operationen auch nur f llt es da nicht auf In manchen Programmiersprachen werden fol gerichtig unterschiedliche Operatoren verwendet in C nicht Der Compiler entnimmt aus dem Zusammenhang welche Division gemeint ist Diese Mehrfachverwendung eines Operators wird Uberladung genannt und spielt in objektorientierten Sprachen wie C eine Rolle In FORTRAN das den komplexen Zahlen typ kennt gelten die ar thmetischen Operatoren auch f r diesen Vorstellbar ist ebenso eine Addition Verkettung von Strings
295. k 1993 413 S S Lippman J Lajoie C Primer Addison Wesley Boston 3 Aufl 1998 1296 S 389 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 AN SI 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 Ubungsaufgaben K Schmaranz Softwareentwicklung in C Springer Berlin Heidelberg 2002 400 S K Schmaranz Softwareentwicklung in C Springer Berlin Heidelberg 2003 570 S B Stroustrup The C Programming Language bzw
296. kommt eine weitere Art von Kommentar hinzu Er beginnt mit zwei Schr gstrichen und endet mit dem Zeilenwech sel weshalb er Zeilenkommentar genannt wird Dieser Kom mentar darf innerhalb des oben genannten Kommentars vor kommen Die umgekehrte Folge ist auch zul ssig aber selten anzutreffen 1 3 4 Namen Namen identifier bezeichnen Funktionen Konstanten Varia ble Makros oder Sprungmarken Labels Sie m ssen mit einem Buchstaben oder einem Unterstrich underscore beginnen Be nutzereigene Namen sollten immer mit einem Buchstaben an 21Real programmers don t comment their code 1 3 BAUSTEINE EINES QUELLTEXTES 81 fangen 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 Bestriebssystem gegeben sein und l sst sich daher nicht allge mein angeben Ab 255 Zeichen wird es kritisch Signifikant sind mindestens die ersten sieben Zeichen nach ANSI die ersten ein unddrei ig Verwendet man Funktionen fremder Herkunft soll te man mit nur sechs signifikanten Zeichen rechnen sowie damit dass Gro und Kleinbuchstaben nicht unterschieden werden 1 3 5 Schl sselw rter In C C wie in jeder anderen Programmiersprache haben be stimmte W rter eine besondere Bedeutung beispiels
297. l In einem C Programm stehen alle Funktio nen einschlie lich main auf gleicher Stufe Das ist ein wesent licher Unterschied zu PASCAL 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 aufrufende 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 aus f hrliche Prototypen vor Beginn der Funktion main zu de klarieren x Beispiel fuer Funktionsprototyp x float multipl float x float y Prototyp x es reicht auch float multipl float float x x frueher nach K R float multipl x int Matric float a b Z 1 4 FUNKTIONEN 137 z multipl a b x Funktionsaufruf gt float multipl float x float y x F definition x return x x y Quelle 1 33 C Programm mit Funktionsprototyp Durch die Angabe der Typen der Funktion und ihrer Argu mente zu Beginn des Programms herrscht sofort Klarheit Die Namen der Parameter sind unerheblich Anzahl Typ und Rei henfolge sind wesentlich Noch
298. l liest Information aus File System fsync schreibt File aus Arbeitsspeicher auf Platte g taccess getacl ermittelt Zugriffsrechte ermittelt Zugriffsrechte getcontext ermittelt Kontext eines Prozesses getdirentriermittelt Verzeichnis Eintr ge getgroups ermittelt Gruppenrechte eines Prozesses gethostname ermittelt Namen des Systems 314 getitimer getpid 315 setzt oder liest Intervall Uhr liest Prozess ID gettimeofdayermittelt Zeit getuid ioctl kill link lockf lseek mkdir mknod mount msgctl nice open pause pipe prealloc Ppror l read readlink rename rmdir rtprio semctl setgrp setuid signal stat statfs symlink sync szsconf time times truncate umask umount unlink ustat liest User ID des aufrufenden Prozesses VO Steuerung schickt Signal an einen Prozess linkt ein File setzt Semaphore und Record Sperren bewegt Schreiblesezeiger in einem File erzeugt Verzeichnis erzeugt File h ngt File System in File Hierarchie ein Interprozess Kommunikation ndert die Priorit t eines Prozesses ffnet File zum Lesen oder Schreiben suspendiert Prozess bis zum Empfang eines Signals erzeugt eine Pipe reserviert Arbeitsspeicher 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 Prozesse
299. l tern r bedingte Bewertung r bin r Zuweisung x SS r bin r zusammengesetzte gt gt lt lt Zuweisung amp y es throw un r Ausnahmebehandlung l Komma Operator D 3 Standardfunktionen Folgende Standardfunktionen oder makros sind gebr uchlich e Pufferbehandlung memchr sucht Zeichen im Puffer memcmp vergleicht Zeichen mit Pufferinhalt memcpy kopiert Zeichen in Puffern memset setzt Puffer auf bestimmtes Zeichen e Zeichenbehandlung isalnun pr ft Zeichen ob alphanumerisch isalpha pr ft Zeichen ob Buchstabe 322 ANHANG D C LEXIKON 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 Kleinbuchsta ben um toupper wandelt Kleinbuchstaben in Gro buchsta ben um e Datenumwandlung atof wandelt String in double Wert um atoi wandelt String in int Wert um atol wandelt String in long Wert um strtod wandelt String in double Wert um strtol wandelt String in long Wert um strtoul wandelt Stringin unsigned long Wert um e Filebehandlung remove l scht File rename ndert Namen eines Files e Ein
300. l tritt immer auf wenn auf beiden Seiten eines Operanden Operatoren desselben Ran ges 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 Zuweisung 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 Im Beispiel a zs PD zs CG wird der Wert c der Variablen b zugewiesen und dann das Ergeb nis dieser Zuweisung der Wert b der Variablen a Die Reihenfol ge 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 320 sind alle Operatoren von C C mit Rang und Assoziativit t aufgelistet Bei Funktionsaufrufen ist ungewiss in welcher Reihenfolge etwaige Argumente ausgewertet werden Im Beispiel 122 KAPITEL 1 PROGRAMMIEREN IN C C int Mein Be ner sd d n n n x n 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 durc
301. lbst 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 Skriptspra chen 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 cdecl das Typdeklarationen in einfaches Englisch bersetzt F ttert man dem Programm folgende Dekla ration char x 3 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 cdecl hatte ich die Antwort nicht gefunden 24Real programmers don t worry about types 1 3 BAUSTEINE EINES QUELLTEXTES 85 1 3 6 3 Einfache Typen In jeder Programmiersprache gibt es Grundtypen aus denen al le h heren Typen zusammengesetzt werden In C C sind dies ganze Zahlen Gleitkommazahlen und Zeichen Ganze Zahlen In C C gibt es ganze Zahlen mit oder ohne Vorzeichen sowie in halber einfacher oder doppelter L nge e int ganze Zahl mit Vorzeichen e unsigned int ganze Zahl ohne Vorzeichen e short kurze ganze Zahl mit Vorzeichen e unsigned short kurze ganze Zahl ohne Vorzeichen e long ganze Zahl doppelter L nge mit Vorzeichen e unsigned long ganze Zahl doppelter L nge ohne
302. le short Typ Ganzzahl halber L nge signed Typzusatz zu Ganzzahl oder Zeichen static Speicherklasse struct Strukturtyp typedef Definition eines benutzereigenen Typs union Typ Union unsigned Typzusatz zu Ganzzahl oder Zeichen void leerer Typ volatile Typattribut neu in ANSI C e Schleifen und Bedingungen Kontrollanweisungen 317 318 ANHANG D C LEXIKON 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 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 Uberladen von Operatoren private Deklaration von Klassenmitgliedern protected Deklaration von Klassenmitgliedern public Deklaration von Klassenmitgliedern template Deklaration eines Templates Klasse this Pointer auf Objekt throw Ausnahmebehandlung try Ausnahmebehandlung virtual D
303. le der zu beweisenden Aussage bereits zur Voraussetzung hat Bei einer Rekursion hingegen e wiederholt sich die Ausgangslage nie e wird eine Abbruchbedingung nach endlich vielen Schritten erf llt d h die Rekursionstiefe ist begrenzt In dem Buch von ROBERT SEDGEWICK findet sich N heres zu diesem Thema mit Programmbeispielen Im ersten Band der In formatik 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 x Groesster gemeinsamer Teiler Euklid rekursiv x x Compileraufruf cc o ggtr ggtr c x include lt stdio h gt int ggt int main int argc char xargv 160 KAPITEL 1 PROGRAMMIEREN IN C C int Xj y sscanf argv 1 d amp x sscanf argv 2 d amp y printf Der GGT von td und d ist d n x y ggt x y return OF x Funktion ggt xy 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 Ver wendung der Bedingten Bewertung interessant die den Code
304. leraufruf cc o essh cssh c zi int main int argc char xargv int xX y3 sscanf argv 1 d amp x sscant argv 2 sd amp y printf 3d x 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 ge raten ist Die Parameter bergabe 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 Verwen det man vorgegebene Bibliotheken so sind diese manchmal in einer anderen Programmiersprache verfa t Dann hat man sich 1 4 FUNKTIONEN 151 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 Pa rameter oder Argumente bernehmen kann und zwar aus der Kommandozeile beim Aufruf des Programms Sie kennen das von vielen UNIX Kommandos die nichts anderes als C Programme sind Der Mechanismus ist stets derselbe Die Argumente getrennt durch Spaces oder hnliches werden in ein Array of Strings mit dem Namen argv Argumentvektor gestellt Gleichzeitig z hlt ein Argumentz hler argc die Anzahl der bergebenen Argumente wobei der Funktionsname selbst das erste Argu ment Index 0 ist Bei
305. lgt in gewohnter Wei se die Funktion hier printi Ihre Argumentenliste hei t va_alist und ist vom Typ va del ohne Semikolon Innerhalb der Funktion brauchen wir einen Pointer pvar auf die Argumen te dieser ist vom Typ va_list nicht zu verwechseln mit der Argumentenliste va_alist Die weiteren Variablen sind unver bindlich Zu Beginn der Arbeit mu das Makro va_start pvar auf gerufen werden Es initialisiert den Pointer pvar mit dem An fang der Argumentenliste Am Ende der Arbeit mu entspre chend mit dem Makro ua end pvar aufger umt werden Das Makro va_arg pvar type gibt das Argument zu r 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 format die Adresse des Format strings in der Argumentenliste von printi zu Damit ist der radix 1 4 FUNKTIONEN 157 Formatstring wie jeder andere String zug nglich Zugleich wird der Pointer pvar auf das n chste Argument gestellt blicher weise eine Konstante oder Variable Aus der Auswertung des Formatstrings ergeben sich Anzahl und Typen der weiteren Ar gumente Damit wird auch klar was geschieht wenn die Platzhalter d 6u usw im Formatstring nicht mit der Argumenten liste bereinstimmen Gibt es mehr Argumente als Platzhalter werden sie nicht beachtet Gibt es mehr Platzhalte
306. license notice and that you preserve all their Warranty Disclaimers F2 GNU FREE DOCUMENTATION LICENSE 361 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 na me 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 Acknow ledgements and any sections entitled Dedications You must de lete all sections entitled Endorsements 6 COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this license and replace the in dividual 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 lic
307. 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 1939 1941 1942 1943 1944 1945 1946 1948 1949 1950 1952 1953 367 Elektronische bin re Addiermaschine von JOHN VINCENT ATAN AS 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 mechanischer Speicher Sie arbeitet von 1950 bis 1960 in der Schweiz An der Harvard University bauen HOWARD AIKEN und GRACE Ho die Mark I in Relaistechnik Die Maschine lauft 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 Informationsspeicheru und suche das auf Mikrof
308. lle mathematisch sinnvollen Kombi nationen verf gbar Alle mathematischen Standardfunktionen f r einfache numerische Datentypen k nnen mit ihrem gewohn ten Namen aufgerufen werden und liefern Ergebnisse von ga rantierter hoher Genauigkeit f r beliebige Argumente aus dem Definitosnbereich Die Standardfunktionen f r die Datentypen interval und cinterval liefern scharfe Einschl sse der Wer tebereiche Zu den oben genannten einfachen Datentypen kommen die entsprechenden Felddatentypen Vektoren und Matrizen rvector ivector cvector civector rmatrix imatrix cmatrix Cimatrix Der Anwender kann Speicherplatz f r diese Arrays zur Lauf zeit zuordnen und freigeben Auf diese Weise kann dasselbe Pro gramm f r Arrays unterschiedlicher Gr e benutzt werden be grenzt nur durch den Arbeitsspeicher Es wird nicht mehr Spei cher von den Daten belegt als wirklich ben tigt wird Beim Zu griff auf Arrays wird der Indexbereich zur Laufzeit 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 n m 1 7 KLASSEN BIBLIOTHEKEN 197 cout lt lt Dimensionen n m eingeben cin gt gt n gt gt m imatrix B C A n m x SEET EE A n m Resize B m n B 1 1 B m n CS e By x C 1 1 C n n Mit Hilfe des C ostream Objektes cout wird ein String nach stdout geschrieben dann werden
309. lls Ihnen die bung zu einfach erscheint machen Sie das selbe f r einen Vokabeltrainer der au er Deutsch zwei Fremd sprachen beherrscht Wortschatz anfangs je 1000 Vokabeln er weiterbar 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 32 KAPITEL 1 PROGRAMMIEREN IN C C und die Revisionskontrolle sind auch bei Projekten au erhalb der Programmierung n tzlich vor allem beim Bearbeiten um fangreicher Manuskripte 1 2 1 Nochmals die Editoren Editoren wurden bereits im UNIX Kapitel Abschnitt Writer s Workbench auf Seite erl utert Hier geht es nur um einige wei tere Eigenschaften des Editors vi 1 die beim Schreiben von Programmaquellen von Belang sind Im Quellcode werden blicherweise Schleifenr mpfe und der gleichen um eine Tabulatorbreite 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 Zei len set tabstop 4 set showmatch set number anzulegen Die Option showmatch veranla t den vi 1 bei je der Eingabe einer rechten Klammer kurz zur zugeh rigen lin ken Klammer zu springen Die Op
310. ln zum Folgern mitgegeben sie beantworten dann die Anfrage ob eine Behauptung mit den 10 KAPITEL 1 PROGRAMMIEREN IN C C Fakten und Regeln vertr glich wahr ist oder nicht Viele Denk sportaufgaben legen eine solche Sprache nahe Hier das Hello World Programm in PROLOG HELLO WORLD Works with Sbp prolog ede x printstring HELLO WORLD printstring printstring HIT 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 beein flusst die Denkweise die Sicht auf ein Problem Es gibt ein zweite von der ersten unabh ngige Einteilung die zugleich die historische Entwicklung spiegelt e maschinenorientierte Sprachen Maschinensprache As sembler e problemorientierte Sprachen h here Sprachen In der Fr hzeit gab es nur die v llig auf die Hardware ausgerich tete und unbequeme Maschinensprache wir haben eine Kostpro be gesehen Assembler sind ein erster Schritt in Richtung 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 Datenbank abfragen Statistik oder Grafik Sprachen die in ihrer Anpassung noch weiter gehen Auch die zur Formatierung des vorliegenden Textes benutzte Sammlung von LaTe
311. lo wosrla l end Zeilen die an erster Stelle ein c oder ein enthalten gelten als Kommentar Zeilen die an sechster Stelle irgendein Zeichen ent halten werden als Fortsetzungen aufgefa t Anweisungen be ginnen in Spalte 7 die Sitte stammt aus der Lochkartenzeit Das Shellscript enthalt als einzige wirksame Kommandos echo Hello world exit Was davor steht geht nach dev null Mit 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 1 13 1 Regeln Unter dem bertragen oder Portieren von Programmen ver steht man das Anpassen an ein anderes System unter Beibe haltung der Programmiersprache oder das bersetzen in eine andere Programmiersprache auf demselben System schlimms tenfalls beides zugleich Ein Programm l t sich immer portieren indem man bis zur Aufgabenstellung zur ckgeht Das ist mit dem maximalen Auf wand verbunden es l uft auf Neuschreiben hinaus Unter g ns tigen 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 Computers zum Portie ren es gibt auch Programme f r diese T tigkeit Die wirkli chen Aufgaben l
312. lsruhe 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 1987 1988 1989 1990 1991 373 die Universitat Karlsruhe Microsoft XENIX ein UNIX fiir 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 veroffentlicht das X Window System Version 11 X11 In Berkeley wird die RAID Technologie entwickelt Beginn des baden wiirttembergischen 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 Griindung der Open Software Foundation OSF und der UNIX International Inc MS DOS 4 0 fiir PCs Ein Internet Wurm namens Morris geht auf die Reise darauf hin Griindung des Computer Emergency Response Teams CERT Erster Hoax 2400 baud Modem Hoax im Internet siehe CIAC Erstes landmobiles Satellitensystem fiir Datenfunk Inmarsat C Das NFSNET l st das ARPANET als Backbone des Internet ab UNIX System V Release 4 vereinheitlicht System V BSD u
313. lsweise eine Va riable aber keine Konstante und keine Funktion Diese Glieder hei en 1 Werte l value Eine Zuweisung ist keine mathematische Gleichung Die For mel x x 1 1 1 1 3 BAUSTEINE EINES QUELLTEXTES 109 ist als Gleichung f r jeden endlichen Wert von x falsch als Zu weisung dagegen ist sie gebr uchlich und bedeutet Addiere 1 zu dem Wert von x 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 T 2 5 1 2 hingegen ist als Gleichung in Ordnung nicht aber als Zuwei sung 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 Be gr ndung kommt nicht aus der Problemstellung sondern aus der Hardware n mlich der Speicherbehandlung Und gerade diese m chte man mit den h heren Programmiersprachen ver decken 1 3 7 3 Arithmetische Operationen Die arithmetischen Operationen sind e Vorzeichenumkehr un rer Operator e Addition e Subtraktion bin rer Operator e Multiplikation x e Division e Modulus Divisionsrest nur f r ganze Zahlen e Inkrement e Dekrement Inkrement und Dekrement sind Abk rzungen Der Operator kann vor oder nach dem Operanden Pr fix Postfix stehen Der Ausdruc
314. lt X11 Xlib h gt 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 char hallo Hallo World char hil Ha int main int argqe char xxargv Display xmydisplay x d structure Window mywinl mywin2 newwin w structure Pixmap mypixmap x pixmap GC mygcl mygcl2 newgc graphic context XEvent myevent x event to send x KeySym mykey x keyboard key x XSizeHints myhint x window info Colormap cmap de color map XColor yellow exact colorl color2 color3 static XSegment segments 350 100 380 280 380 280 450 300 unsigned long myforeground x fg color a7 unsigned long mybackground fe bg color 7 266 KAPITEL 1 PROGRAMMIEREN IN C C int myscreen i num 2 del 1 win 1 char text 10 Za initialization x if mydisplay XOpenDisplay fprintf stderr Cannot initiate a display connection exit Ll myscreen DefaultScreen mydisplay display screen x Za default pixel values mybackground WhitePixel mydisplay myscreen myforeground BlackPixel mydisplay myscreen x specification of window position and size myhint x 200 myhint y 300 myhint width 550
315. lude Datei 215 info 1 225 Initialisierung 82 280 inkrementieren 109 115 Inode Informationen aus der I 64 INRIA 373 int C 85 Interface Sprachen 63 Internet 174 Interpreter 18 ISO IEC 14882 15 ISO IEC 9899 14 Iteration 157 Iterator 193 JAVA 8 17 K amp R C 14 Karlsruhe Beginn der Informatik in K 365 Informatikstudium in K 365 Rechenzentrum der Universitat K 365 ZUSE Z 22 365 Karlsruher Test 329 Klammer C 120 Klasse C 181 Klasse abstrakte 184 Komma Operator 119 127 128 Kommandozeile 151 Kommentar C 76 78 213 222 227 C 80 180 SACHVERZEICHNIS make 35 Konstante Konstante 76 Literal 83 symbolische K 83 213 Kontrollanweisung 123 Kreuzreferenz 47 l Wert 108 Label C 129 Langzahl Arithmetik 200 large Speichermodell 179 1d 33 Lebensdauer Operand 82 105 107 lib t 205 linken Programme 33 169 Linker 6 19 lint 34 72 LISP 8 Literal 76 long C 85 long double C 86 ls 75 lseek 64 magic 64 magic h 64 Magic Number 64 main 226 main 63 151 152 make 35 74 make 1 255 Makefile 35 Makro C 137 214 make 35 malloc 3 258 man 1 223 man Seite 223 MANPATH 223 407 Mantisse 86 Maschinencode 18 19 Maschinensprache 5 Maschinenwort 85 93 math h 174 medium Speichermodell 178 Member Access Specifier 182 Meta Object Compiler 206 method HTML 272 Methode C 181 Minus un res 279 mknod 69 moc 206 Modul 33 MODULA 13 Modulus 109
316. m Sortierprogramm RCS Beispiel W Alex Universitaet Karlsruhe 04 Juli 1995 x Header home debian prog quellen sortinclude v 1 1 1 1 int bubble char text int insert char text define USAGE Aufruf mysort filename define NOTEXIST File existiert nicht define NOTREAD File ist nicht lesbar define NOTSORT Problem beim Sortieren define LINSIZ 64 x Zeilenlaenge gt define MAXLIN 256 x Anzahl Zeilen x Quelle 1 13 Include Datei zum Sortierprogramm mysort c Nun das Hauptprogramm das die Verantwortung tr gt aber sonst nicht viel tut Hier ist der Platzhalter SHeader home debian unix unix8 tex v 1 1 1 1 2005 02 06 52 KAPITEL 1 PROGRAMMIEREN IN C C Bestandteil des Codes die Versionsinformationen stehen also auch im ausf hrbaren Programm Man k nnte sogar mit ihnen etwas machen ausgeben beispielsweise x Sortierprogramm mysort als Beispiel fuer RCS x Log mysort tex v Revision 1 1 1 1 2005 02 06 19 44 00 wulf Anlegen des prog Reps static char rcsid SHeader home debian prog quellen mysort tex v 1 1 1 1 2005 include lt stdio h gt include myheader h int main int argc char xargv long timel time2 x Pruefung der Kommandozeile x if argc 2 puts USAGE return 1 x Pruefung des Textfiles lt if access argv 1 0 puts NOTEXIST return 2 if access argv 1 4 puts NOTREAD return 3
317. man vor allem bei den Kleinigkeiten wie G nsef chen oder Semikolons Ein gro er Teil des Programms besteht wie blich im Abfangen un zul 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 auch Funktions und Klassenbibliotheken f r cgi Programme in C C 1 12 Obfuscated C Wie bereits in einer Fu note auf Seite 15 bemerkt findet j hrlich ein Wettbewerb um das undurchsichtigste C Programm statt to obfuscate vernebeln verwirren Die Siegerprogramme haben au er Nebel auch noch einen Witz aufzuweisen Als Beispiel ge ben wir ein Programm von JACK APPLIN Hewlett Packard Fort Collins USA wieder das erfolgreich am Contest 1986 teilgenom men 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 x gt dev null 2 gt amp 1 echo Hello world exit x This program works under cc 77 and bin sh x main write Cab Cat ITM Hello world 4 Cabs pute eha tr Seas cat gt 3TUnter 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 1 12 OBFUSCATED C 279 Cap end Wi Auch die Leerzeichen sind wichtig Entfernt man die Kommen tare bleibt als C Programm b
318. me und Typ zu und legt seinen Geltungsbereich und seine Lebensdau er fest Mit der Definition erh lt ein Operand einen Wert Beides kann in einer Anweisung vereinigt werden e 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 e Es gibt einfache und zusammengesetzte Typen sowie Poin ter e 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 e Zusammengesetzte Typen sind Arrays und Strukturen e Ein Array ist eine geordnete Menge von Operanden glei chen Typs 1 3 BAUSTEINE EINES QUELLTEXTES 135 e Eine Struktur ist eine ungeordnete Menge von Operanden beliebigen Typs e Der Pointer ist ein Typ dessen Wertebereich Adressen sind Ein Pointer zeigt immer auf einen Typ unter Umst nden auf einen weiteren Pointer e Ein Ausdruck besteht aus Operanden und Operationen Er hat einen Wert und kann berall dort stehen wo ein Wert verlangt wird e Die einfachste Operation ist die Zuweisung nicht zu ver wechseln mit einer mathematischen Gleichung Sie hat ei ne 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 e Weiterhin gibt es arithmetische logische vergleichende Operationen sowie
319. merika 0 Eisenbahner Spar und Creditverein 0 Eishockeyclub 0 escape Fluchtsymbol 2 Karlsruher Brauerei 0 Fernsehsendung 1 Bildschirmger 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 338 ANHANG E KARLSRUHER TEST Wysiwyg 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 339 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
320. mm l t sich unter Zuhilfename der exzel lenten Online Dokumentation zu Qt die sich auf dem Webserver von Troll Tech www troll no findet schnell erweitern Pro bieren Sie es aus Die Programmierung mit Qt ist auch fiir C Einsteiger und Anf nger in der X11 Programmierung einfach zu erlernen und zeitigt schnell Erfolgserlebnisse 210 KAPITEL 1 PROGRAMMIEREN IN C C 1 8 berladen von Operatoren Die arithmetischen Operationen auf Ganzzahlen unterscheiden sich von denen auf Gleitkommazahlen insbesondere die Divi sion Dennoch verwenden wir dieselben Operatoren Das Pro gramm erkennt aus dem Zusammenhang welche Art von Ope ration gefragt ist Diese M glichkeit einem Operator je nach Zusammenhang verschiedene Bedeutungen Definitionen zu ge ben ist in C verallgemeinert worden und l t sich auf fast jeden Operator und jede Funktion ausdehnen Wir sehen uns am Beispiel eines C Programmes zur Be rechnung von Primzahlen nach dem Divisionsverfahren an wie ein Operator berladen wird x prim C C Programm zur Berechnung von Primzahlen zu compilieren mit CC o prim prim C x x SHeader home debian prog quellen primplus tex v 1 1 1 1 inelude lt iostream h gt include lt stdio h gt KKKKK KKK KKK Klassen x KKK EE E EE class PRIM Definition der Klasse PRIM public nach aussen sichtbar Methoden PRIM int int Default Constructor PRIM amp operator Ueberladen von Pra
321. mmentwicklung ist daher die Formulierung der Aufgabe Zu diesem Schritt kehrt man im Verlauf des Programmierens immer wieder zur ck um zu erg n zen oder zu berichtigen Es ist realistisch f r die Aufgabenana lyse rund ein Drittel des gesamten Zeitaufwandes anzusetzen Die Aufgabe wird in einem Pflichtenheft schriftlich festgehal ten das zur Verst ndigung zwischen Entwickler und Anwender Real programmers know better than the users what they need 26 KAPITEL 1 PROGRAMMIEREN IN C C sowie der Entwickler untereinander dient Fragen in diesem Zu sammenhang sind e Welche Ergebnisse soll das Programm liefern e Welche Eingaben sind erforderlich e Welche Ausnahmef lle Fehler sind zu ber cksichtigen e In welcher Form sollen die Ergebnisse ausgegeben werden e Wer soll mit dem Programm umgehen e Auf welchen Computern soll das Programm laufen Anf nger sehen die Schwierigkeiten des Programmierens in der Umsetzung des L sungsweges in eine Programmiersprache in der Codierung Nach einigem ben stellt sich dann heraus dass die dauerhaften Schwierigkeiten in der Formulierung und Ana lyse der Aufgabe allenfalls noch im Suchen nach L sungen lie gen 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 rfnis sen entspricht Dann sollte man sich mit viel Phantasie ausma len was alles noch dazu kommen k
322. mmer bei der Fehlersuche ist ein Debug ger lernbed rftig aber nicht immer vermeidbar Programmfunktionen aber auch andere Dateien lassen sich in Bibliotheken archivieren die bequemer zu handha ben sind als eine Menge von einzelnen Funktionen 1 2 PROGRAMMER S WORKBENCH 71 e Bei gr eren Projekten kommt man nicht um ein Kontroll system 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 e CASE Tools vereinigen die einzelnen Werkzeuge unter ei ner gemeinsamen Benutzeroberfl che Der Programmierer braucht gar nicht mehr zu wissen was ein Compiler ist e Systemaufrufe sind die Verbindungen des Betriebssystems nach oben zu den Anwendungsprogrammen hin Sie sind Teil des Betriebssystems e Systemaufrufe haben vorwiegend mit Prozessen den Datei Systemen und der Ein und Ausgabe zu tun e UNIX Systemaufrufe sind C Funktionen die sich im Ge brauch nicht von anderen C Funktionen unterscheiden e C Standardfunktionen geh ren zum C Compiler nicht zum Betriebssystem e 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 Pro grammiersprache 1 2 12 bung Programmer s Workbench Anmelden wie gewohnt Zum ben brauchen wir ein kleines Pro gramm mit b
323. ms 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 changed the files and the date of any change b You must cause any work that you distribute or pu blish that in whole or in part contains or is derived from the Program or any part thereof to be licensed as a whole at no charge to all third parties under the terms of this License c N If the modified program normally reads commandes in teractively 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 warran ty 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 348 3 ANHANG F GNU LIZENZEN is interactive but does not normally print such an an nouncement your work based on the Program is not required to print an announcement These requirements apply to the modified work as a who le If identifiable sections of that work are not derived from the Program and can be reasonably considered indepen dent and separate works in themselves then this License and its terms do not apply to those sections when you dis tribute them as separate works But when you
324. mt 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 Ze I X t Yy Aenderung der Summanden x 66 y 88 Dar 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 Zwischen funktionen einrichten So macht es Microsoft bei seinem gro en 150 KAPITEL 1 PROGRAMMIEREN IN C C C Compiler Aber wenn nichts vorgesehen ist mu der gew hn liche Programmierer solche Unvertr glichkeiten hinnehmen Auch Shellscripts k nnen Funktionen aufrufen Diese m s sen 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 Sa b print Die Shell Summe ist expr Sa Sb print Die Punktions Summe ist cssh a b Die Summanden sind a b Pring exit Quelle 1 50 Shellscript mit Parameteriibergabe Die zugeh rige C Funktion ist ein Hauptprogramm x C Programm zum Aufruf durch Shellskript 29 01 1988 Ze Compi
325. n n mlich main deren Rumpf leer ist in einer Datei main Quelle 1 76 Minimales C Programm Der Name main ist f r das Hauptprogramm vorge schrieben main ist eine Funktion daher die beiden runden Klammern Der durch die geschweiften Klammern umschlosse ne Block ist leer main tut nichts Der Syntaxpr fer lint 1 beanstandet da der R ckgabewert von main undefiniert ist 1 11 WEITERE C PROGRAMME 227 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 ckgabewert sorgen und wie es sich geh rt mittels eines Kommentars das Verst ndnis erleich tern 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 De klaration von main als int k nnte entfallen da sie unab n derlich ist aber wir wollen uns angew hnen alle Gr en aus dr cklich zu deklarieren Den R ckgabewert k nnen Sie sich mit dem Shell Kommando print nach der Ausf hrung anschau en Um etwas Vern nftiges zu tun mu das Programm um einige Zeilen angereichert werden Wir deklarieren eine int Variable
326. n 023 027 17 eb End oftransmission block etb 024 030 18 en Cancel can 308 025 031 19 em 026 032 la sb 027 033 Ib ec 028 034 Ic fs 029 035 ld gs 030 036 Ile rs 031 037 If us 032 040 20 sp 033 041 21 034 042 22 035 043 23 036 044 24 037 045 25 Io 038 046 26 amp 039 047 27 040 050 28 041 051 29 042 052 2a 043 053 2b 044 054 2c 045 055 2d 046 056 2e 047 057 2f 048 060 30 0 049 O61 31 1 050 062 32 2 051 063 33 3 052 064 34 4 053 065 35 5 054 066 36 6 055 067 37 7 056 070 38 8 057 O71 39 9 058 072 3a 059 073 3b 060 074 3c lt 061 075 3d 062 076 Ae gt 063 077 3f 064 100 40 ANHANG B ZEICHENS TZE End of medium em Substitute sub Escape esc File separator is4 Group separator is3 Record separator is2 Unit separator is1 Space Exclamation mark Quotation mark Number sign Dollar sign Percent sign Ampersand Apostrophe Left parenthesis Right parenthesis Asterisk Plus sign Comma Hyphen Minus Full stop Solidus Digit zero Digit one Digit two Digit three Digit four Digit five Digit six Digit seven Digit eight Digit nine Colon Semicolon Less than sign Equals sign Greater than sign Question mark Commercial at B 4 LATIN 1 ISO 8859 1 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100 101 102
327. n lesbaren Assemblercode Die Com pileroption 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 Assemblerco de in Maschinensprache bersetzt 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 Ver binden 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 bemerkt 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 blicherweise erzeugt ein Compiler Maschinencode f r die Maschine auf der er selbst l uft Cross Compiler hingegen er zeugen Maschinencode f r andere Systeme Das ist gelegentlich n tzlich 20 KAPITEL 1 PROGRAMMIEREN IN C C Der Name des Programms im C Quellcode hat die Kennung
328. n Ganzzahlen und Zeichen in C verwirrt anfangs Man mache sich die Gemeinsamkeiten an ei nem kleinen Programm klar 88 KAPITEL 1 PROGRAMMIEREN IN C C x Programm zum Demonstrieren von character und integer include lt stdio h gt int main int i J k char a b Le 65 T 233 k 333 a B b printf Ganzzahlen d d d d n i j k ay printf Zeichen sE Se SE wera 2417 Re a y puts Nun rechnen wir mit Zeichen B 66 33 g gd n a b a b printf User oc aan b a b a prance C s c printf 5c c c n b a b a return 0 Quelle 1 22 C Programm mit den Typen character und integer Die Ausgabe des Programms lautet Ganzzahlen 65 233 333 66 Zeichen gt 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 Format string der Funktion printf 3 als dezimale Ganzzahlen aus gegeben wobei der Buchstabe B durch seine ASCII Nummer 66 vertreten ist In der zweiten Zeile werden alle Werte als 7 bit ASCII Zeichen verstanden wobei die Zahlen die mehr als 7 Bit gt 127 beanspruchen nach 7 Bit links abgeschnitten 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
329. n 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 Soll ein Operand global im gesamten Programm gelten so ist er in jeder Datei erneut zu 29In C d rfen Variable an beliebiger Stelle innerhalb eines Bereiches deklariert werden jedoch muss dies vor ihrer ersten Verwendung erfolgen 1 3 BAUSTEINE EINES QUELLTEXTES 107 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 Ein deutigkeit Gen ge getan und der Compiler wei trotzdem bei jeder Datei mit welchen Typen er es zu tun hat Wird ein Operand desselben Namens innerhalb eines Berei ches 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 e ren Operanden hat eine L cke der u ere Operand wird ver schattet Das Konzept des Geltungsbereiches l sst sich ber ein Programm hinaus erweitern Die exportierten Umgebungs Variablen der Sitzungsshell gelten f r alle Prozesse einer Sit zung und k nnen von diesen abgefragt
330. n Programmierspra chen 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 Bild schirm Weitere Exemplare dieses Programmes in ber 200 Pro grammiersprachen finden sich bei der Louisiana Tech Universi ty unter http www latech edu acm HelloWorld shtml Als erstes das Programm so wie es ein C Programmierer schreibt x hallo c C Programm include lt stdio h gt int main printf Hallo Welt n return 0 Das Aussehen des Textes wird durch den ANSI C Standard be stimmt letzten Endes durch die Leute die die Sprache C ent wickelt haben Diese Form des Programmes wird von ge bten LU noter www ionet net timtroyr funhouse beer html liegt eine hnliche Sammlung 4 KAPITEL 1 PROGRAMMIEREN IN C C Programmierern verstanden und Programmquelle source ge nannt Die Maschine kann nichts damit anfangen Damit das Programm von einer Maschine ausgef hrt wer den kann muss es bersetzt werden Hierzu wird ein wei teres Programm ein Compiler herangezogen Im Fall von C l uft der bersetzungsvorgang in mehreren Schritten ab oh ne dass der Benutzer etwas davon merkt Wir verwenden hier den GNU C Compiler unter MS DOS auf einem PC Im ersten Schritt Pr
331. n SCCS Datei namens s filename abgelegt auf das schreibend nur ber besondere SCCS Kommandos zugegriffen werden kann Das erste dieser Kom mandos ist admin 1 und erzeugt aus einem C Quellfile program c das zugeh rige SCCS Dokument admin iprogram c s program c Mit admin 1 lassen sich noch weitere Aufgaben erledigen sie he Referenz Handbuch Mittels get 1 holt man das Quellfi le 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 Pro jekten ist es w nschenswert mehrere Dateien gemeinsam oder ganze Verzeichnisse in die Versionsverwaltung einzubeziehen Dies leistet das Concurrent Versions System CVS Es baut auf RCS auf und erweitert dessen Funktionalit t au erdem um eine Client Server Architektur Die beteiligten Dateien und Ver zeichnisse k nnen auf verschiedenen Computern im Netz liegen 56 KAPITEL 1 PROGRAMMIEREN IN C C Im Gegensatz zu RCS das zu einem Zeitpunkt immer nur ei nem Benutzer das Schreiben gestattet verfolgt CVS eine soge nannte optimistische Kooperationsstrategie Mehrere Program mierer k nnen gleichzeitig auf Kopien derselben Version Revi sion arbeiten Beim Zur ckschreiben wird ein Abgleich mit der in der zentralen Versionsbibliothek Repository abgelegten Fas sung erzwungen um zu verhindern da parallel durchgef hr te und bereits zur ckgeschrie
332. n 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 n nen 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 Verbin dung 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 Programmie ren zu erleichtern aber das Wesentliche am objektorientierten Programmieren ist dass die Aufgabe nicht mehr in Module zer legt wird die aus Anweisungen bestehen sondern in voneinan der unabh ngige Objekte die sich Mitteilungen oder Botschaf ten schicken Die Objektorientierung setzt bei der Aufgabenana lyse ein nicht erst bei der Umsetzung in eine Programmierspra che Codierung Wie verh lt sich C zu C Manche sagen dass C eine neue von C v llig unabh ngige Sprache sei Andere wiederum betrachten C als eine umfangreiche Erweiterung von C Auf jeden Fall sind die Kenntnisse die man beim Lernen von C er worben hat auch in C n tzlich und keinesfalls berholt C 1 1 GRUNDBEGRIFFE 17 Compiler bersetzen die meisten C
333. n Vorzeichen Man beachte da die Typen sich nicht nur in ihrem Wertebereich sondern auch in ihrer Genauigkeit Anzahl der signifikanten Stellen un terscheiden anders als bei Ganzzahlen Der Typ long double ist selten F r Gleitkommazahlen sind die Addition die Subtraktion die Multiplikation die Division sowie Vergleiche zul ssig Die Abfrage auf Gleichheit ist jedoch heikel da aufgrund von Run dungsfehlern zwei Gleitkommazahlen selten gleich sind Wenn m glich mache man um Gleitkommazahlen einen gro en Bo gen Die Operationen dauern l nger als die entsprechenden f r Ganzzahlen und die Auswirkungen von Rundungsfehlern sind schwierig abzusch tzen Zur internen Darstellung von Gleitkom mazahlen siehe Abschnitt Arithmetikprozessoren 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 tze 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 ar D Mit wachsender Verbreitung von 16 bit Zeichens tzen Unicode Intercode ist zu erwarten dass die L nge des char Typs ange passt wird Die Verwandtschaft zwische
334. n au genblicklichen Wert von stagprec bestimmt ist Speicherzuwei sung das ndern der Gr e von Arrays und das Arbeiten mit Subarrays verlaufen hnlich wie bei den entsprechenden Daten typen 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 Feld breite usw benutzen auch die berladenen 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 in ternen 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 reelle Zahlen a b eingeben cout lt lt RndDown cin gt gt a Za lies a abwaerts gerunde cout lt lt RndUp cin gt gt 5 x lies b aufwaerts gerund MPO ra er DE en e Za String nach Intervall x cout lt lt SaveOpt Za I O Parameter auf Stack cout lt lt SetPrecision 20 16 x Feldbreite Stellen z cout lt lt Hex x hexadezimale Ausgabe z cout lt lt c lt lt RestoreOpt x alte I O Param zurueck Quelle 1 68 C XSC Programm mit formatierter Ein und Aus ga
335. n einem Zusammenhang wie x n PROD r s t u zu folgender Ersetzung f hren x P a Es Ss Ek u wie man durch manuelles Einsetzen leicht nachvollzieht und das ist vermutlich nicht das Gew nschte Mittels der undef Anweisung widerruft man eine vorherge hende 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 De finitionsdatei 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 die Regeln von C C verst t also auch Kommentar oder Programmteile Die Namen der Standard Include Dateien sind in lt gt einzu schlie en die Namen eigener 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 n dig wird oder falls der Name in spitzen Klammern eingeschlos sen ist wird in vorgegebenen Verzeichnissen wie usr include gesucht Durch Compileroptionen siehe man cpp l t sich die Suche steuern Die Include Dateien sind lesbar und finden sich im Verzeich nis usr include vom Benutzer erstellte Incl
336. n 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 Institu die Maus und die Fenstertechnik IBM lest 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 Virtual Reality ein gutes St ck voran 370 1968 1969 1970 1971 1972 1973 1974 1975 ANHANG G ZEITTAFEL 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
337. n kosten auch Zeit unter Umst nden Wochen Die Programmentwicklung vollzieht sich in der Praxis nicht so geradlinig wie es der obige Plan vermuten l sst Aus je der 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 er reicht das Programmierprojekt nie einen definierten Zustand Programmierer verstehen das Kaufleute und Kunden nicht Gilt auch f r Buchmanuskripte Der steigende Bedarf an Software und ihre wachsende Kom plexit t verlangen die Entwicklung von Programmierverfahren mit denen durchschnittliche Programmierer zuverl ssige Pro gramme entwickeln Auf geniale Real Programmers allein kann sich keine Firma verlassen Die Entwicklung dieser Program miertechnik Software Engineering ist noch nicht abgeschlos sen 1 1 9 Aufgabenanalyse und Entwurf 1 1 9 1 Aufgabenstellung Die meisten Programmieraufgaben werden verbal gestellt nicht in Form einer mathematischen Gleichung Zudem sind sie an fangs oft pauschal abgefasst da dem Aufgabensteller Einzel heiten noch nicht klar sind Auf der anderen Seite ben tigt der Computer eine eindeutige ins einzelne gehende Anweisung da er anders als ein Mensch fehlende Informationen nicht aufgrund seiner Erfahrung und des gesunden Menschenverstandes erg nzt Der erste Schritt bei der Progra
338. n 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 auf gez 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 Maschi ne werden Aufz hlungstypen durch Ganzzahlen dargestellt in sofern handelt es sich nicht um einen neuen Typ Aufz hlungs typen verbessern die Lesbarkeit der Programme 1 3 6 7 Pointer Zeiger Pointer sind vom Geheimnis umwittert Wer mit Pointern umge hen 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 1 3 BAUSTEINE EINES QUELLTEXTES 95 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 sinnvollen Einsatz von Pointern das Sortieren von Datens tzen Die Datens tze enthalten in Form einer Struk tur 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 Datens tze nach Hinzuf gen oder L schen einzelner S tze jedesmal neu sor tieren so w re das mit viel Kopierarb
339. n 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 angesehen Ihrem Ursprung nach sind es auch C Funktionen Sie sind jedoch nicht Bestandteil einer Funktionsbibliothek sondern geh ren zum Betriebssystem und sind nicht durch andere Funktionen erweiterbar Die Systemaufrufe als Bestandteil des Betriebssystems sind f r alle Programmiersprachen dieselben w hrend die Funktionsbibliotheken zur jeweiligen Programmiersprache ge h 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 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 fentl Filesteuerung fork erzeugt einen neuen Prozess fsct
340. n wir das Programm 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 Da tentyp n mlich Arrays of char die mit dem ASCII Zeichen Nr 0 abgeschlossen sind In der Standard C Bibliothek finden sich fer tige Funktionen f r die h ufigsten Aufgaben der Stringverarbei tung 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 ber lauf 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 gegan gen und dann taucht einmal ein berlanger String auf der den Puffer sprengt Das Gegenmittel besteht im Beschr nken 258 KAPITEL 1 PROGRAMMIEREN IN C C des Schreibens auf maximal ein Zeichen weniger als der Puffer fasst Wo Eingaben verlangt werden ist immer damit zu rech nen dass e die Eingabe leer ist leerer String nur ASCII Nr 0 oder e zu lang ist Uberlauf Ein gewiefter Programmierer sieht solche Fehler oder Ausnah men voraus gets fgets 1 11 9 Dynamische Speicherverwaltung mal loc Wir haben gelernt da die Gr e eines Arrays oder einer Struk tur bereits zur Ubersetzungszeit bekannt sein d h im Pro gramm stehen mu Dies f hrt in manchen F llen zur
341. namens i weisen ihr einen Wert zu definierende Deklarati on 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 x Dies ist ein einfaches C Programm von hohem paedagogischen aber sonst fast keinem Wert x int main int i 53 printf nDer Wert betraegt d n i return 1 Quelle 1 78 C Programm einfach 228 KAPITEL 1 PROGRAMMIEREN IN C C Nun soll auch der Pr prozessor Arbeit bekommen Wir defi nieren eine symbolische Konstante NUMBER und schlie en vor sichtshalber die Include Datei stdio h ein die man immer braucht wenn es um Ein oder Ausgabe geht Weiterhin verwen den wir einen arithmetischen Operator und eine Zuweisung x 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 Quelle 1 79 C Programm fortgeschritten Da ein Ausdruck sein Ergebnis zur ckgibt k nnen wir in der Funktion printf 3 anstelle von x auch die Summe hinschrei ben Als R ckgabewert unseres Hauptprogrammes wollen wir den R ckgabewert der Funktion printf 3 haben n mlich die Anzahl der ausgegebenen Zeichen Das Programm wird k rzer aber auch schwieriger zu verstehen falls man nicht ein alter C Hase ist
342. nce bernimmt Die Funktionen werden f r sich mit der Option c ihres je weiligen Compilers kompiliert wodurch Objektfiles mit der Ken nung o entstehen die beim Kompilieren der Hauptprogramme r Z 142 KAPITEL 1 PROGRAMMIEREN IN C C aufgef hrt werden Nun zu den Hauptprogrammen zuerst wie der in C x C Programm csummec das C Funktionen aufruft x x Compileraufruf cc o csummec csummec c csr o csv o include lt stdio h gt extern int csv int x int y esr Int px int By int Marr int a b puts Bitte die beiden Summanden eingeben scanf Sd Sd ka amp b printf Die Summanden sind d Santy rbb printf Die Summe direkt ist d n a b printf Die Summe ist d n csv a b printf Die Summanden sind d gd n a b printf Die Summe ist d n csr amp a amp b printf Die Summanden sind d gd n a b return 07 Quelle 1 39 C Programm das Parameter by value und by re ference an C Funktionen bergibt Nun das C Hauptprogramm das eine FORTRAN Funktion aufruft ein in der Numerik h ufiger Fall x C Programm csummef das eine FORTRAN Funktion aufruft x Compileraufruf cc o csummef csummef c fsr o lcl x include lt stdio h gt extern int fsr int x int xy int main int a Jas scanf td Sd ka amp b printf Die Summanden sind gd n a b printf Die Summe direkt ist san a b prin
343. nd Xenix Im Rechenzentrum Karlsruhe l st die IBM 3090 die 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 Knote 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 un 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 gegr ndet IBM Apple und Motorola kooperieren mit dem Ziel einen Power PC zu entwickeln 374 1992 ANHANG G ZEITTAFEL 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 1993 MS DOS Version 6 0 Microsoft k ndigt Windows NT an 1994 1995 1
344. nd a licensee cannot impose that choice F 1 GNU GENERAL PUBLIC LICENSE 351 10 11 This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License Ifthe distribution and or use ofthe Program is restricted in certain countries either by patents or by copyrighted inter faces the original copyright holder who places the Program under this License may add an explicit geographical dis tribution limitation excluding those countries so that dis tribution is permitted only in or among countries not thus excluded In such case this License incorporates the limi tation 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 pre sent version but may differ in detail to address new pro blems or concerns Each version is given a distinguishing version number If the Program specifies a version 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 version published by the Free Soft ware 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
345. nen bergibt Sollten Sie die Beispiele nachvollzogen haben m te Ihr Linker in zwei F llen mit einer Fehlermeldung unsatisfied symbol output data die Arbeit verwei gert 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 Da teipointer 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 bereinstim mung 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 1 4 FUNKTIONEN 149 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 i X Y Aenderung der Summanden x 71 y re 99 PSV Z end end Quelle 1 48 PASCAL Funktion die Parameter by value ber nim
346. nen bereit Gewarnt wird vor der Funktion gets 3 die einen String von stdin in ein Array einliest und dabei einen Uberlauf verursachen kann Grunds tzlich soll man beim Arbei ten mit Strings den Fall ber cksichtigen dass ein String gele gentlich 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 wer den Man mu vielmehr mit den Standard Stringfunktionen arbeiten oder sich selbst um die einzelnen Elemente des Ar rays k mmern Die Stringfunktionen erwarten die Include Datei string h Hier ein kurzes C Programm zur Stringmanipulati on mittels Systemaufrufen und Standardfunktionen x Programm fuer Stringmanipulation define TEXT textfile 1 5 FUNKTIONS BIBLIOTHEKEN 173 include lt stdio h gt include lt string h gt include lt io h gt include lt fcntl h gt include lt string h gt char buffer 80 Dies ist ein langer Teststring Hallo int main char x zeile 80 int i int fildes FILE fp Za 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 Za Standardfunktionen und Filepointer fp fopen TEXT w for i 0 i lt 30 i fputc buffer i fp
347. nen von positiven ganzen Zahler zur Basis 10 auf eine andere Basis z B 16 x define DEBUG Za falls gewuenscht x define MAX 8 x max Stellen Ergebnis x include lt stdio h gt int umwandeln int int int Prototyp int main ne Dr x neue Basis als Dezimalzahl x int x Ja umzurechnende Dezimalzahl x int i Za Schleifenzaehler int r MAX Array des Ergebnisses x while 1 4 printf n nNeue Basis x einlesen Scant d amp b printf Dezimalzahl scanf Sd amp x if b lt 2 puts Basis muss gt 1 sein continue if x lt 1 puts Dezimalzahl muss gt 0 sein 220 KAPITEL 1 PROGRAMMIEREN IN C C continue ifdef DEBUG printf nb d x d n n b x endif for i 0 i lt MAX i x Array nullen x rili 0 umwandeln b x r x rechnen xausgeben printf Die Dezimalzahl Sd lautet zur Basis d x for i MAX 1 i gt 07 i 1 printf da r il x Ende while Schleife mit control c verlassen x return 0 x Funktion umwandeln x int umwandeln int b int z int gt r int 1 J Yi while z gt y by y y b i z x eins zuviel x ifdef DEBUG printf y 3d i d n y 2 endif tor J OR yo s ZI d 2 Se ifdef DEBUG printf z d j sd n n z j endif 1 10 DOKUMENTATION 221 r i j x Ausgabe in Array
348. neue Typ k rzer ist als der al te Die Typumwandlung gilt nur im Zusammenhang mit dem cast Operator und hat f r die weiteren Anwendungen der Va riablen 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 Aus dr cken diese voneinander Sie werden von links nach rechts ab gearbeitet Das Ergebnis der Auflistung hat Typ und Wert des rechts au en stehenden Ausdrucks Ein Beispiel int Ze J 10 i j j 100 999 KEE e e LX Hier wird zuerst j um 1 erh ht dann dazu 100 addiert und schlie lich dem gesamten Ausdruck 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 for Schleifen verwendet Das Komma zwischen Variablen namen in Deklarationen oder in einer Argumentliste ist kein 120 KAPITEL 1 PROGRAMMIEREN IN C C Operator Die Reihenfolge der Abarbeitung solcher Listen ist un sicher Der sizeof Operator gibt die Gr e des Operanden in By tes zur ck Der Operand kann eine Variable ein Ausdruck oder ein Datentyp sein auch ein zusammengesetzter Ein Ausdruck 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 Varia blen bei Speicherreservierungen das Programm wird portabler Der Ausd
349. ngeben 102 format Die Summanden sind 216 103 format Die Summe direkt ist I8 104 format Die Summe ist 18 105 format Die Summe ist 18 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 sei ner Gewohnheit by value zu bergeben Zum guten Schlu die PASCAL Hauptprogramme PASCAL Programm das C Funktionen aufruft Compiler pc o 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 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 Summe direkt ist writeln s s csv a b 1 4 FUNKTIONEN 147 wr itet Die Summe ist writeln s write Die Summanden sind write a writeln b s csr a b write Die Summe ist writeln s write Die Summanden sind write a writeln b end Quelle 1 45 PASCAL Programm das 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
350. nischen Datenverarbeitung sie sollen wie FRITZ REUTERS Urgeschicht von Meckelnborg ok f r Schaul kinner 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 Betriebssyste men der Gattung UNIX einschlie lich Linux der Programmier sprache C C und dem weltumspannenden Internet die so weit reicht dass der Leser mit der Praxis beginnen und sich selbst n dig 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 konzentriere Meine Debian B cher ISBN 3 540 43267 1 und 3 540 23786 0 sind ebenfalls bei Springer er schienen aber nicht im Netz ver ffentlicht Die Skripten dage gen bleiben weiterhin im Netz verf gbar und werden bei Gele genheit immer wieder berarbeitet Warum ein Linux UNIX Die Betriebssysteme der Gattung UNIX laufen auf einer Vielzahl von Computertypen Unter den verbreiteten Betriebssystemen sind sie die ltesten und ausge reift Die UNIXe haben sich lange ohne kommerzielle Einfl s se entwickelt und tun das teilweise heute noch
351. nnt mit einer gr nd lichen Analyse der Aufgabe Die Umsetzung in eine Pro 1 2 PROGRAMMER S WORKBENCH 31 grammiersprache Codierung ist dann vergleichsweise harmlos e Ein Programm soll nicht nur die zugrundeliegende Aufgabe richtig l sen sondern auch gegen Fehler und Ausnahmen unempfindlich robust sein Die Fehlerbehandlung erfor dert mehr Programmzeilen als die eigentliche Aufgabe e Ein Programm soll einfach zu ndern sein Dies wird durch eine gute Struktur und reichlich Kommentar erleich tert wenn man schon keine ausf hrliche Dokumentation schreibt e Ein Programm soll menschenfreundlich sein 1 1 13 bung Grundbegriffe Nehmen wir an der Weg zu Ihrem Arbeitsplatz bestehe aus meh reren Teilstrecken mit unterschiedlichen Gegebenheiten Sie wollen wissen was es bringt und kostet wenn Sie einzelne Teil strecken schneller oder langsamer zur cklegen Sie brauchen also ein Programm zur Analyse Ihres Arbeits weges Formulieren Sie die Aufgabe genauer zerlegen Sie sie in Teilaufgaben beschreiben Sie die Ein und Ausgabe ber cksich tigen 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 soll ten 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 Fa
352. nnte wenn Geld Zeit und Verstand keine Schranken setzen w rden J have a dream Drittens streiche man von diesem Traum gnadenlos alles weg was nicht unbedingt erforderlich und absolut minimal notwen dig 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 da f r reifist 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 Komple xe Aufgaben werden in mehreren Stufen in Teilaufgaben zer legt die berschaubar sind und sich durch eine Funktion oder Prozedur im Programm l sen lassen Insofern spiegelt die Zer legung bereits die sp tere Programmstruktur wider Das Hauptprogramm soll m glichst wenig selbst erledigen sondern 2Real programmers disdain structured programming 1 1 GRUNDBEGRIFFE 27 nur Aufrufe von Unterprogrammen enthalten und somit die gro e Struktur widerspiegeln Oft ist folgende Gliederung ein zweckm iger Ausgangspunkt e Programmstart Initialisierungen e Eingabe Dialog e Rechnung e Ausgabe e Hilfen e Fehlerbehandlung e Programmende Aufr umen Bei den Teilaufgaben ist zu fragen ob sie sich ohne die Kom plexit t wesentlich zu erh hen allgemeiner formulieren lassen Dami
353. ns 1 and 2 above on a medium customa rily used for software interchange or F 1 GNU GENERAL PUBLIC LICENSE 349 c Accompany it with the information you received as to the offer to distribute corresponding 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 code for a work means the preferred form of the work for making modifications to it For an executa ble 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 compilati on and installation of the executable However as a special exception the source code distributed need not include any thing that is normally distributed in either source or bina ry form with the major components compiler kernel and so on ofthe operating system on which the executable runs unless that component itself accompanies the executable If distribution of executable or object code is made by offe ring access to copy from a designated place then offering equivalent access to copy the source code from the same place counts as distribution of the source code even though third parties are not compelled to copy the source along with the object code 4 You may not copy modify sublicense or distribute the Pro gram except as ex
354. ns XYZ in parentheses following text that translates XYZ in another lan guage Here XYZ stands for a specific section name mentioned below such as Acknowledgements Dedications Endorse ments or History To Preserve the Title of such a section when you modify the Document means that it remains a section Entitled XYZ according to this definition F2 GNU FREE DOCUMENTATION LICENSE 357 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 re ference in this license but only as regards disclaiming warran ties any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this license 2 VERBATIM COPYING You may copy and distribute the Document in any medium either commercially or noncommercially provided that this licen se the copyright notices and the license notice saying this licen se 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
355. ntf nZahl zu gross Maximal d n MAX exit 1 1 4 FUNKTIONEN 163 x nullsetzen x addieren x l x zurueckschreiben ende max gt END END max time amp z1 x Zeit holen x Rechnung x xxf unsigned long 1 for i 1 i lt ende i for j 0 j lt GRP j x x j 0 k i 4 for J 1 j lt k J x gad 8 x f i 1 lshift x lshift x for k 0 k lt i 4 k aadd x x f i Ly for j 0 j lt GRP j x x f i J gt x j Za x x f i j ist dasselbe wie f i j ad time amp z2 x Ausgabe Za Zeit holen x fuehrende Nullen unterdrueckt x printf n tFakultaeten von 0 bis 4d n max for i 0 i lt ende i flag 0 printf n t 4d N for jJ GRP 1 j gt 0 j if x x f i j amp amp flag else if flag A printf 9lu x x f i flag 1 else J 7 164 KAPITEL 1 PROGRAMMIEREN IN C C printf 09lu x x f i j Za falls wir weitermachen wollen muessen wir das Array 261 58 umfunktionieren in 2 gt In f 0 steht vorige Fakultaet in f 1 wird addiert x if max gt END x O einrichten e GMX kleiner 7296 x for j 0 j lt e jt x xf j 0 x 0 nullsetzen gt aadd f 0 END Za vorige Fak addieren Rechnung wie gehabt for i END 1 i lt max
356. 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 is ja e lS 21 x Adressierung durch Indizes langsam a 0 a i a j 1 11 WEITERE C PROGRAMME 233 x Adressierung durch Pointer schnell 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 verschie denen 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 immer zeitaufwendig In vielen Program men geht f r diese Aufgabe sogar 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 zweck m ige Datenstruktur und einen guten Algorithmus Diese berlegungen geh ren jedoch an den Anfang der Programment wicklung 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
357. nur Speicherpl tze in Einheiten von einem Byte Jedes Byte hat eine absolute Adresse Haus nummer die uns aber nichts angeht e Die Deklaration einer Variablen erzeugt eine Variable mit einem Namen und bestimmten Eigenschaften darunter den durch den Typ bestimmten Speicherbedarf in Bytes e Die Definition einer Variablen weist ihr einen Wert zu be legt Speicherplatz und damit eine Adresse e 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 e Deklariert man zuerst den Pointer px so erh lt man die Variable durch Dereferenzierung px Es ist nicht immer gleichg ltig ob man den Pointer oder die Variable dekla riert und das Gegenst ck durch Referenzieren bzw Derefe renzieren handhabt e Eine Variable kann notfalls auf einen Namen verzichten aber niemals auf ihren Pointer 1 11 WEITERE C PROGRAMME 243 e Pointer sind keine ganzen Zahlen die Arithmetik l uft an ders e Ein Pointer auf eine noch nicht oder nicht mehr existieren de Variable h ngt in der Luft dangling pointer und ist ein Programmfehler Nun einige Beispiele zu bestimmten Anwendungen von Poin tern 1 11 7 1 Nullpointer Die Zahl Null ist die einzige Konstante die sinnvollerweise ei nem Pointer zugewiesen werden kann Auf dieser Adresse liegt kein g ltiges Dateno
358. nweisung goto gefolgt von einem Label Marke In seltenen F llen kann ein goto das Programm ver besern meist ist es vom bel weil es erstens sehr gef hrlich zweitens auch nicht n tig ist Hier ein grauenvolles Beispiel f r den Mi brauch von goto Das Programm ist syntaktisch 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 Zwischenergebnisse Das Programm enth lt eine schwere programmiertechnische S nde den Sprung mitten in einen Schleifenrumpf x Grauenvolles Beispiel fuer goto 06 07 1992 x x Am besten gar nicht compilieren x include lt stdio h gt int main LAE Xy printf Bitte Zahl eingeben scant d Ss if x 5 goto marke else while x 5 Xt marke printf Ausgabe d n x return 0 Quelle 1 30 C Programm mit goto grauenvoll Nun aber ganz schnell eine stilistisch einwandfreie Fassung des Programms Za Verbessertes Beispiel 06 07 1992 x 3IReal programmers aren t afraid to use got o s 1 3 BAUSTEINE EINES QUELLTEXTES 131 include lt stdio h gt int main INGX printf Bitte Zahl eingeben scanf d amp x do printer sana n x while x t 5 return 0 Quelle 1 31 C Programm verbessert Am goto hatte sich um 1970 herum ein Glaubenskrieg ent z
359. nzutreffen 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 Wege offen berlegen Sie welche Klassen und Objekte man bei der Auf gabe zur Weganalyse zweckm ig einrichtet Sind die Wegstre cken oder die Fahrzeuge Personen als Objekte anzusehen Skiz zieren Sie ohne genau auf die Syntax zu achten eine Klassen hierarchie samt Daten und Methoden In dem Beispielprogramm zur Befeuerung von Binnenschif fen kann man sich gut eine Hierarchie von Fahrzeugen und ent sprechenden 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 ausse hen Welche Vorteile h tte hier die Objektorientierung vor der prozeduralen Denkweise 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 fes ten Bestandteil der Compiler obwohl sie im strengen Sinn nicht Bestandteil der Sprache sind Zu C geh rt ebenso wie zu C ei ne Standardbibliothek deren Umfang und Funktionalit t durch 1 7 KLASSEN BIBLIOTHEKEN 193 eine ISO ANSI Norm festgelegt ist Im wesentlichen geh ren da zu e die C Standardbibliothek
360. o grammcodes das unter UNIX in das Codesegment des zugeh ri gen Prozesses kopiert und vor schreibenden Zugriffen gesch 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 schrei bend zugreift In ANSI C sind die Typ Attribute type qualifier const und volatile eingef hrt worden die eine bestimmte Behand lung der zugeh rigen Operanden erzwingen Sie werden selten gebraucht 1 3 6 2 Typen Grundbegriffe Jeder Operand geh rt einem Typ an der ber e den Wertebereich siehe usr include limits h 84 KAPITEL 1 PROGRAMMIEREN IN C C e die zul ssigen Operationen e den Speicherbedarf entscheidet Die Typen werden in drei Gruppen eingeteilt e einfache skalare oder elementare Typen e zusammengesetzte oder strukturierte Typen e Pointer Adressvariable In C gibt es nur konstante Typen das hei t ein Operand der einmal als ganzzahlig deklariert worden ist bleibt dies w h rend des ganzen Programmes Einige Programmiersprachen er lauben auch variable Typen die erst zur Laufzeit bestimmt wer den oder sich w hrend dieser ndern Typfreie Sprachen kennen nur das Byte oder das Maschinenwort als Datentyp Die Typi sierung erleichtert die Arbeit und erh ht die Sicherheit sowie die Rechengeschwindigkeit Stellen Sie sich vor Sie m ssten bei Gleitkommazahlen Exponent und Mantisse jedesmal se
361. obleme braucht man eine genaue Beschreibung der beiden sollte expe rimentell pr fen was geschieht und sein Programm ausf hrlich kommentieren 1 3 2 Syntax Diagramme Die Syntax der einzelnen Bausteine das hei t ihr regelgerech ter Gebrauch kann mittels 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 Sei te 79 ist die Syntax zweier C Bausteine dargestellt n mlich die if else Anweisung und den Block Die if else Anweisung besteht aus e dem Schl sselwort if 78 KAPITEL 1 PROGRAMMIEREN IN C C e einer ffnenden runden Klammer e einem booleschen Ausdruck true false e einer schlie enden runden Klammer e einer Anweisung auch die leere Anweisung oder einem Block e dann ist entweder Ende der i f Anweisung oder es folgt e das Schl sselwort else gefolgt von e einer Anweisung oder einem Block Ist der boolesche Ausdruck true dann wird die erste Anwei sung ausgef hrt andernfalls die zweite Fehlt der else 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 e einer ffnenden geschweiften Klammer e dann entweder nichts leerer Blo
362. ock vorkommen muessen switch x case Les 4 Kreis f 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 Erzeugen des Objektes f 190 KAPITEL 1 PROGRAMMIEREN IN C C f schreibend break case 33 41 Wuerfel f f lesen f schreiben break default cout Keine gueltige Figur endl exit 1 return 0 Quelle 1 64 C Programm zur Berechnung geometrischer For men Geometrische Formen legen eine objektorientierte Program mierung nahe da sie eine Hierarchie bilden hnlich wie Pflan zen oder Tiere Im Beispiel wird als erstes eine abstrakte Basis klasse Form definiert die das enth lt was allen Formen gemein sam 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 ab strakten 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 Funktio nen flaeche Oberfl che und volumen Im n chsten Schritt gelangen wir endlich zu konkreten Klas
363. olgendem Beispiel an z a gt b a bD Eine Anwendung finden Sie im Abschnitt 1 4 7 Rekursiver Auf ruf einer Funktion auf Seite 159 114 KAPITEL 1 PROGRAMMIEREN IN C C 1 3 7 6 Bitoperationen Die Bit Operationen sind e shift links lt lt e shift rechts gt gt Bei vorzeichenlosen Ganzzahlen ist ein Shiften nach links gleich bedeutend mit einer Multiplikation mit 2 ein Shiften nach rechts mit einer Division durch 2 Auf die links oder rechts weg fallende Stelle ist zu achten nachgeschoben am anderen Ende wird eine Null Die Shift Operation ist schnell Weiterhin bezie hen 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 Bitoperatio nen ein kleines Programm Za Programm mit Bitoperationen sinnvolle Argumente z B 8 2 x include lt stdio h gt void exiEt int main int argc char xargv int i j k if argc lt 3 4 puts Zwei Argumente erforderlich fi exit 1 sscanf argv 1 734 amp i sscanf argv 2 d amp j 1 3 BAUSTEINE EINES QUELLTEXTES 115 k J printf Eingabe d um d Bits nach links d n kK i j printf Eingabe d um d Bits
364. on 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 381 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 Environ ment 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 Heidelberg 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 M Kofler Linux Installation Konfiguration Anwen dung Addison Wesley Bonn 2000 1108 S
365. on printf 3 nachempfunden ist es ist damit nicht ge sagt da printf 3 tats chlich so aussieht x Funktion printi Ersatz fuer printf nur fuer dezimale Ganzzahlen Zeichen und Strings Siehe Referenz Handbuch unter varargs 5 22 02 91 x x Returnwert 0 ok 1 Fehler sonst wie printf jx Comps leraurruf ce c printa c ey include lt stdio h gt include lt varargs h gt int fputc void int_print Eh x Funktion printi variable Anzahl von Argumenten x int printi va_ alist va_dcl va_list pvar unsigned long arg int field sig char xformat xstring long ivar 154 KAPITEL 1 PROGRAMMIEREN IN C C x Uebernahme und Auswertung des Formatstrings x va_start pvar format va_arg pvar char x while 1 Za Ausgabe von Literalen x while xformat 757 amp amp xformat ar fputc xformat stdout x Ende des Formatstrings LE format NOJ 4 va end pvar return 0 Za Prozentzeichen Platzhalter z format field 0 x Auswertung Laengenangabe x while xformat gt 0 EE xformat lt 9 field field 10 xformat 0 format Za Auswertung Typangabe und Ausgabe des Arguments x switch format case d Sig ivar long va_arg pvar int lt 0 1 0 arg unsigned long ivar lt 0 ivar ivar int_print arg sig field break case u arg unsigned long va_arg pvar
366. opyleft 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 Docu ment 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 copy right and license notices just after the title page Copyright YEAR YOUR NAME Permission is gran ted to copy distribute and or modify this document under the terms of the GNU Free Documentation Li cense Version 1 2 or any later version published by the Free Software Foundation with no Invariant Sec tions no Front Cover Texts and no Back Cover Texts A copy of the license is included in the section entitled GNU Free Documentation License 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 TIT LES with the Front Cover Texts being LIST and with the Back Cover Texts being LIST 364 ANHANG F GNU LIZENZEN If
367. or authorship of the modifications in the Modified Version together with at least five of the prin cipal authors of the Document all of its principal authors if it has fewer than five unless they release you from this requirement F2 J GNU FREE DOCUMENTATION LICENSE 359 State on the Title page the name of the publisher of the Modified Version as the publisher Preserve all the copyright notices of the Document Add an appropriate copyright notice for your modifications adjacent to the other copyright notices Include immediately after the copyright notices a license notice giving the public permission to use the Modified Ver sion under the terms of this license in the form shown in the Addendum below Preserve in that license notice the full lists of Invariant Sec tions and required Cover Texts given in the Document s li cense notice Include an unaltered copy of this license Preserve the section entitled History Preserve its title and add to it an item stating at least the title year new au thors 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 Preserve the network location if any given in the Docu ment for public
368. or input to text formatters A co py made in an otherwise Transparent file format whose mark up or absence of markup has been arranged to thwart or dis courage subsequent modification by readers is not Transparent An image format is not Transparent if used for any substantial amount oftext A copy that is not Transparent is called Opaque Examples of suitable formats for Transparent copies include plain ASCII without markup Texinfo input format LaTeX in put format SGML or XML using a publicly available DTD and standard conforming simple HTML PostScript or PDF designed for human modification Examples of transparent image formats include PNG XCF and JPG Opaque formats include proprieta ry 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 only The Title Page means for a printed book the title page itself plus such following pages as are needed to hold legibly the ma terial this license requires to appear in the title page For works in formats which do not have any title page as such TTitle Pa gemmeans 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 Do cument whose title either is precisely XYZ or contai
369. orn R ster 0 Mail Programm 2 Philosoph aus Wien 1 W ster Kerl 1 Noch zu beschreibende CD DVD 2 Rohkost Liebhaber 0 Kleidungsst ck 1 Schlitterbahn 1 Kontrollanweisung eines Programmes 2 Altlasten Expertensystem 1 Automatic Login Executor 1 Globales Filesystem 1 Stern Alpha Aquilae 1 Gebirge in Zentralasien 0 fr her Personal Computer 2 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 Fol gendes e ber 170 Punkte berlassen Sie das Rechnen k nftig dem Computer 344 ANHANG E KARLSRUHER TEST e 85 bis 170 Punkte Mit etwas Flei wird aus Ihnen em EDV Experte e 18 bis 84 Punkte Machen Sie eine m glichst steile Karriere au erhalb der EDV und suchen Sie sich f hige Mitarbeiter e 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 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
370. ottom up Entwurf 27 break C 124 129 Bubblesort 48 Builder 35 C C 14 C 8 15 Obfuscated C 278 Objective C 16 C 8 15 C XSC 17 195 C9X 14 calloc 3 258 case C 124 cast Operator 119 cb 22 35 75 cc 19 33 cc 19 ccom 19 cdecl 84 cflow 46 75 Chaos Computer Club 365 char C 87 SACHVERZEICHNIS chatr 69 chmod 75 ci RCS 49 close 64 116 co RCS 49 COBOL 12 Codierung Programm 17 23 Common Gateway Interface 271 compact Speichermodell 178 Compiler 4 18 32 Compiler Treiber 19 Compilerbau 7 compress 1 223 Computer Aided Software Engineering 56 Concurrent Versions System 55 Configuration Management 56 configure make 38 const C 83 Constructor 182 Container 193 continue C 127 129 Contra vermes 41 core 74 creat 75 Cross Compiler 19 ctime 61 curses 3 176 233 curses h 176 233 cxref 47 75 Datei Datei 226 Deskriptor 116 Include D 215 326 Kennung 19 SACHVERZEICHNIS Mode 69 mtime 35 Pointer 117 Strukturtyp 92 System 280 Datenaustausch 28 Datenstruktur 28 82 Debugger absoluter D 40 symbolischer D 40 default C 124 Definition 82 Deklaration 82 dekrementieren 109 115 delta 55 dereferenzieren 96 115 DIN 66230 222 Disassembler 20 do while Schleife C 126 Dokumentation 221 Dotprecision 199 double C 86 Doxygen 223 Dualsystem 291 dynamische Bindung 20 dynamische Speicherverwaltung 258 Editor emacs 1 32 nedit 1 32 v
371. pecification 225 410 size 75 sizeof Operator 120 Skalarprodukt 199 Slapper 375 Slot 205 small Speichermodell 178 SMALLTALK 8 17 81 Software Configuration Management 56 Software Engineering 23 Source Code Control System 55 Speicher dynamische Verwaltung 258 Register 105 Segmentierung 178 Speichermodell 33 178 Speicherbedarf 83 Speicherklasse C auto 105 107 extern 105 register 105 static 105 107 Speicherplatz C 82 splint 34 Sprung C 129 srand 3C 237 srandom 3M 237 Standard C Bibliothek 171 Standard Mathematik Bibliothek 174 Standardbibliothek 170 178 Standard Template Library 193 stat 64 static C 105 239 statische Bindung 20 stdio h 172 215 237 SACHVERZEICHNIS stdlib h 237 string 64 String 90 98 257 String Deskriptor 61 string h 172 Stringfunktion 172 strings 48 75 strip 75 strncmp 64 struct C 91 Structured Query Language 8 Struktur Datenstruktur 28 82 Programmstruktur 26 28 Strukturverweis C 115 Subarray 197 switch C 124 Syntax Diagramm 77 Syntax Pr fer 34 sys stat h 64 Systemaufruf 57 172 314 Target make 35 Template 193 terminfo 4 233 Texinfo 225 Textfile 76 time 41 59 75 time 2 237 time h 237 times 43 tiny Speichermodell 178 Token 76 Top down Entwurf 26 Treiber Compilertreiber 33 Trennzeichen C 76 Typ abstrakter Datentyp 181 SACHVERZEICHNIS alphanumerischer T 87 Array 90 Attribut 83 Aufz hlungstyp 94 Bitfeld 93 280 boolesc
372. pital 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 B 4 LATIN 1 ISO 8859 1 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 337 340 341 342 343 344 345 346 347 350 351 352 353 354 355 356 357 360 361 362 363 364 365 366 367 370 371 372 373 374 375 376 377 df e0 el e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef m OOMOO amp Mo Dir Or oO Or m E Le EI Gr Gee Jk e eoeo o Di Leit 313 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 letter 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 Lati
373. pressly provided 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 re ceived copies or rights from you under this License will not have their licenses terminated so long as such parties remain in full compliance 5 You are not required to accept this License since you ha ve not signed it However nothing else grants you permis sion to modify or distribute the Program or its derivative works These actions are prohibited by law if you do not ac cept this License Therefore by modifying or distributing the Program or any work based on the Program you in dicate your acceptance of this License to do so and all its 350 ANHANG F GNU LIZENZEN 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 recipient automatically receives a li cense 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 exer cise 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
374. 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 i a tb write Die Summe direkt ist Tir writeln s s 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 148 KAPITEL 1 PROGRAMMIEREN IN C C external 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 s s psv a b write Die Summe ist writeln s write Die Summanden sind write a writeln b s Ber a b Write Dre Summe ist E Ke writeln s write Die Summanden sind write a writeln b end Quelle 1 47 PASCAL Programm das Parameter by value und by reference an PASCAL Funktio
375. r e Der Bytebedarf 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 zugehorigen Variablen bekannt sein Variablen vom Typ void lassen sich nicht verarbeiten weil sie nicht existieren Man be zeichnet den Typ void als unvollstandig da er nicht alle Fahig keiten eines vollstandigen 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 Poin ter 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 90 KAPITEL 1 PROGRAMMIEREN IN C C 1 3 6 4 Zusammengesetzte Typen Arrays Strukturen Arrays Die meisten Programmiersprachen kennen Arrays auch als Vektoren oder ungl cklicherweise als Felder bezeich net das sind geordnete Mengen von Gr en desselben Typs Je dem Element ist ein fortlaufender Index Hausnummer zuge ordnet der in C stets mit 0 beginnt In einem Array von zw lf Elementen l uft also der Index von 0 bis 11 aufpassen Elemente eines Arrays d rfen Konstanten oder Variable aller einfachen Typen andere Arrays Strukturen Unions oder Poin ter sein jedoch keine Funktionen Dateien sind formal Struktu ren ein Array von Dateien ist also erlaubt Die Deklaration von Arrays sieht folgenderma en
376. r Pro grammiersprache C Eine Funktion bernimmt beim Aufruf Ar 18In HP UX In ANSI C ist eine Standardfunktion time 3 enthalten 1 2 PROGRAMMER S WORKBENCH 59 gumente oder Parameter und gibt ein Ergebnis zurtick Dieser Mechanismus wird Parametertibergabe 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 time 2 verwen det time 2 liefert die Zeit in Sekunden seit 00 00 00 Green wich Mean Time 1 Januar 1970 Computeruhren laufen b rigens erstaunlich ungenau falls sie nicht durch eine Funk uhr oder ber das Netz synchronisiert werden Ferner brau chen wir die Standardfunktion gmtime 3 Beschreibung unter ctime 3 die aus den obigen Sekunden eine Struktur erzeugt die Datum und Uhrzeit enth lt Die Umrechnung von Greenwich auf Karlsruhe nehmen wir selbst vor Eleganter w re ein R ck griff auf die Zeitzonen Variable der Umgebung Laut Referenz Handbuch hat time 2 die Syntax long time long 0 Die Funktion verlangt ein Argument vom Typ Pointer auf long integer und zwar im einfachsten Fall den Nullpointer Der Re turnwert 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
377. r allem sparsamer Umgang mit dem Arbeitsspeicher Das ist heute im mer noch eine Tugend tritt aber hinter den vorgenannten Kri terien zur ck Die moderne Software scheint zur Unterst tzung der Chiphersteller geschrieben zu werden An zweiter Stellekam Ausf hrungsgeschwindigkeit trotz aller Geschwindigkeitsstei gerungen der Hardware ebenfalls noch eine Tugend wenn sie mit Einfachheit und bersichtlichkeit einhergeht Mit anderen Worten erst ein bersichtliches Programm schreiben und dann nachdenken ob man Speicher und Zeit einsparen kann Ein Programm soll benutzerfreundlich sein Der Benutzer am Terminal will bei allt glichen Aufgaben ohne das Studium pfundschwerer Handb cher auskommen und bei den h ufigs ten Fehlern Hilfe vom Bildschirm erhalten Er will andererseits auch nicht mit berfl ssigen Informationen und nutzlosen Spie lereien bel stigt werden Der Schwerpunkt der Programment wicklung liegt heute weniger bei den Algorithmen sondern bei der Interaktion mit dem Benutzer F r einen Programmierer ist es nicht immer einfach sich in die Rolle eines EDV Laien zu ver setzen 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 vor dass ein Programm von anderen weiterentwickelt oder erg nzt wird zweitens ist ein Programm eine von mehreren M glichkeiten einen Algorithmus oder einen komplexen Zusammenhang darzustellen
378. r als Argu mente wird irgendein undefinierter Speicherinhalt gelesen un ter Umst nden auch der dem Programm zugewiesene Speicher bereich 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 Com piler werden die Typen char und short intern als int und float als double verarbeitet In solchen F llen mu dem Ma kro 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 bestimm ter Programmschritte wobei das Ergebnis eines Schrittes als Eingabe f r die n chste Wiederholung dient Viele mathema tische N herungsverfahren machen von Iterationen Gebrauch Programmtechnisch f hren Iterationen auf Schleifen Entspre chend mu eine Bedingung angegeben werden die die Iterati on beendet Da auch bei einem richtigen Programm eine Iterati on manchmal aus mathematischen Gr nden nie zu einem Ende kommt ist es zweckm ig einen Test f r solche F lle einzubau en wie in folgendem Beispiel x Quadratwurzel Halbierungsverfahren 14 08 92 x x Compileraufruf cc o wurzel wurzel c x define EPS 0 00001 define MAX 100 include lt stdio h gt 158 KAPITEL 1 PROGRAMMIEREN IN C C void exit int main int argc char xargv
379. rig cat 13 main write cat cat Hello world cat putchar cathy i Zuerst wird eine globale Variable cat per Default vom Typ int auf 13 gesetzt Dann wird der System aufruf write 1 Hello world 13 ausgef hrt der 13 Zeichen des Strings Hello world nach stdout Da teideskriptor 1 schreibt anschlie end die Standardfunktion putchar 10 Der Gebrauch des un ren Minuszeichens samt der bitweisen Negation ist ungewohnt Man mu sich die Um rechnungen in Bits aufschreiben negative Zahlen werden durch ihr Zweierkomplement dargestellt Bei write 13 gibt 0000 0000 0000 0000 0000 0000 13 gibt 1111 1111 1111 1111 1111 1111 13 gibt 0000 0000 0000 0000 0000 0000 Le 713 gibt 0000 0000 0000 0000 0000 0000 was dezimal 1 ist Bei putchar 3 13 1 19 le Se ebe E e e E E e Ee 0000 1111 0000 1111 0000 1171 0000 1111 0000 0000 AL EST E 0000 0000 sieht die Geschichte so aus 0000 LELI 0000 1477 0000 1111 0000 oo el 0000 0000 LELI TLEL 0000 0000 was dezimal 10 ASCII Zeichen Linefeed ist F r FORTRAN 77 bleiben folgende Zeilen brig 0000 1111 0000 1111 0000 ILITI 0000 0000 t111 0000 1111 0000 2 244 0000 0000 1111 0000 0000 0000 VELL 0000 1174 0000 LELI 0000 11 007 11 00 11 00 11 01 193 01 101 280 KAPITEL 1 PROGRAMMIEREN IN C C write Hel
380. rim gt prim gprofile Eine stark gek rzte Analyse mittels gprof 1 sieht so aus Stime 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 seconds the number of seconds accounted for by this function alone This is the major sort for this listing calls the number of times this function was invoked 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 525 12 18 12 18 SSremU 1 2 PROGRAMMER S WORKBENCH 43 22 2 17 38 ER SSmulU 20 8 22 25 4 87 333332 0 01 ttest Sech 22 74 0 49 9890 0 05 _doprnt 0 8 22 2983 0 19 _mcount 0 6 23 08 0 15 SSdivide_by_const 0 6 23 22 0 14 1 140 00 main Se 23 29 0 07 9890 0 01 _memchr D MEN 0 05 _write_sys Geek 23 36 0 02 9890 000 Sprinter EH 23 37 0 01 9887 0 00 _write 0 0 23 38 0 01 9887 0 00 _xflsbuf 0 0 23 39 0 00 9890 0 00 _wrtchk 0 0 2339 0 00 1 0 00 _sscanf 0 0 23 39 0 00 1 0 00 _start EH 23239 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 aufgeru fen 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
381. ritt 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 Cnt unsigned char Se EE unsigned char a base short _flag char file FILE 1 3 BAUSTEINE EINES QUELLTEXTES 93 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 An schlie end lassen sich Variable vom Typ FILE oder auch Datei pointer deklarieren FILE myfile yourfile FILE xfp Dies ist ein dritter Weg den wir im Abschnitt Weitere Namen f r Typen auf Seite 103 kennenlernen In C C sind alle Dateien ungegliederte Folgen von Bytes Bytestreams so dass es keinen 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 Strukturkom ponenten sind einzelne Bits oder Gruppen von Bits die ber ihren Komponentennamen angesprochen werden Eine Bitfeld Struktur darf keine weiteren Komponenten enthalten und soll m glichst vom Basistyp unsigned sein Ein einzelnes Bitfeld darf maximal die L nge eines Maschinenwortes haben es kann also nicht ber eine Wortgrenz
382. rom any other section titles You may add a section entitled Endorsements provided it con tains nothing but endorsements of your Modified Version by va rious 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 from the pre vious 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 relea sed under this license under the terms defined in section 4 above for modified versions provided that you include in the combina tion all of the Invariant Sections of all of the original documents unmodified and list them all as Invariant Sections of your com bined work in its
383. rschiedene Deklarationen chmod 2 getut 3 Auch diese Liste ist vom Compiler und damit von der Hardwa re abh ngig So findet man die include Datei dos h nicht auf UNIX Anlagen sondern nur bei Compilern unter MS DOS f r PCs D 6 Praprozessor Anweisungen Der erste Schritt beim Compilieren ist die Bearbeitung des Quelltextes durch den Pr prozessor Dieser entfernt den Kom mentar und f hrt Ersetzungen und Einf gungen gem der fol genden Anweisungen directives aus e define buchst bliche Ersetzung einer symbolischen Kon stanten oder eines Makros Ist kein Ersatz angegeben wird nur der Name als definiert angesehen f r ifdef H ufig e undefine l scht die Definition eines Namens e error f hrt zu einer Fehlermeldung des Pr prozessors 328 ANHANG D C LEXIKON include zieht die angegebene Datei herein H ufig if else elif endif falls Bedingung zutrifft werden die nachfolgenden Pr prozessor Anweisungen aus gef hrt ifdef ifndef falls der angegebene Name defi niert bzw nicht definiert ist werden die nachfolgenden Pr prozessor Anweisungen ausgef hrt line f hrt bei Fehlermeldungen zu einem Sprung auf die angegebenen Zeilennummer pragma veranla t den Pr prozessor zu einer systemab h ngigen Handlung E Karlsruher Test Nicht jedermann eignet sich f r so schwierige Dinge wie die elek tronische Datenverarbeitung Um Ihnen die Entscheidung zu er leichtern ob Sie in di
384. ruck sizeof x liefert die Gr e von x in Bytes als vorzeichenlose Ganzzahl zu r ck sizeof wird w hrend der bersetzung ausgewertet nicht jedoch vom Pr prozessor und verh lt sich zur Laufzeit wie eine konstante ganze Zahl 1 3 7 10 Vorrang und Reihenfolge Es gibt in C C hnlich wie in der Mathematik genaue Re geln ber den Vorrang precedence der Operatoren Es ist je doch nicht sicher dass alle C Compiler sich genau an die Vor gaben des ANSI Vorschlags halten Zudem hat man beim Pro grammieren meist nicht alle Regeln im Kopf so dass es besser ist die Ausdr cke durch runde Klammern klar und eindeutig zu kennzeichnen berfl ssige Klammerpaare st ren den Com piler nicht Hier die Liste der Operatoren von C mit nach unten abnehmendem Rang Co Ek Fi cast x amp sizeof A x lt lt gt gt Z E E See je rn t amp 1 3 BAUSTEINE EINES QUELLTEXTES 121 SS o N A ll V V a gt Zuerst werden also die runden Klammern ausgewertet wie in der Mathematik haben sie Vorrang vor allen anderen Operato ren au er den drei weiteren in derselben Zeile Am schw chsten bindet der Komma Operator Neben ihrem Rang haben Operatoren eine Assoziativit t oder Leserichtung associativity Die Auswertung eines Aus drucks wie atb tc ist durch Vorrang nicht eindeutig zu kl ren da die beiden Plus zeichen denselben Rang haben Dieser Fal
385. s 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 316 ANHANG C UNIX SYSTEMAUFRUFE utime setzt Zeitstempel eines Files wait wartet auf Ende eines Kindprozesses write schreibt in ein File Die Aufz hlung kann durch weitere Systemaufrufe des jewei ligen Lieferanten des Betriebssystems z B Hewlett Packard erg nzt werden Diese erleichtern das Programmieren ver schlechtern aber die Portabilit t Zu den meisten Systemaufru fen 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 verwen det werden Laut ANSI verwendet C folgende Schl sselw rter Wortsymbole keywords e Deklaratoren auto Default Speicherklasse kann weggelassen wer den char Zeichentyp const Typattribut neu in ANSI C 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 Registervariab
386. s so they know their rights We protect your rights with two steps 1 copyright the soft ware and 2 offer you this license which gives you legal permis sion to copy distribute and or modify the software Also for each author s protection and ours we want to make certain that everyone understands that there is no warranty for this free software Ifthe 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 soft ware 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 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
387. se das Mo dell small Das Modell tiny 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 Segment 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 mehre re Segmente f r Programmcode zur Verf gung bis zur Grenze des freien Arbeitsspeichers Typische Anwendungen sind l nge re Programme mit wenigen Daten 1 5 FUNKTIONS BIBLIOTHEKEN 179 Das Modell compact verh lt sich umgekehrt wie medium ein Segment f r den Code mehrere Segmente f r die Daten Geeig net f r kurze Programme mit vielen Daten Ein einzelnes Da tenelement 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 n kung auf aber die Beschr nkung auf die Gr e des freien Ar beitsspeichers 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
388. senschaftlicher 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 371 Erste m ig erfolgreiche Personal Computer Xerox Altair Die Firma Microsoft Corporation von WILLIAM HENRY GATES III und PAUL ALLEN gegr ndet 1976 STEVEN P JOBS und STEPHAN G WOZNIAK gr nden 1977 1978 1979 1980 1981 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 GRAY 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
389. siehe Linux FreeBSD NetBSD OpenBSD und andere Programmierer nicht das Marketing haben die Ziele gesetzt Die UNIXe haben von Anfang an gemischte Hardware und die Zusammenarbeit meh rerer Benutzer unterst tzt In Verbindung mit dem X Window iii iv System einem netzf higen Fenstersystem sind die UNIXe un ter den Betriebssystemen mittlerer Gr e die leistungsf higs ten Linux UNIX Rechner waren von Anbeginn im Internet da bei 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 Linux UNIX funktioniert reibungslos Warum das Internet Das Internet ist das gr te Computer netz dieser Erde ein Zusammenschluss vieler regionaler Netze Urspr nglich auf Hochschulen und Beh rden beschr nkt sind mittlerweile auch Industrie Handel und Privatpersonen betei ligt Unser berufliches Leben und zunehmend unser privates Dasein werden vom Internet ber hrt Eine Email Anschrift ist so wichtig geworden wie ein Telefonanschluss Als Informations quelle ist das Netz unentbehrlich Bei der Stoffauswahl habe ich mich von meiner Arbeit als Be nutzer Verwalter und Programmierer leiten lassen Besonderer Wert wird auf die Erl uterung der zahlreichen Fachbegriffe ge legt die dem Anf nger das Leb
390. sig keinen Wert zur ckzugeben Dann ist die Funktion vom Typ void und macht sich allein durch ihre Nebeneffekte bemerkbar F r die Systemaufrufe von UNIX und die Standardfunktio nen von C ist im Referenz Handbuch in den Sektionen 2 und 3 angegeben von welchem Typ die Argumente und der Funktions wert sind Da diese Funktionen allesamt C Funktionen sind las sen sie sich ohne Probleme in C Programme einbinden Bei ande ren Sprachen ist es denkbar da kein einem C Typ entsprechen der Variablentyp verf gbar ist Auch bei Strings gibt es wegen der unterschiedlichen Speicherung in den einzelnen Sprachen 1 4 FUNKTIONEN 139 Reibereien Falls die bergabemechanismen unvertr glich sind mu man die C Funktion in eine Funktion oder Prozedur der anderen Sprache so verpacken da das aufrufende Programm eine einheitliche Programmiersprache sieht Das Vorgehen da bei 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 Sum manden by value beziehungsweise 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
391. splay 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 e XDrawRectangle mydisplay mywinl mygcl En 200 120 120 break process mouse button presses Case ButtonPress XSetFont mydisplay mygcl XLoadFont mydisplay vxms 37 XDrawlImageString myevent xbutton display myevent xbutton window myevent xbutton x myevent xbutton y hi strlen hi XSetFont mydisplay mygcl XLoadFont mydisplay vrb 25 break Ja process keyboard mapping changes x case MappingNotify mygcl 1 11 WEITERE C PROGRAMME 271 XRefreshKeyboardMapping amp myevent Quelle 1 95 C Programm f r das X Window System mit Funk tionen 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 11 cgi Programme Die Abk rzung cgi bedeutet Common Gateway Interface Das ist ein Protokoll zum Gedankenaustausch zwischen HTML Forms und Programmen Die Programme k nnen in jeder Spra che verfasst sein die es erm glicht von stdin zu lesen nach stdo
392. ssehen 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 Verzeichnis ses weiter Eine Anwendung ist ein aus mehreren Kapiteln be stehendes Skriptum das komplett als Report formatiert werden soll dazu noch die Kapitel in jeweils einem eigenen Unterver zeichnis als Artikel samt Folien Nat rlich sind die Makefiles in den Unterverzeichnissen weiche Links auf ein einziges Makefi le Ohne make 1 und eine entsprechende Verzeichnisstruktur w rde man sich dumm und d mlich tippen Im GNU Projekt wird Software im Quellcode f r verschiede ne 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 Ubung im Gebrauch von make 1 er leichtert die Einrichtung von GNU Software daher erheblich Oft wird ein an das eigene System angepa tes Makefile erst durch ein Kommando configure erzeugt Die Reihenfolge bei sol chen Programmeinrichtungen lautet dann configure vi Makefile make make install make clean wobei make install Schreibrechte in den betroffenen Ver zeichnissen erfordert also meist Superuserrechte Gelegentlich wird make 1 aus einem Shellskript heraus aufgerufen das 1 2 PROGRAMMER S WORKBENCH 39 einige D
393. t Users Glossary Fes LE pun tere pur rey GECL3O7 Exe 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 Worterbuch und Glossar IBM Terminology http www 3 ibm com ibm terminology W Alex Abk rzungs Liste ABKLEX Informatik Tele kommunikation http www ciw uni karlsruhe de abklex html http www ciw uni karlsruhe de abklex pdf Rund 9000 Abk rzungen aus Informatik und Tele kommunikation M Broy O Spaniol Lexikon Informatik und Kommuni kationstechnik Springer Berlin Heidelberg 1999 863 S 377 378 ANHANG H ZUM WEITERLESEN E Kajan Information Technology Encyclopedia and Acronyms Springer Berlin Heidelberg 2002 720 S E S Raymond The New Hacker s Dictionary The MIT Press Cambridge 1996 547 S Siehe auch http www ciw uni karlsruhe de kopien jargo Begriffe aus dem Netz die nicht im Duden stehen 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 Betriebs systeme am Beispiel von UNIX T Flik
394. t komplexe 1 Loesungen write x x xl xic write x x 2 he Xx2C goto 100 endif endif Siege eee Zen G Programmende Eeer 100 stop end Quelle 1 102 FORTRAN Programm Quadratische Gleichung mit reellen Koeffizienten Eine Analyse des Quelltextes ergibt e Das Programm besteht aus einer Datei mit einem Haupt programm e es kommen reelle und komplexe Variable vor es wird Gleitkomma Arithmetik verwendet aber keine Komplex Arithmetik was die bertragung nach C erleich tert e an Funktionen treten abs sqrt und cmplx auf 1 13 PORTIEREN VON PROGRAMMEN 287 e an Kontrollanweisungen werden if then else endif 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 Ar ray of float oder double an Eine Struktur w re auch m glich Falls komplexe Arithmetik vork me m ten wir uns die Ope rationen selbst schaffen Hier werden aber nur die komplexen Zahlen ausgegeben was harmlos ist Das goto wird hier nur ge braucht um nach der Ausgabe der L sung ans Programmende zu springen Wir werden in C daf r eine Funktion done auf rufen Das nach C bertragene Programm x Loesung der quadratischen Gleichung a x x Dax c reelle Koeffizienten Loesungen auch komplex zu compilieren mit cc
395. t l sst sich die Verwendbarkeit von Programmteilen ver bessern Diese Strategie wird als Top down Entwurf bezeich net Man geht vom Allgemeinen ins Einzelne 1 1 9 3 Zusammensetzen aus Teilaufgaben Der umgekehrte Weg Bottom up Entwurf liegt nicht so nahe Es gibt wiederkehrende Grund Operationen wie Su chen Sortieren Fragen Ausgeben Interpolieren Zeichnen ei nes Kreisbogens Aus diesen l sst sich eine gegebene Aufgabe zu einem gro en Teil zusammensetzen so dass nur wenige spezi elle Teilaufgaben brig bleiben Hat man die Grundoperationen einmal programmiert so vereinfacht sich der Rest erheblich In praxi wendet man eine gemischte Strategie an Man zer legt die bergeordnete Aufgabe in Teilaufgaben versucht die se in Grundoperationen auszudr cken und kommt dann wieder aufsteigend zu einer genaueren und allgemeiner g ltigen For mulierung Dieser Ab und Aufstieg kann sich mehrmals wieder holen Die Aufgabenstellung ist nicht unver nderlich Genau so geht man bei der Planung von Industrieanlagen vor Man darf nicht den Fehler machen die Aufgabe aus Bequem lichkeit den Eigenheiten eines Computers oder einer Program miersprache 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 Unzu l nglichkeiten herhalten musste sind vorbei 28 KAPITEL 1 PROGRAMMIEREN IN C C 1 1 10 Prototyping In dem h uf
396. t letztes gelesenes Zeichen zur ck vfprintf schreibt formatiert aus einer Argumenten liste vprintf schreibt formatiert aus einer Argumenten liste 324 ANHANG D C LEXIKON vsprintf schreibt formatiert aus einer Argumenten lsite e 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 floor gr te Ganzzahl fmod Divisionsrest frexp teilt Gleitkommazahl auf ldexp teilt Gleitkommazahl auf log Logarithmus naturalis log10 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 f r Array free gibt allokierten Speicher frei malloc allokiert Speicher realloc ndert Gr e des allokierten Speichers D 3 STANDARDFUNKTIONEN 325 e Prozesssteuerung abort erzeugt SIGABRT Signal atexit Funktionsaufruf bei Programmende e xit Programmende raise sendet Signal S S ignal legt Antwort auf Siganl fest ystem bergibt Argument an Kommandointerpreter e Suchen und Sortieren bsearch bin re Suche qsort Quicksort e Stringbehandlung S S u u S S S S S u S S S S tr
397. t 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 zur ck vor die Schleife bei der for Schleife vor die Initialisierung Der Sys temaufruf exit 2 veranlasst den sofortigen Abbruch des gan zen Programmes ist also f r unheilbare Ausnahmezust 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 geschachtelt werden Mit mehrfach ge schachtelten 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 Ein fluss Dort sollte man nur die allern tigsten Anweisungen hin einschreiben Auch die Bedingung der innersten Schleife sollte so einfach und knapp wie m glich gefasst sein 30Sogenannter Zaunpfahl Fehler fencepost error Wenn Sie bei einem Zaun von 100 m L nge alle 10 m einen Pfahl setzen wieviele Pf hle brauchen Sie 9 10 11 130 KAPITEL 1 PROGRAMMIEREN IN C C Sprung Es gibt die A
398. temp 0 count do temp t while temp 0 amp amp xtemp amp x temp if count 0 return NULL x Array allozieren last first malloc sizeof first x count 1 if last NULL return NULL first count key first count value NULL while query 0 x einen Parameter extrahieren x last gt key query do querytt while guery 0 amp amp query amp if xquery XD Aqueryrr ZS x in key und value splitten last gt value last gt key do last gt valuett t while last gt value 0 amp amp last gt value if last gt value 0 last gt value t xx Tripel umwandeln x unescape_str last gt key unescape_str last gt value last 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 278 KAPITEL 1 PROGRAMMIEREN IN C C seln parsen des Strings der Verarbeitung der einzelnen Wer te und der Ausgabe eines HTML konformen Dokumentes nach stdout Dieses Dokument schickt der Webserver an den anfra genden Brauser zur ck Das wars Fehler macht
399. ternen Programmodulen die bereits voriibersetzt und in Bibliotheken zusammengefa t sind Beispiele sind Ausgaberou tinen oder mathematische Funktionen Der ausfiihrbare Code dieser externen Module wird erst vom Linker mit dem Pro grammcode vereinigt so da ein vollst ndiges ausf hrbares Pro gramm entsteht Es gibt die M glichkeit die externen Module erst zur Laufzeit hinzuzunehmen das hei t dynamisches Lin ken und spart Speicherplatz Dabei werden die Module entwe der beim Laden des Programms in den Arbeitsspeicher oder erst bei ihrem Aufruf hinzugeladen load on demand Benutzen meh rere Programme ein in den Arbeitsspeicher kopiertes Modul ge meinsam anstatt jeweils eine eigene Kopie anzulegen so kommt man zu den Shared Libraries und spart nochmals Speicher platz Die Aufrufe lauten cc 1 77 1 90 1 und pc 1 Diese Kommandos rufen Compilertreiber auf die ihrerseits die eigentlichen Compiler lib ccom 77comp 90comp und pascomp starten und noch weitere Dinge erledigen Ohne Optionen rufen die Compilertreiber auch noch den Linker bin ld 1 auf so dass das Ergebnis ein lauff higes Pro gramm 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 beispielsweise so aus CC source c 147 inker werden auch Binder Mapper oder Loader genannt Manchmal wird auch zwischen Binder und Loader unterschie
400. tf Die Summe ist d n fsr amp a amp b printf Die Summanden sind d gd n a b 1 4 FUNKTIONEN 143 return 07 Quelle 1 40 C Programm das Parameter by reference an eine FORTRAN Funktion bergibt Die Linker Option 1c1 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 Re ferenzen auf FORTRAN oder PASCAL Routinen unter Um st 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 x C Programm csummep das PASCAL Funktionen aufruft x x Compiler cc o csummep csummep c psv o psr o lcl x include lt stdio h gt A um extern int psv int x int y psr int x int xy Si int main int a b puts Bitte die beiden Summanden eingeben scanf td Sd ka amp b printf Die Summanden sind d gd n a b printf Die Summe direkt ist d n a Pik printf Die Summe ist d n psv a b printf Die Summanden sind d ich ine a b printf Die Summe ist d n psr amp a amp b printf Die Summanden sind d sd n ap Eckes re
401. tf n tDie Rechnung brauchte lds zeit2 zeitl printf die Ausgabe ld s n zeit3 zeit2 return 0 x Ende Hauptprogramm x Funktion zum Testen der Teilbarkeit x x Parameteruebergabe zwecks Zeitersparnis vermieden z void ttest register int i 1 11 WEITERE C PROGRAMME 251 for i 1 p i zs x p i lt z i if z x p i return x z teilbar x p n z x z prim 27 return Quelle 1 89 C Programm zur Berechnung von Primzahlen mit Pointern anstelle von Arrayindizes Zur Laufzeit zeigt sich da die meiste Zeit auf die Ausga be verwendet wird Daher die Programmiererweisheit Einga be Ausgabe vermeiden Am Algorithmus und seiner Verwirkli chung etwas zu optimieren bringt f r die Gesamtdauer prak tisch 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 das Klammernpaar ist der Poin ter auf ihren Anfang Es gibt Arrays von Pointern das ist nichts Besonderes Also gibt es auch Arrays von Pointern auf Funktio nen Anhand eines Beispiels wollen wir uns eine Verwendungs m glichkeit und einige syntaktische Feinheiten ansehen Dabei kommt auch make 1 nochmal zur Geltung sowie ein bi chen Grafikprogrammierung x schiff c Befeuerung und Schallsignale nach BinSchStro MS Quick C DOS
402. tf und Systemaufrufen wie stat 2 werden Sie viele Unbekannte treffen Auskunft ber diese erhalten Sie mittels der man Seiten beispielsweise man ruserok man insque sofern die Funktionen zum Gebrauch durch Programmierer und nicht etwa nur f r interne Zwecke bestimmt sind 172 KAPITEL 1 PROGRAMMIEREN IN C C 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 ge h renden Bibliothek In der Regel sind die Funktionen vorzuzie hen da die Programme dann leichter auf andere Systeme ber tragen werden k nnen Die Eigenheiten der Systeme werden durch die Bibliothek verdeckt In diesem Fall ist im Programm kopf stets die Include Datei stdio h einzubinden include lt stdio h gt Diese Zeile ist fast in jedem C Programm zu finden In der Stan dardbibliothek 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 stdin sind Stringfunktionen Strings sind in C Arrays of Characters ab geschlossen mit dem ASCII Zeichen Nr 0 also nichts Besonde res Trotzdem machen sie wie in vielen Programmiersprachen Schwierigkeiten wenn man ihre Syntax nicht beachtet In der Standard C Bibliothek steht eine reiche Auswahl von String funktio
403. tgelegt sein oder w hrend der Ausf hrung berech net 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 Quell code gibt es nicht Das u erste ist mit einem Disassembler aus dem ausf hrbaren Code Assemblercode zu erzeugen ohne Kommentar und typografische Struktur Nur bei kurzen einfa chen Programmen ist dieser Assemblercode verst ndlich 1 1 GRUNDBEGRIFFE 21 1 1 7 Qualit t und Stil Unser Ziel ist ein gutes Programm Was hei t das im einzel nen Ein Programm soll selbstverst ndlich fehlerfrei sein in dem Sinn dass es aus zul ssigen Eingaben richtige Ergebnis se 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 Ein gabe oder der Peripherie vern nftig reagieren nicht mit einem Absturz Das Schlimmste ist wenn ein Programm trotz eines Fehlers ein scheinbar richtiges Ergebnis ausgibt Die Fehlerbe handlung macht oft den gr eren Teil eines Programmes aus und wird h ufig vernachl ssigt Die Sprache C erleichtert die se Aufgabe Ein Programm ist niemals fertig und soll daher lei
404. tion number f hrt zur Anzei ge der Zeilennummern die jedoch nicht Bestandteil des Textes werden Eine Zeile set lisp ist eine Hilfe beim Eingeben von LISP Quellen Steht der Cursor auf einer Klammer so l t das Kommando den Cursor zur Gegenklammer springen und dort verbleiben Auch beim emacs 1 gibt es einige Wege das Schreiben von Quellen zu erleichtern insbesondere 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 Id Auf das Schreiben der Quelltexte mit einem Editor folgt ihre bersetzung in die Sprache der jeweiligen Maschine mittels ei nes Ubersetzungsprogrammes meist eines Compilers Jedes 1 2 PROGRAMMER S WORKBENCH 33 vollst ndige UNIX System enth lt einen C Compiler Compiler fiir weitere Programmiersprachen sind optional Auf unserer An lage 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 Zeit schriften WWW Seiten und Netnews kompiliert Ein Compiler tibersetzt den Quellcode eines Programmes in Maschinensprache Die meisten Programme enthalten Aufrufe von ex
405. tte 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 Massenspeicher 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
406. turn 0 Quelle 1 41 C Programm das Parameter by value und by re ference an PASCAL Funktionen bergibt Hiernach sollte klar sein warum die C Standardfunktion printf 3 mit Variablen als Argument arbeitet w hrend die 144 KAPITEL 1 PROGRAMMIEREN IN C C hnliche C Standardfunktion scanf 3 Pointer als Argument verlangt printf 3 gibt Werte aus ohne sie zu ndern Es ist f r das Ergebnis belanglos ob die Funktion Adressen Pointer oder Kopien der Variablen verwendet die Syntax legt das aller dings fest Hingegen soll scanf 3 Werte mit Wirkung f r die aufrufende Funktion 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 ver schiedenen 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 FORTRAN Programm das C Funktionen aufruft C Compileraufruf f77 o fsummec fummec f csv o csr o program fsummec SALIAS csv Sval Sval 100 FOS 104 105 integer a write read write S a write 6 I 6 P 6 call by va S write write cal S write write format format format format format end csv a 6 6 1 by ref esr a 6 6 b 100 a 102 103 lue b 104 102 b 105 102 S
407. uch hier braucht sich der Programmierer nicht um die Einzelheiten der Speicherung und der Zugriffe zu k mmern das hat die Biblio thek bereits erledigt Ein Adaptor schlie lich macht das was auch andere Adap ter machen er pa t das Aussehen einer Schnittstelle an neue Erfordernisse an er verpackt einen Iterator oder einen Contai ner in eine neue Umh llung Damit wird nicht ein neues Objekt geschaffen sondern nur seine Au enseite ver ndert Das ist oft mals effektiver als ein neues Objekt zu schreiben Um die STL ganz zu verstehen mu man sie benutzen Da sie aufeiner hohen Abstraktionsebene zu Hause ist machen sich ihre Vorteile erst bei umfangreicheren Aufgaben bemerkbar F r Hallo Welt Programme ist sie einige Nummern zu gro Wir ver 1 7 KLASSEN BIBLIOTHEKEN 195 weisen 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 Fur numerische Aufgaben wurde im Institut fiir Angewand te Mathematik der Universit t Karlsruhe eine Klassenbiblio thek C XSC als Erg nzung eines C Compilers entwickelt Das K rzel XSC ist als Extended Scientific Computing zu deu ten Die wichtigsten Bestandteile von C XSC sind e Arithmetik reeller und komplexer Zahlen sowie Intervalla rithmetik mit mathematisch bestimmten Eigenschaften e dynamische Vektoren und Matrizen mit zur Laufzeit ver nderbarer Gr e e Teilfelder Subarrays aus Vektoren und Matrizen e arithm
408. ude Dateien im selben Verzeichnis wie die Programmquelle Die Datei Kennung h ist blich aber nicht notwendig Als Beispiel sehen wir uns die h ufig gebrauchte Datei lt stdio h gt in gek rzter Form an ZA SRevision 1 1 1 1 216 KAPITEL 1 PROGRAMMIEREN IN C C ifndef _NFILE define _NFILE 60 define BUFSIZ 1024 buffer size for multi character output to x unbuffered files a define _SBFSIZ 8 typedef struct int _cnt unsigned char _ptr unsigned char zx base short _flag char _file FILE x x _IOLBF means that a file s output will be buffered x line by line x In addition to being flags _IONBF _IOLBF and _IOFBF x are possible values for type in setvbuf define _IOFBF 0000 define _IOREAD 0001 define _IOWRT 0002 define _IONBF 0004 define _IOMYBUF 0010 define _IOEOF 0020 define _IOERR 0040 define _IOLBF 0200 define _IORW 0400 ifndef NULL define NULL 0 endif ifndef EOF define EOF 1 1 9 PR PROZESSOR 217 endif define stdin amp _iob 0 define stdout amp _iob 1 define stderr amp _iob 2 ifndef lint define get p gt _cnt lt 0 _filbuf p int o Pp e pti define putc x p p gt _cnt lt 0 _flsbuf unsigned char x p int p gt _ptr unsigned char x define getchar getc stdin define putchar x putc x stdout define clearerr p
409. um Eine besondere Methode mit demsel ben Namen wie die Klasse ist der Constructor der zur In itialisierung 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 ckga bewert eines bestimmten Typs auch nicht des Typs void Nun ein funktionsf higes wenn auch simples Beispiel Es rechnet die Zeiten von UTC nach MEZ um x mez cpp Beispiel fuer den Gebrauch einer Klasse in Anlehnung an Deitel Deitel S 601 x 1 6 KLASSEN include lt iostream h gt class TIME public TIME void Settime int int void Gettime void Printmez private int int int hour minute hin min k Definition der Methoden i L Tf E Les s L G i IA Ei 183 fuer Ein und Ausgabe Definition einer Klasse nach aussen sichtbar Methoden Default Constructor Initialisierung h m in UTC setzen UTC einlesen von stdin MEZ ausgeben nicht nach aussen sichtbk Daten Guar 28 Dias 59 Eingabe von stdin Initialisierung mittels Constructor TIME TIME hour minute 0 Zeit in UTC eingeben pruefen void TIME Settime int h int m hour h gt H amp amp h lt 23 h 1 0 UTC nach MEZ minute m gt 0 amp amp m lt 60 m 0 Zeit an UTC von stdin einlesen void TIME Gettime cout
410. ument free of added material If you use the lat ter 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 location 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 Docu ment under the conditions of sections 2 and 3 above provided that you release the Modified Version under precisely this licen se with the Modified Version filling the role of the Document thus licensing distribution and modification of the Modified Ver sion 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 dis tinct from that of the Document 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 f
411. und Matrizen zur Verf gung Subarrays sind beliebige rechteckige Ausschnitte aus Ar rays Alle vordefinierten Operatoren nehmen auch Subarrays als Operanden an Ein Subarray einer Matrix oder eines Vektors 198 KAPITEL 1 PROGRAMMIEREN IN C C wird ber den Operator oder ber den Operator angespro chen 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 AG i die linke obere i x i Submatrix Man beachte da die Klammern in der Deklaration eines dynamischen Vektors oder einer ebensolchen Matrix kein Subarray bezeichnen sondern den Indexbereich des anzulegen den Objektes einschlie en Der Operator erzeugt ein Subar ray 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 rvector und Alilljl ist das Gite Element von A mit dem Typ real Beide Arten des Zugriffs auf Subarrays k nnen auch verbun den 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 j for k J 1 k lt n k A k j A k j alj 3 A k j 1 n Ak J t Ien ARIEI A Ar eg Dieses Beispiel nutzt zwei wichtige M glichkeiten von C XSC Erstens sparen wir uns ein
412. und leben nur innerhalb des Blockes in dem sie deklariert wurden Durch die Zuordnung zur Speicherklasse static verl ngert man ihre Lebensdauer nicht ihren Geltungsbereich ber das Ende des Blockes hinaus Bei einem erneuten Aufruf des Blockes hat ein static Operand den Wert den er beim vorherigen Verlassen des Blockes hatte 1 3 6 10 Geltungsbereich Eine Variable gilt nur innerhalb des Bereiches Programmab schnittes zu dessen Beginn sie deklariert worden ist Ihr Sichtbarkeits oder Geltungsbereich scope ist dieser Bereich 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 Zusammenhang bedeu tungslos Ein Bereich ist e ein Programm e eine Funktion e ein logischer Block zwischen und e eine Datei Variable die vor allen Funktionen in der Regel vor main deklariert werden gelten infolgedessen global in allen Funk tionen die in derselben Datei deklariert werden das hei t im ganzen Programm wenn dieses nur aus einer Datei besteht Va riable die zu Beginn einer Funktion vor allen Anweisungen in der Funktion deklariert werden gelten innerhalb dieser Funk tion aber nicht au erhalb Sie sind lokal g ltig Variable die zu Beginn eines Blockes vor allen Anweisungen im Block dekla riert werden gelten nur in diesem Block Das kommt selten vor ist aber v llig i
413. ung i r un r Bezugsrahmen global l bin r Bezugsrahmen Klasse f l bin r Bezugsrahmen Namensraum l un r Klammerung Funktion 1 un r Index gt l bin r Auswahl l 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 A r un r Dereferenzierung amp r un r Referenzierung r bin r cast Operator new r un r dynamische Speicherbelegung delete r un r dynamische Speicherfreigabe gt x l bin r Auswahl Wi l bin r Auswahl A l bin r Multiplikation l bin r Division D 3 STANDARDFUNKTIONEN 321 l bin r Modulus Divisionsrest l bin r Addition l bin r Subtraktion lt lt 1 bin r bitweises Shiften links gt gt l bin r bitweises Shiften rechts lt 1 bin r kleiner als lt l bin r kleiner gleich gt l bin r gr er als gt l bin r gr er gleich 1 bin r Gleichheit l l bin r Ungleichheit amp l bin r bitweises Und A l bin r bitweises exklusives Oder l bin r bitweises Oder amp amp l bin r logisches Und l bin r logisches Oder Ss
414. unktion zur ck Dieser Wert kann ein ein Pointer sein e In C darf eine Funktion sich selbst aufrufen rekursiver Aufruf e Assemblerfunktionen innerhalb eines C Programms k n nen den Ablauf beschleunigen Einfacher wird das Pro gramm dadurch nicht 1 4 10 bung Funktionen Jetzt verf gen Sie ber die Kenntnisse die zum Schreiben ein facher C Programme notwendig sind Schreiben das Programm zur Weganalyse aufbauend auf der Aufgabenanalyse und der Datenstruktur die Sie bereits erarbeitet haben Falls Sie sich an den Vokabeltrainer wagen wollen reduzieren Sie die Aufgabe zun chst auf ein Minimum sonst werden Sie nicht fertig damit 15 Funktions Bibliotheken 1 5 1 Zweck und Aufbau Eine Funktion kann auf drei Wegen mit einem C Hauptprogramm main verbunden werden e Die Funktion steht in derselben Datei wie main und wird daher gemeinsam kompiliert Sie muss wie main in C geschrieben sein mehrsprachige Compiler gibt es nicht e Die Funktion steht unter Umst nden mit weiteren Funk tionen in einer eigenen Datei 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 Com pilierung darf die Datei in einer anderen Programmierspra 170 KAPITEL 1 PROGRAMMIEREN IN C C che geschrieben mu aber f r dieselbe Maschine kompi liert sein e Die getrennt kompilierte Funktion st
415. unsigned int_print arg 0 field break case Lir switch x format 1 case d 1 4 FUNKTIONEN 155 Sig ivar va_arg pvar long lt 0 arg unsigned long ivar lt 0 ivar int prance arg sig field break case ui arg va_arg pvar unsigned long int_print arg 0 field break default va_end pvar return 1 format break case Si fputc format break case c fputc va_arg pvar break case ei String while break default va_end pvar return 1 stdout char va_arg pvar char zi fputc x string t format x Funktion zur Ausgabe der dezimalen Ganzzahl stdout unbekannter x unbekannter Typ stdout END S Typ x void int_print unsigned long number int signum int field int i char table 21 long radix 10 for i 0 i lt 21 i x table i x Umwandlung Zahl nach ASCII Zeichen d h 156 KAPITEL 1 PROGRAMMIEREN IN C C for i 0 i lt 20 i x table i 0123456789 number number radix if number 0 break x Vorzeichen x if signum x table i Ausgabe gt if field 0 amp amp field lt 20 1 field while i gt 0 fputc x table i stdout x Ende x Quelle 1 53 C Funktion mit wechselnder Anzahl von Argumen ten Nach der include Datei varargs h fo
416. ut zu schreiben und au erdem Umgebungsvariable auszu werten 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 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 INPUN text name eingabe gt lt INPUT type submit gt 272 KAPITEL 1 PROGRAMMIEREN IN C C 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 ty 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 enth 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
417. uug dk JTC1 SC22 wG14 Erfahrungsgem dauert es einige Jahre bis die Compiler einen neuen Standard voll unterst 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 Pro grammierer gro e Freiheiten having the best parts of FORT RAN and assembly language in one place und f hrt in der Regel zu schnellen Programmen da vielen C Anweisungen un 6Das vergleichsweise schlanke Buch von K amp R ist die erste Lekt re sobald man einfache C Programme schreiben kann ber die Beschreibung von C hin aus birgt es wertvolle allgemeine Hinweise zum Pro grammieren 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 herunterladen 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 Karlsruhe Hoffentlich geht das nicht so weiter 1 1 GRUNDBEGRIFFE 15 mittelbar Assembler Anweisungen entsprechen Maschinenn he Die Sprache hat einen kleinen Kern wenige Schl sselw r ter Erweiterungen und Hardwareabh ngigkeiten stecken in den Biblioth
418. weise main while und if Diese Wortsymbole oder Schl sselw rter d rfen auf keinen Fall als Namen verwendet werden die Na men der Standardfunktionen wie printf oder fopen sol len 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 317 Mit C kommen nochmal drei ig dazu Unterboten wird C C darin nur von SMALLTALK mit f nf Schl sselw rtern 22Es gibt die Bezeichnungen Wortsymbol Schl sselwort und reserviertes Wort Gemeint ist in jedem Fall dass das Wort ei ne bestimmte Zeichenfolge nicht uneingeschr nkt als Namen verwendet werden darf In C d rfen diese W rter au er im Kommentar keinesfalls f r einen anderen als ihren besonde ren Zweck verwendet werden In FORTRAN d rfen diese W rter in Zusammenh ngen die eine Deutung als Schl sselwort aus schlie en auch als Namen verwendet werden Man darf also ei ne Variable if nennen und in der Zuweisung if 3 wird die Zeichenfolge if als Variable und nicht als Wortsymbol im Sinne von falls verstanden 82 KAPITEL 1 PROGRAMMIEREN IN C C 1 3 6 Operanden Wir schr nken hier den Begriff Daten etwas ein und verstehen darunter nur die passiven Objekte mit denen ein Programm et was tut also Text Zahlen Grafiken usw Diese Objekte und ih re Untereinheiten nennen wir Operanden operand Mit ihnen werden Operationen durchgef hrt
419. wohnt sind Unter Aus nutzen der Pointer Arithmetik gilt aber auch ptag 1 2 ptag 1 2 ptag 1 2 ptag 1 2 n Fur den Computer ist Pointer Schreibweise mit weniger Arbeit verbunden da er Adressen kennt und Indizes erst in Adressen umrechnen mu x array2 c Indizes und Pointer include lt stdio h gt 102 KAPITEL 1 PROGRAMMIEREN IN C C char al abcd x Array of chars int main printr al21 Sein 2D printf x a 2 c n x a 2 printf 2 a c n 2 a printer e 2 lal sein 2la return 0 Quelle 1 23 C Programm zur Verdeutlichung der Pointerarith metik Nun eine leicht verr ckte aber richtige berlegung Wir de klarieren und initialisieren einen String a Mit Hilfe der Stan dardfunktion printf geben wir das Element mit der Haus nummer 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 Jetzt f llt uns ein dass die Addition auch in der Pointer Arithmetik kommutativ ist wir vertauschen die beiden Summanden Erwar tungsgem geht das gut Schlie lich wandeln wir die Pointer Schreibweise wieder zur ck in die Index Schreibweise unter Bei behaltung der vertauschten Reihenfolge Auch das funktioniert logisch Pointer und Variable geh ren verschiedenen Referenzebe nen level an die nic
420. xs isdigit s 1 s 1 0 tolower s 1 isdigit s 2 s 2 EE tolower s 2 memmove s 1 s 3 i 2 1 11 WEITERE C PROGRAMME 275 I x Gibt den query string zurueck wenn keine Fehler auftre x ansonsten NULL Unterscheidet dabei zwischen GET und P x Darf bei POST nur einmal aufgerufen werden char xget_query char xp q size_t len REQUEST_METHOD suchen p getenv REQUEST_METHOD if p NULL return NULL x keine REQUEST_METI x 1 Fall GET x if stremp p GET 0 p getenv QUERY_STRING if p NULL return NULL x kein QUERY_STRING len strlen p if len lt 1 len gt MAX_OUERY_LEN return NULL q malloc len 1 if q NULL return NULL memmove q p len 1 x spart Linken von lt return q x 2 Fall POST x else if strcmp p POST 0 p getenv CONTENT_LENGTH if p NULL return NULL x keine CONTENT_LENC len strtoul p NULL 0 if len lt 1 len gt MAX_QUERY_LEN return NULL q malloc len 1 if q NULL return NULL if fread g 1 len stdin lt len return NULL x Laenge von stdin lt CONTENT_ q len 0 return q x 3 Fall weder noch kann von diesem Programm nicht behandelt werden x else return NULL 276 KAPITEL 1 PROGRAMMIEREN IN C C Gibt eine linked list des geparsten query string zurueck x wenn keine Fehler auftreten ansonsten NUL
421. y C 365 Boole G 365 Brattain W H 365 Bricklin D 365 Cailliau R 365 Cerf V G 371 Codd E F 371 Crocker S 365 Diffie W 371 Eckert J P 365 Engelbart D C 365 Fibonacci 365 Frankston B 365 Gibson W 365 Heilig M 365 Hellmann M E 371 Hewlett W 365 Hollerith H 365 Hopper G 365 Hopper G M 12 Jacquard J M 365 Jobs S P 371 Kahn R E 371 Kemeny J 13 Kernighan B 14 26 Kernighan B W 381 Kilby J St C 365 Knuth D E 365 379 Kurtz T 13 Lamport L 384 Leibniz G W 365 Licklider J C R 365 Link E 365 Mauchly J W 365 Metcalfe R 365 Mill H 365 Minsky M L 365 Morse S F B 365 Murdock I 374 Napier J 365 Nass I 29 Naur P 78 Nelson T 365 Neumann J von 365 Nickel K 368 370 Oikarinen J 373 Packard D 365 Pascal B 365 Pisa L von 365 Plauger P J 26 Postel J B 365 Poulsen W 365 Reis J P 365 Remington E 365 Ritchie D 14 Sanger L M 375 402 PERSONENVERZEICHNIS Schickard W 365 Shannon C E 365 375 Shneiderman B 29 Shockley W B 365 Shugart A 371 Stallman R M 365 Steinbuch K 365 376 397 Stroustrup B 15 365 389 Sutherland I E 365 Tanenbaum A S 380 391 Thompson K 14 Tichy W F 48 Torvalds L B 365 Turing A 365 Volkerding P 374 Wales J D 375 Weissinger J 365 Wirth N 13 387 Wozniak S G 371 Zemanek H 397 Zuse
422. ynonym Der Zweck neuer Typnamen ist eine Verbesserung der Lesbarkeit und Portierbarkeit des Quell textes Einige Beispiele Wir wollen uns einen Typnamen BOOLEAN schaffen der zwar im Grunde nichts anderes ist als der Typint 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 Bend 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 nachbilden 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 104 KAPITEL 1 PROGRAMMIEREN IN C C COMPLEX z R 20 z ist eine komplexe Variable R ein Array von 20 komplexen Va riablen Leider ist damit noch nicht alles erledigt denn die arith metischen Operatoren von C gelten nur fiir Ganz und Gleit kommazahlen nicht f r Strukturen Wir m ssen noch Funktio nen fiir die Operationen mit komplexen Variablen schreiben In FORTRAN hingegen gelten die gewohnten arithmetischen Ope ratoren auch fiir komplexe Daten In C lassen sich die Bedeu tungen der Operatoren erweitern iiberladen ab
423. 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 co de we recommend releasing these examples in parallel under your choice of free software license such as the GNU General Public License to permit their use in free software G Zeittafel Ausf hrlichere Angaben sind den im Anhang Zum Weiterle sen in Abschnitt Geschichte auf Seiete aufgef hrten Werken zu entnehmen Die meisten Errungenschaften entwickelten sich ber manchmal lange Zeitspannen so dass vor einige Jahreszah len um etwa zu setzen ist 10E8 Der beliebte Tyrannosaurus hatte zwei Finger an jeder Hand 2000 und rechnete vermutlich im Dualsystem wenn berhaupt Die Babylonier verwenden f r besondere Aufgaben ein gemischtes Stellenwertsystem zur Basis 60 400 In China werden Z hlst bchen zum Rechnen verwendet 20 In der Bergpredigt wird das Bin rsystem erw hnt Matth 5 37 Die R mer schieben Rechensteinchen calculi 600 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 1200 LEONARDO VON PISA genannt FIBONACCI setzt sich f r die Einf hrung des indisch arabischen Systems im Abendland ein 1550 Die europ ischen Rechenmeister verwenden sowohl die r mische als auch d
424. zahlen mit Funktion 241 1 88 C Programm void Pointer 246 1 89 C Programm Primzahlen 251 1 90 C Programm Array von Funktionspointern 254 1 91 C Funktion bilderc 255 1 92 Makefile zu schiff c 257 1 93 C Programm Dynamische Speicherverwaltung 259 1 94 C Programm Sortieren nach Duden 264 1 95 C Programm X Window System Xlib 271 1 96 Webseite cgi_test 2 2 2222er 272 1 97 Include Datei cgi h 22222020 273 1 98 C Programm cgi_test c 274 1 99 C Funktionen cc 277 1 100 ALGOL Programm 283 1 101 C Programm ggT nach Euklid 284 1 102 FORTRAN Programm Quadratische Gleichung 286 Programme und andere Quellen 1 103 C Programm Quadratische Gleichung e e e e e xviii Programme und andere Quellen Zum Gebrauch e Hervorhebungen im Text werden kursiv dargestellt e Titel von Ver ffentlichungen oder Abschnitten kurze Zita te oder w rtliche Rede werden im Text kursiv markiert e In Aussagen ber W rter werden diese kursiv abgesetzt e Stichw rter f r einen Vortrag oder eine Vorlesung erschei nen fett e Namen von Personen stehen in KAPIT LCHEN e Eingaben von der Tastatur und Ausgaben auf den Bild schirm werden in Schreibmaschinenschrift wiederge geben e Hinsichtlich der deutschen Rechtschreibung befindet sich das Manuskript in einem bergangsstadium e Hinter Linux UNIX
425. zum Trinken 1 Hafen 1 Steckdose f r Peripherieger te 2 maschinell lesbarer Code 2 Geheimsprache im 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 332 ANHANG E KARLSRUHER TEST Character was manchen Politikern fehlt 1 Schriftzeichen 2 Wasserfall 0 333 BetriebssystemKonzern 0 Traktor Treiber Animator Hackbrett emulieren Font Server Yabbawhap Terminal 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 fiir bewegte Grafik 2 Musikinstrument 1 Werkzeug im Hackbau 0 Tastatur 2 nachahmen 2 Ol in Wasser verteilen 0 entpflichten 0 Menge von Schriftzeichen 2 SoBengrundlage 1 Hintergrund Geldmenge 0 Brettsegler 0 Kellner 0 Computer f r Dienstleistungen 2 Datenkompressionsprogramm 2 Kriegsruf der Siidstadt Indianer 0 was zum Essen 0 Schnittstelle Mensch Computer 2 Bahnhof oder Hafen 1 Zubehor zu Drahttauwerk 1 334 ANHANG E KARLSRUHER TEST Ampersand Sand aus der Amper 1
Download Pdf Manuals
Related Search
Related Contents
Planet Technology WAP-4036 User's Manual Hama 74118609 flat panel wall mount Alpha 6000 series ac drive user manual Télécharger Samsung NP900X3F Kullanıcı Klavuzu (Windows 7) Train Dispatcher 3 M.. - Train Dispatcher Simulation Omni WA-36 AS-i 3.0 Sicherheitsmonitor für 2 AS-i-Kreise Manual do Usuário Copyright © All rights reserved.
Failed to retrieve file