ebook img

Praxis der C-Programmierung für UNIX, DOS und MS-Windows 3.1/95/NT PDF

278 Pages·1997·3.41 MB·German
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Praxis der C-Programmierung für UNIX, DOS und MS-Windows 3.1/95/NT

Informatik & Praxis Jürgen Dankert Praxis der C-Programmierung Informatik & Praxis Herausgegeben von Prof. Dr. Helmut Eirund, Fachhochschule Harz Prof. Dr. Herbert Kopp, Fachhochschule Regensburg Prof. Dr. Axel Viereck, Hochschule Bremen Anwendungsorientiertes Informatik-Wissen ist heute in vielen Arbeits zusammenhängen nötig, um in konkreten Problemstellungen Lösungs ansätze erarbeiten und umsetzen zu können. In den Ausbildungsgän gen an Universitäten und vor allem an Fachhochschulen wurde dieser Entwicklung durch eine Integration von Informatik-Inhalten in sozial-, wirtschafts- und ingenieurwissenschaftliche Studiengänge und durch Bildung neuer Studiengänge - z. B. Wirtschaftsinformatik, Ingenieur informatik oder Medieninformatik - Rechnung getragen. Die Bände der Reihe wenden sich insbesondere an die Studierenden in diesen Studiengängen, aber auch an Studierende der Informatik, und stellen Informatik-Themen didaktisch durchdacht, anschaulich und ohne zu großen "Theorie-Ballast" vor. Die Bände der Reihe richten sich aber gleichermaßen an den Praktiker im Betrieb und sollen ihn in die Lage versetzen, sich selbständig in ein in seinem Arbeitszusammenhang relevantes Informatik-Thema einzuar beiten, grundlegende Konzepte zu verstehen, geeignete Methoden an zuwenden und Werkzeuge einzusetzen, um eine seiner Problemstel lung angemessene Lösung zu erreichen. Praxis der C-Programmierung für UNIX, DOS und MS-Windows 3.1/95/NT Von Prof. Dr.-Ing. habil. Jürgen Dankert Fachhochschule Hamburg m B. G. Teubner Stuttgart 1997 Prof. Dr.-Ing. habil. Jürgen Dankert Geboren 1941, von 1961 bis 1966 Studium des Maschinenbaus an der Techni schen Hochschule Magdeburg, 1971 Promotion zum Dr.-Ing., 1979 Habilitation. Von 1984 bis 1987 Mitarbeiter in der Firma Hewlett-Packard in Böblingen, von 1987 bis 1990 Professor für Technische Mechanik an der Fachhochschule Frank furt/Main, seit 1990 Professor für Mathematik und Informatik an der Fachhoch schule Hamburg. Alle in diesem Buch erwähnten Firmen-und Produktnamen wie Borland, DOS, IBM, Java, Li nux, Microsoft, MS-Visual-C, Turbo-C, UNIX, Windows 3.1, Windows 95, Windows NT u. a. sind gesetzlich geschOtzt, ohne daß im einzelnen darauf hingewiesen wird. Die Deutsche Bibliothek - CIP-Einheitsaufnahme Dankert, Jürgen: Praxis der C-Programmierung für UNIX, DOS und MS-Windows 3.1, 95, NT / von JOrgen Dankert. - Stuttgart : Teubner, 1997 (Informatik & Praxis) ISBN 978-3-519-02994-6 ISBN 978-3-322-94773-4 (eBook) DOI 10.1007/978-3-322-94773-4 Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschOtzt. Jede Verwertung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verla ges unzulässig und strafbar. Das gilt besonders fOr Vervielfältigungen, Übersetzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen © B. G. Teubner Stuttgart 1997 Vorwort Nur wenige höhere Programmiersprachen haben es geschafft, über mehrere Jahrzehnte erfolgreich zu sein. Die Sprache C gehört zweifelsfrei dazu und ist im Gegensatz zu anderen Sprachen, die eine vergleichbar lange Zeit überleben konnten, gerade in den letzten Jahren immer beliebter geworden. Und weil sie in der dominierenden objektorientierten Sprache C++ komplett enthalten ist, kann man ihr wohl ein noch langes Leben prophezeien (allerdings gelten in der Informatik Voraussagen schon dann als "Langzeit-Prognose", wenn sie einen Zeitraum von fünf Jahren umfassen). C-Programmierung gilt als schwierig. Ich kann aus eigener Erfahrung in der Lehre bestätigen, daß der Anfänger tatsächlich mehr Schwierigkeiten als mit anderen Programmiersprachen hat. Aber nach einer gewissen "Durststrecke" zahlen sich die Mühen aus. Wenn die Anfangs Schwierigkeiten überwunden sind, können nach vergleichsweise kurzer Zeit schon anspruchs vollere Probleme gelöst werden. Das setzt allerdings voraus, daß auch die Konzepte dafür gelehrt werden, denn es nützt wenig, sich durch die Problematik der "Pointer" und der "rekursiven Strukturen" hindurchzuquälen, wenn man nicht auch mit den verketteten Listen und den binären Bäumen die Datenstrukturen und dazu die rekursive Programmiertechnik behandelt, die diese Konzepte intensiv benutzen. Schließlich ist der Erfolg beim Erlernen einer Programmiersprache weitgehend auch vom Spaß abhängig, den man bei aller Mühe unbedingt haben sollte. Das schönste Ergebnis, ein funktionierendes Programm aus eigener Fertigung, sollte sich allerdings möglichst auch "so schön" präsentieren, wie es die professionell erzeugte Software tut. Dazu sind Kenntnisse der Windows-Programmierung heute unerläßlich. Das vorliegende Buch ist aus Skripten entstanden, die ich meinen Studenten als Begleitmate rial für Vorlesung und Praktika zur Verfügung stelle. Das darin verfolgte Prinzip, nicht streng themengebunden vorzugehen, sondern an Programm-Beispielen nach und nach alle wichtigen Probleme abzuhandeln, hat sich auch für das Selbststudium bewährt. Um dem Leser eine Hilfe bei der Kontrolle seiner Lern-Fortschritte zu geben, werden jeweils am Ende der Kapitel 3 bzw. 8 "Zwischenbilanzen" gezogen, die gegebenenfalls zum "Zurückblättern" auffordern sollen. Für die gezielte Suche nach speziellen Themen ist das Sachverzeichnis manchmal hilfreicher als das Inhaltsverzeichnis, es ist deshalb besonders umfangreich. Viele Informationen werden über die Kommentare der Beispiel-Programme vermittelt, die im Buch abgedruckt sind und unbedingt vom Lernenden "mit dem Computer nachempfunden" werden sollten. Sie brauchen nicht abgetippt zu werden, sie sind über die im Abschnitt 1.3 angegebene Internet-Adresse verfügbar (oder über den auf Seite 268 beschriebenen Weg zu beziehen). Dort findet man auch die Lösungen zu den Aufgaben, allerdings nur als ausführ bare Programme, mit denen man sich das Ziel der eigenen Bemühungen ansehen kann. Das Programmieren kann man nur erlernen, indem man programmiert. Das vorliegende Buch, die Beispiel-Programme und die ausführbaren Programme für die Aufgaben werden von mir als "Tutorial" bezeichnet, was andeuten soll, daß es nur Hilfen für eigene Bemühungen sein können. Um möglichst keine Einstiegshürden aufzubauen, habe ich bewußt auf spezielle 6 Vorwort Hilfsmittel zur Sprachbeschreibung verzichtet. Es werden weder eine "Metasprache" noch Syntax-Diagramme benutzt, die Erfahrungen in der Lehre haben mich sogar ermutigt, manche Programm-Konstruktionen zunächst nur eingeschränkt zu erläutern (zugunsten der Ver ständlichkeit), um erst später dem fortgeschrittenen Leser die gesamte Information darüber zuzumuten. Ganz konsequent verwende ich das Gemisch aus deutschen und englischen Worten, mit dem sich die Gemeinde der Computer-Benutzer verständigt. Ob es für den nicht-programmieren den "User" (da weiß man wenigstens, wer gemeint ist) hilfreich war, als die "Ctrl-Taste" zur "Strg-Taste" wurde, weiß ich nicht (merkwürdigerweise ist die "Escape-Taste" verschont geblieben, "Flucht", "Seitensprung", schöne deutsche Worte gäbe es schon). Für den Pro grammierer ist die "Eindeutschung" selten eine Hilfe gewesen. Schließlich kann ich nicht wissen, ob Sie unter MS-Windows 3.1 eine "Datei mit dem Datei-Manager in ein Verzeichnis bringen" oder mit MS-Windows 95 eine "Datei mit dem Explorer in einen Ordner ver schieben". In beiden Fällen finden Sie beim Arbeiten mit MS-Visual-C++ die Datei als "File in einem Directory" wieder, in der Version 1.5 in der "Visual workbench", ab Version 4.0 im "Developer studio". Dieses Beispiel bezog sich auf die Produkte einer einzigen Firma, andere Hersteller sind durchaus auch phantasievoll. Der Schreiber dieser Zeilen hat unter ver schiedenen Betriebssystemen Dateien "gelöscht" und "entfernt", hat den gleichen Effekt mit "erase", "deI" (delete) und "rm" (remove) erzielt, neuerdings "kann man mit der Entf-Taste Dateien in den Papierkorb verschieben" (Tip an die Hersteller der nächsten Version: "Entsorgen" gab es noch nicht). Es bleibt eigentlich nur die Flucht nach vorn, es wird konsequent "denglisch" gesprochen. Die Programme der Kapitel Ibis 7 basieren auf der ANS I-Norm der Sprache C (müßten von allen Compilern, die der Norm entsprechen, übersetzt werden können), in Kapitel 8 werden Besonderheiten unterschiedlicher Betriebssysteme und Compiler behandelt. Die ab Kapitel 9 vorgestellte Windows-Programmierung zielt auf das Arbeiten mit Windows 3.1, Windows 95 und Windows NT. Alle Programme wurden mit verschiedenen Compilern getestet. Für Hinweise auf Probleme bei Verwendung spezieller Compiler und Entwicklungsumgebungen bin ich dankbar. Bitte schicken Sie eine "e-mail" (gibt es dafür eigentlich ein brauchbares deutsches Wort?). Sollte ein Problem von allgemeinem Interesse sein, werde ich einen Hinweis über die Internet-Adresse, die im Abschnitt 1.3 angegeben ist, veröffentlichen. Bedanken möchte ich mich bei Herrn Prof. Kopp von der FH Regensburg für fachliche Hinweise und Herrn Dr. Spuhler, der das Erscheinen des Buchs im Teubner-Verlag er möglichte, und natürlich bei meiner Frau Helga, die das höchst undankbare Geschäft des Korrekturlesens übernommen hat. Natürlich hat sie auch für mein leibliches Wohl gesorgt und mir allerhand störende Dinge vom Hals gehalten (diejenigen, die es trotzdem geschafft haben, mich zu stören, lesen dieses Buch ohnehin nicht, deshalb bleiben sie ungenannt). Jesteburg, März 1997 J ürgen Dankert e-mail: [email protected] oder CompuServe 100430,3712 (aus dem Internet: [email protected] Inhalt 1 Betriebssysteme, Programmiersprachen 11 1.1 Betriebssysteme 12 1.2 Programmiersprachen 13 1.3 Empfehlungen für "Einsteiger" , "Umsteiger" , "Fortgeschrittene" 15 2 Hilfsmittel für die C-Programmierung 16 2.1 Compiler, Linker, Standard-Libraries 16 2.2 Editoren 17 2.3 Manuals, Lehrbücher 18 2.4 Benötigt man einen "Debugger"? 19 3 Grundlagen der Programmiersprache C 20 3.1 Wie lernt man eine Programmiersprache? 20 3.2 Vom Problem zum Programm 20 3.3 Das kleinste C-Programm "minimain.c" 21 3.4 C-Historie: Das "Hello, World"-Programm "hllworld.c" 22 3.5 Arithmetik und "for-Schleife": Programm "hptokw01.c" 25 3.6 Einige Grenzwerte der Implementation: Programm "limits.c" 30 3.7 Bedingte Anweisung und "Casting": Programm "reihe01.c" 31 3.8 Zeitmessung mit clock 0: Programm "reihe02.c" 36 3.9 Standardfunktionen und "while-Schleife": Programm "valtab01.c" 38 3.10 Definition und Aufruf einer Funktion: Programm "valtab02.c" 42 3.11 Erster Kontakt mit Pointern: Programm "valtab03.c" 45 3.12 Formatgesteuerte Eingabe mit scanf: Programm "valtab04.c" 49 3.13 Stabilisierung der Eingabe: Programm "valtab05.c" 53 3.14 String-Konstanten als Funktionsargumente: Programm "valtab06.c" 56 3.15 Arrays und Strings: Programme "string1.c" und "syscall.c" 58 3.16 Zwischenbilanz 63 4 Arbeiten mit Libraries 72 4.1 Erzeugen einer Library 73 4.2 Einbinden einer persönlichen Library: Programm "valtab07.c" 76 4.3 Libraries mit Funktionen, die voneinander abhängig sind 78 4.4 Einbinden von Funktionen aus fremden Libraries 79 4.4.1 Ein mathematischer Parser für die "valtab"-Programme 81 4.4.2 Einbau von Parser-Librarv-Funktionen: Programm "valtab08.c" 83 8 Inhalt 5 Fortgeschrittene Programmiertechniken 88 5.1 Noch einmal: Strings und Pointer 88 5.2 Pointer-Arithmetik 97 5.3 Mehrdimensionale Arrays, Pointer-Arrays 101 5.4 Kommandozeilen-Argumente 105 6 File-Operationen und Speicherplatzverwaltung 107 6.1 Öffnen und Schließen eines Files, Zeichen lesen mit fgetc 107 6.2 Lesen und Schreiben mit fgetc und fputc, temporäre Files 110 6.3 Lesen mit fgets, formatiertes Lesen mit fscanf 114 6.4 Speicherplatz dynamisch allokieren 118 6.5 Speicherplatzverwaltung 123 6.5.1 Speicherklassen auto und static innerhalb von Funktionen 123 6.5.2 Externe Variablen 125 6.5.3 Sichtbarkeit von Variablen 126 6.5.4 Was man sonst noch zu diesem Thema wissen sollte 127 7 Strukturen, verkettete Listen 129 7.1 Definition von Strukturen, Zugriff auf die Komponenten 129 7.2 Strukturen in Strukturen, Pointer auf Strukturen 133 7.3 Rekursive Strukturen, verkettete Listen 135 7.4 Sortieren mit verketteten Listen: Programm femfile4.c 140 7.5 "Unions" und "Enumerations" 147 7.5.1 "Unions" 147 7.5.2 Aufzählungstyp enum 148 8 Rekursionen, Baumstrukturen, Dateisysteme 150 8.1 Baumstrukturen 151 8.2 Die Dateisysteme unter UNIX und DOS 153 8.3 Eine UNIX-Besonderheit: Links auf Files und Directories 154 8.4 File-Informationen über die Files eines Directories 155 8.4.1 UNIX-Version (GNU-C) 156 8.4.2 DOS-Version ("16-Bit-Welt") 163 8.4.3 Version für das "DOS-Fenster der 32-Bit-Welt" 166 8.4.4 Pflege der privaten Library 167 8.5 Erster rekursiver Funktionsaufruf, Scannen eines Directory-Trees 167 8.6 Selektives Listen der Files eines Directory-Trees: Programm "lst.c" 169 8.7 Sortieren mit einem binären Baum: Programm "lstsort.c" 172 8.8 Zwischenbilanz 178 9 Grundlagen der Windows-Programmierung 182 9.1 Das Windows-Konzept 183 9.2 Botschaften (Nachrichten, "Messages") 184 9.3 Das kleinste Windows-Programm "miniwin.c" 185 9.4 Windows-SkeleU-Programm "winskel.c" 194 Inhalt 9 9.5 Text- und Graphik-Ausgabe, der "Device context" 196 9.5.1 Die Botschaft WM_PAINT, Programm "Hello, Winworld" 196 9.5.2 "Gefüllte Flächen", die GDI-Objekte "Pen" und "Brush" 200 9.5.3 Zeichnen mit MoveToEx und LineTo, Programm "rosette1.c" 205 9.6 Maus-Botschaften, Programm "mouse1.c" 208 9.7 Textausgabe mit TextOut, die Funktion GetSystemMetrics 211 9.8 Fehlersuche in Windows-Programmen 214 10 Ressourcen 218 10.1 Menü und Message-Box, Programm "menu1.c" 218 10.2 Stringtable und Dialog-Box, Programm "dialog1.c" 222 10.2.1 Modale und nicht-modale Dialoge 222 10.2.2 Definition einer Dialog-Box, Ressourcen-Datei "dialog 1. rc " 223 10.2.3 Quelltext des Programms "dialog1.c" 225 10.3 Dialog-Funktion, Dialog-Box, Ressourcen-Editor 232 10.3.1 Ressourcen-Datei "hpkwin01.rc" 233 10.3.2 Programm "hpkwin01.c" 234 10.3.3 Erzeugen eines Dialog-Prototyps mit einem Ressourcen-Editor 239 10.4 Icon und Cursor 241 10.4.1 Erzeugen von Icons und Cursorformen 241 10.4.2 Ressourcen-Datei mit Icon, Cursor, Stringtable und Menü 243 10.4.3 Programm "cursor1.c" 244 11 C vertiefen oder C++ lernen? 252 11.1 Empfehlungen für die Vertiefung der C-Kenntnisse 252 11.2 Empfehlungen für das Lernen von C++ 254 Anhang A Ein Blick in die Speicherzellen 255 Al Stellenwertsysteme 255 A2 Darstellung von Integer-Werten im Rechner 257 A3 Darstellung von float- und double-Werten im Rechner Anhang B "Stack" und "Heap" 264 BI Der Stack 264 B2 Der Heap 267 Literatur 268 Sachverzeichnis 269 Begriffe mit identischer Bedeutung Die Sprachvermischung ist ohnehin nicht zu verhindern (siehe nebenstehende Abbildung mit MS-Visual-C++ 1.5 unter MS-Windows 3.11), es sei denn, man installiert nur englischsprachliche Programmversionen und liest nur entsprechende Bücher. Nachfolgend werden deshalb (alphabe tisch geordnet) besonders wichtige Begriffe zusammengestellt, die mit gleicher Bedeutung verwendet werden (nicht alle Varianten werden in diesem Buch benutzt, tauchen aber in Menüs der Entwicklungsumgebungen, Warnungen und Fehlermeldungen der Compiler usw. ständig auf). Ungeklärt bleibt: Schreibt man in einem deutschen Satz "der oder das Makro", "die oder "Denglisch" ("Verschieben", "Close", ... ) in das Directory" (Plural: "Directories", und der einem "Popup-Menü" (und das ist gar eine Genitiv?), "der oder das File" (diese Liste, eingedeutschte englisch-französische Wort deren Varianten aus aktuellen Fachbüchern kombination) stammen, ließe sich beliebig fortsetzen)? abbrechen = cancel allokieren (allozieren) (Speicherplatz) zuweisen Anchor pointer = Anker = Roo! pointer Botschaft = Message = Nachricht Button Schalttläche Character = Zeichen Character font Zeichensatz dose schließen Compiler Übersetzer Ctrl-Taste = Strg-Taste Datei File Directory = Ordner Verzeichnis Directory tree = Verzeichnisbaum Etikett (einer Struktur) = Structure tag Fenster = Window Floating-Point-Number Gleitkommazahl Macro = Makro Linker = (Programm-)V erbinder open = öffnen Pen Zeichenstift Pointer Zeiger Shift -Taste Umschalt-Taste String = Zeichen kette

Description:
Das Buch wendet sich sowohl an Studenten aller Fachrichtungen, in denen die C-Programmierung behandelt wird als auch an Praktiker, die Programmierkenntnisse im Selbststudium erwerben bzw. vertiefen wollen. Der Anfänger erlangt beim Durcharbeiten der Beispiel-Programme relativ schnell die Fähigkeit
See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.