Wie der Sportwagenfahrer muß aber auch der C-Programmierer darauf achten, daß er auf seinem Weg nicht zu viele Ecken abschneidet. Wie beim blechernen Vergleichsobjekt könnte das Ergebnis ein unentwirrbarer Knäuel sein, der dann auf dem Schrottplatz (sprich: im Papierkorb) möglicherweise am besten aufgehoben ist.
Martin Stübs
Durch den ANSI-Standard ist die Federung deutlich besser geworden - bei unverändert guter Straßenlage.
Der Autor
Inhaltsverzeichnis: Vorwort 1 Einleitung 1.1 Einordnung von C 1.2 Programmstruktur und grundlegende Eigenschaften 1.3 Hinweise zur Verwendung des Buchs 2 Wie man C-Programmierung beginnt 2.1 Das erste C-Programm 2.2 Berechnungen und Funktionsaufruf 2.3 Allgemeines über Deklarationen und Definitionen 2.4 Bedingte Ausführung und Programmschleifen 2.5 Zusammenfassung 3 Elemente der Syntax 3.1 Beschreibung der Metasprache 3.2 Liste der Syntaxelemente 4 Typen, Speicherklassen, Variablen und Konstanten 4.1 Typen und Definitionen 4.1.1 Numerische Typen und Variablendefinition 4.1.2 Typattribute 4.1.3 Array-Definition 4.1.4 Aufzählungstypen 4.1.5 Typumbenennungen mit typedef 4.1.6 Funktionsdefinitionen und -deklarationen 4.2 Namen, Speicherklassen und Initialisierung 4.2.1 Speicherklassen 4.2.2 Initialisierung 4.3 Konstanten 5 Operatoren und Ausdrücke 5.1 Typkonvertierung in Ausdrücken 5.2 Unäre Operatoren 5.3 Arithmetische Operatoren 5.4 Logische Operatoren 5.5 Bitweise Operatoren 5.6 Bedingter-Ausdruck-Operator 5.7 Zuweisungsoperatoren 5.8 Weitere Operatoren 5.9 Hierarchie und Gruppierung der Operatoren 6 Die C-Anweisungen 6.1 Die Zuweisung und die Ausdrucks-Anweisung 6.1.1 Wert einer Zuweisung 6.1.2 Typkonvertierung bei Zuweisungen 6.1.3 Zusammengesetzte Zuweisungsoperatoren 6.1.4 Inkrement-/Dekrement-Anweisungen 6.2 Zusammengesetzte Anweisungen und Blockstruktur 6.3 Die if-Anweisung 6.4 switch- und break-Anweisung 6.5 Die while-Anweisung 6.6 Die for-Anweisung 6.7 Die do-while-Anweisung 6.8 Die continue-Anweisung 6.9 Die return-Anweisung 6.10 Marken und goto-Anweisung 6.11 Die leere Anweisung 7 Funktionen und Programmstruktur 7.1 Schreibweise und Stellung im Programm 7.1.1 Funktionen und ihre Definition 7.1.2 Funktionsdeklaration und Prototypen 7.1.3 Funktionsaufruf 7.2 Kontrollfluß 7.3 Übergabe von Werten an Funktionen 7.4 Rekursive Funktionen 8 Pointer 8.1 Schreibweise und Umgang mit Pointern 8.2 Pointerarithmetik 8.3 Pointer und Arrays 8.4 Pointer als Funktionsparameter 8.5 Pointer-Arrays 8.6 Pointer auf Funktionen 8.7 Funktionsparameter der main-Funktion 9 Strukturen 9.1 Umgang mit Strukturen 9.1.1 Definition von Strukturtypen und Strukturen 9.1.2 Initialisierung von Strukturen 9.1.3 Referieren der Strukturkomponenten 9.2 Pointer auf Strukturen 9.3 Arrays von Strukturen 9.4 Der sizeof-Operator 9.5 Selbstreferierende Strukturtypen 9.6 Bit-Fields 9.7 Unions 10 Der C-Preprocessor 10.1 Ersetzen von Namen und Makros 10.1.1 Definition symbolischer Konstanten 10.1.2 Parametrisierte Namensersetzung (Makros) 10.1.3 Namensersetzung unwirksam machen 10.2 Einbinden anderer Quelldateien 10.3 Bedingte Übersetzung von Programmteilen 10.4 Zeilennummernkontrolle 10.5 Fehlermeldungen, Pragmas und Nulldirektiven 10.6 Vordefinierte Namen 11 Standardbibliothek für Ein-/Ausgabe 11.1 Standardein-/-ausgabebibliothek undZurück zur Bücherübersicht11.2 Ein-/Ausgabe von/nach Standardein-/-ausgabe 11.2.1 Zeichenweise Ein-/Ausgabe mit getchar und putchar 11.2.2 Formatierte Ausgabe mit printf 11.2.3 Formatierte Eingabe mit scanf 11.2.4 Formatierung im Speicher 11.3 Dateizugriff 11.3.1 Philosophie der UNIX- und MS-DOS-Dateien 11.3.2 Eröffnen von Dateien 11.3.3 Zeichen- und wortweise Ein-/Ausgabe 11.3.4 Zeilenweise Ein-/Ausgabe mit gets, puts, fgets und fputs 11.3.5 Objektweise Ein-/Ausgabe mit fread und fwrite 11.3.6 Formatierte Ein-/Ausgabe mit Dateien 11.3.7 Direkter Zugriff 11.3.8 Ein-/Ausgabepuffer-Kontrolle 11.3.9 Entleeren des Ausgabepuffers 11.3.10 Schließen von Dateien 11.3.11 Weitere Dateioperationen 11.4 Zwischenspeichern in Temporärdateien 11.4.1 System-Temporärdateien 11.4.2 Selbstverwaltete Temporärdateien 11.5 Datentransfer zwischen Prozessen über Pipes 11.5.1 Eröffnen von Pipes und Starten des zweiten Prozesses 11.5.2 Schließen von Pipes 11.6 Status- und Fehlerabfragen, Fehlermeldungen 12 Weitere Standardbibliotheksfunktionenen 12.1 Zeichenklassifizierungs- und -konvertierungsfunktionen 12.1.1 Klassifizierung von Zeichen 12.1.2 Konvertierungsfunktionen 12.2 String- und Speicherbehandlungsfunktionen 12.2.1 Stringfunktionen 12.2.2 Speicherbehandlung 12.3 Mathematische Funktionen 12.3.1 Arithmetische Funktionen 12.3.2 Transzendente Funktionen 12.3.3 Rundungsfunktionen 12.3.4 Trigonometrische Funktionen 12.3.5 Gleitkommazahlen-Manipulation 12.3.6 Fehlerbehandlung bei mathematischen Funktionen 12.4 Dienstleistungsfunktionen 12.4.1 Konvertierung von Strings in Zahlen 12.4.2 Pseudo-Zufallszahlengeneratoren 12.4.3 Speicherzuweisungsoperationen 12.4.4 Schnittstellen zur Programmumgebung 12.4.5 Suchen und Sortieren in Arrays 12.4.6 Ganzzahlige mathematische Funktionen 12.5 Überprüfen von Behauptungen, Fehlersuche 12.6 Nichtlokale Sprünge 12.7 Signale 12.8 Datum und Uhrzeit 12.9 Variable Parameterlisten 12.10 Grenzwerte in und 13 Schnittstellen zum UNIX-Betriebssystem 13.1 Ein-/Ausgabe 13.1.1 Dateieröffnung und -kreierung 13.1.2 Lesen und Schreiben 13.1.3 Direkter Zugriff 13.1.4 Schließen von Dateien 13.2 Weitere Systemaufrufe 13.2.1 Dateiverwaltung 13.2.2 Prozeßverwaltung 13.2.3 Interprozeßkommunikation, Networking und sonstige Informationen 14 Programmierstil 15 Bedienung der Programmierumgebung 15.1 Erstellen von Quelldateien 15.1.1 Formatieren von Quellprogrammen 15.1.2 Referenz-Verweis-Listen von Quellprogrammen 15.1.3 Kontrollflußdiagramme von Quellprogrammen 15.2 Compilieren und Linken von C-Programmen 16 Das Testen von C-Programmen 16.1 Prüfung von C-Programmen mit lint 16.2 Modultest 16.3 Debugging mit dem symbolischen Debugger sdb 16.4 Debugging mit dem Preprocessor 16.4.1 Unterbrechen der Ausführung 16.4.2 Bedingte Unterbrechung der Ausführung 16.4.3 Anzeigen und Ändern von Werten 16.4.4 Überspringen von Anweisungen 16.4.5 Anzeigen der Schleifenaufrufe mit Schleifenzählern 16.4.6 Anzeigen der Aufrufreihenfolge von Funktionen 17 Fehlermeldungen Anhang 1: Kurzliste der Anweisungen Anhang 2: Operatorenübersicht Anhang 3: Kurzliste der Funktionen Anhang 4: ASCII-Code-Tabelle Stichwortverzeichnis