Suchen und Finden
Service
Infos und Kontakt
Mehr zum Inhalt
Go to C-Programmierung - Das Lern- und Nachschlagewerk für den C-Programmierer. Erfolgreich durch Übungen, Beispiele, Programmierrezepte
GoTo C-Programmierung
1
Inhaltsverzeichnis
6
Rezeptübersicht
6
Vorwort
6
Teil I Grundlagen
6
1 Der Einstieg
6
2 Ausdrücke
7
3 Anweisungen
7
4 Der Präprozessor
8
5 Arrays
8
6 Funktionen
9
7 Datenstrukturen
9
8 Bildschirm-I/O
10
9 Datei-I/O
10
10 Zeiger • erster Teil
10
11 Zeiger • zweiter Teil
11
12 Tips und Tricks
12
Teil II Werkzeug
13
13 Compiler und Linker
13
14 GNU-Emacs
13
15 Debugging und Profiling
14
16 Projektverwaltung mit make
14
17 Versionskontrolle mit RCS
15
Teil III Referenz
15
18 Die Standard-Library
15
Anhang
15
A Syntax
15
B Operator-Reihenfolg
15
C Literaturhinweise
15
D Zeichensatztabellen
15
Stichwortverzeichnis
15
Rezeptübersicht
16
Vorwort
18
Vorwort zur 3. Auflage
18
Vorwort zur 2. Auflage
19
Vorwort zur 1. Auflage
19
Teil I - Grundlagen
22
1 Der Einstieg
24
1.1 Die Icons in diesem Buch
25
1.2 Zum Arbeiten mit dem Buch
25
1.2.1 Voraussetzungen
25
1.2.2 Ziel des Buches
26
1.2.3 Aufbau des Buches
26
1.2.4 Syntaxdiagramme
29
1.3 Das »hello-world«-Programm
30
1.3.1 Lexikalische Bestandteile
31
1.3.2 Kommentar
31
1.3.3 Hauptfunktion
32
1.3.4 Geschweifte Klammern
33
1.3.5 Anweisung
33
1.3.6 Semikolon
34
1.3.7 Stringkonstante
34
1.3.8 Namenskonventionen
34
1.4 Elementare Datentypen
35
1.4.1 Standardtypen
35
1.4.2 char
36
1.4.3 int
37
1.4.4 float und double
38
1.5 Literale Konstanten
39
1.5.1 char
39
1.5.2 int
40
1.5.3 float und double
41
1.5.4 Stringkonstanten
42
1.6 Definition von Variablen
42
1.6.1 Sichtbarkeit und Lebensdauer
43
1.6.2 Automatische und manuelle Initialisierung
46
1.7 Kompilieren und Linken von C-Programmen
47
1.7.1 Der Turnaround-Zyklus
47
1.7.2 Übersetzen der Beispielprogramme
49
1.8 Aufgaben zu Kapitel 1
49
1.9 Lösungen zu ausgewählten Aufgaben
51
2 Ausdrücke
58
2.1 Definitionen und Begriffe
59
2.1.1 Operator
59
2.1.2 Operand
59
2.1.3 Ausdruck
60
2.1.4 Rückgabewert
60
2.1.5 Gruppierung
62
2.1.6 Assoziativität
63
2.1.7 lvalues und rvalues
63
2.1.8 Nebeneffekte
63
2.2 Beschreibung der Operatoren
64
2.2.1 Arithmetische Operatoren
64
2.2.2 Zuweisungsoperatoren
67
2.2.3 Inkrement- und Dekrement-Operatoren
70
2.2.4 Relationale Operatoren
72
2.2.5 Logische Operatoren
75
2.2.6 Bitweise Operatoren
78
2.2.7 Sonstige Operatoren
82
2.3 Implizite Typkonvertierungen
89
2.4 Auswertungsreihenfolge
91
2.4.1 Sonderfälle
93
2.5 Ein-/Ausgaben
96
2.6 Aufgaben zu Kapitel 2
97
2.7 Lösungen zu ausgewählten Aufgaben
105
3 Anweisungen
114
3.1 Grundlegende Anweisungen
115
3.1.1 Ausdrucksanweisungen
115
3.1.2 Die leere Anweisung
117
3.1.3 Blöcke
117
3.2 Schleifen
120
3.2.1 while-Schleife
121
3.2.2 do-Schleife
123
3.2.3 for-Schleife
125
3.3 Bedingte Anweisungen
128
3.3.1 if-Anweisung
128
3.3.2 elseif-Anweisung
132
3.3.3 switch-Anweisung
133
3.4 Sprunganweisungen
136
3.4.1 break
136
3.4.2 continue
137
3.4.3 goto/Label
138
3.4.4 return-Anweisung
140
3.5 Aufgaben zu Kapitel 3
141
3.6 Lösungen zu ausgewählten Aufgaben
147
4 Der Präprozessor
160
4.1 Funktionsweise des Präprozessors
161
4.1.1 Phasen des Compilerlaufs
161
4.1.2 Präprozessor-Syntax
162
4.2 Einbinden von Dateien
162
4.2.1 Die #include-Anweisung
162
4.2.2 Standard-Header-Dateien
164
4.2.3 Eigene Header-Dateien
165
4.3 Makrodefinitionen
166
4.3.1 Die #define-Anweisung
166
4.3.2 Makros ohne Ersetzungstext
171
4.3.3 Parametrisierte Makros
171
4.3.4 Die #undef-Anweisung
174
4.4 Bedingte Kompilierung
175
4.4.1 Die #ifdef-Anweisung
175
4.4.2 Debugging
177
4.4.3 Portierbarkeit
178
4.4.4 Die #if-Anweisung
179
4.5 Sonstige Präprozessorfähigkeiten
181
4.5.1 Informationen über die Quelldatei abfragen
181
4.5.2 Der String-Operator #
181
4.5.3 Der -D-Schalter des Compilers
182
4.6 Aufgaben zu Kapitel 4
183
4.7 Lösungen zu ausgewählten Aufgaben
186
5 Arrays
192
5.1 Definition eines Arrays
193
5.1.1 Speicherbedarf
195
5.1.2 Arraygrenzen
196
5.2 Zugriff auf das Array
196
5.2.1 Zugriff auf einzelne Elemente
196
5.2.2 Prüfung der Bereichsgrenzen
198
5.2.3 Zugriff auf das ganze Array
200
5.3 Initialisierung von Arrays
203
5.3.1 Implizite Längenbestimmung
205
5.4 Mehrdimensionale Arrays
205
5.5 Anwendungen
208
5.5.1 Darstellung von Folgen
208
5.5.2 char-Arrays
210
5.5.3 Verarbeitung von Textdateien
215
5.6 Aufgaben zu Kapitel 5
218
5.7 Lösungen zu ausgewählten Aufgaben
223
6 Funktionen
236
6.1 Unterprogramme
237
6.2 Anwendung von Funktionen
238
6.2.1 Die parameterlose Funktion
238
6.2.2 Lokale Variablen in Funktionen
241
6.3 Parameter
243
6.3.1 Funktionen mit Parametern
243
6.3.2 Übergabe von Arrays
248
6.3.3 Rückgabeparameter
250
6.4 Programmentwicklung mit Funktionen
256
6.4.1 Prüfung des Rückgabewertes
256
6.4.2 Parameterprüfung in ANSI-C
259
6.4.3 Getrenntes Kompilieren
260
6.4.4 Speicherklassen
263
6.4.5 Deklarationen in Headerdateien
271
6.5 Rekursion
272
6.5.1 Was ist Rekursion?
272
6.5.2 Entwickeln rekursiver Programme
274
6.5.3 Zusammenfassung
280
6.6 Aufgaben zu Kapitel 6
281
6.7 Lösungen zu ausgewählten Aufgaben
288
7 Datenstrukturen
306
7.1 Nicht-elementare Datentypen
307
7.2 Strukturen
307
7.2.1 Definition und Verwendung
307
7.2.2 Zulässige Operatoren
311
7.2.3 Initialisierung
313
7.2.4 Alignment
314
7.2.5 Kompliziertere Strukturdefinitionen
315
7.3 Unions
319
7.3.1 Arbeitsweise
319
7.3.2 Anwendungen
320
7.4 Aufzählungstypen
323
7.4.1 Arbeitsweise
323
7.4.2 Anwendungen
326
7.5 Bitfelder
326
7.5.1 Arbeitsweise
326
7.5.2 Erweiterungen und Restriktionen
329
7.6 Selbstdefinierte Typen
330
7.6.1 Arbeitsweise
330
7.6.2 Anwendungen
332
7.7 Aufgaben zu Kapitel 7
333
7.8 Lösungen zu ausgewählten Aufgaben
335
8 Bildschirm-I/O
342
8.1 Das I/O-Konzept von C
342
8.2 Zeichenorientierte Ein-/Ausgabe
344
8.2.1 putchar
344
8.2.2 getchar
346
8.3 Formatierte Ein-/Ausgabe
349
8.3.1 printf
350
8.3.2 scanf
360
8.3.3 Ein-/Ausgabeumleitung
367
8.4 Aufgaben zu Kapitel 8
367
8.5 Lösungen zu ausgewählten Aufgaben
369
9 Datei-I/O
382
9.1 Standarddatei-I/O
383
9.1.1 Das C-Dateikonzept
383
9.1.2 Öffnen einer Datei
384
9.1.3 putc
389
9.1.4 getc
390
9.1.5 Schließen einer Datei
391
9.1.6 fprintf und fscanf
392
9.1.7 Die Standarddateien
393
9.2 Zusätzliche Funktionen zum Datei-I/O
395
9.2.1 fflush
395
9.2.2 rewind
396
9.2.3 fseek
396
9.2.4 ftell
397
9.3 Typisierte Dateie
398
9.3.1 Realisierung
398
9.3.2 fwrite
399
9.3.3 fread
401
9.4 Low-Level-Datei-I/O
403
9.4.1 open
403
9.4.2 creat
405
9.4.3 write
406
9.4.4 read
407
9.4.5 lseek
409
9.4.6 close
410
9.4.7 unlink
410
9.5 Lesen von Verzeichnissen
411
9.6 Zusammenfassung
416
9.7 Aufgaben zu Kapitel 9
416
9.8 Lösungen zu ausgewählten Aufgaben
417
10 Zeiger - erster Teil
428
10.1 Dynamische Datenstrukturen
429
10.1.1 Der statische Lösungsansatz
429
10.1.2 Die dynamische Lösung
430
10.1.3 Ausblick
431
10.2 Einführung des Zeigerbegriffs
432
10.2.1 Definition einer Zeigervariablen
432
10.2.2 Wertzuweisung
433
10.2.3 Dereferenzierung
434
10.2.4 Zuweisung zweier Zeiger
437
10.2.5 Dynamische Speicherzuweisung
440
10.2.6 Rückgabe von Speicher
445
10.3 Lineare Listen
448
10.3.1 Grundkonstruktion
448
10.3.2 Zugriff auf Elemente
449
10.3.3 Anhängen eines Satzes
450
10.3.4 Ausgeben der Liste
452
10.3.5 Löschen eines Satzes
453
10.3.6 Alphabetisches Einfügen
455
10.4 Weitere dynamische Datenstrukturen
456
10.4.1 Doppelt verkettete Listen
456
10.4.2 Bäume
457
10.4.3 Stacks
458
10.4.4 Queues
459
10.5 Aufgaben zu Kapitel 10
459
10.6 Lösungen zu ausgewählten Aufgaben
461
11 Zeiger - zweiter Teil
470
11.1 Zeiger und Arrays
471
11.1.1 Array gleich Zeiger?
471
11.1.2 Die Unterschiede zwischen beiden
472
11.1.3 Zeigerarithmetik
473
11.1.4 Dynamische Arrays
481
11.1.5 Die strcpy-Funktion
482
11.2 Simulation von Call-By-Reference
486
11.2.1 Definition von Referenzparametern
487
11.2.2 Aufrufen einer Funktion mit Referenzparametern
488
11.3 Zeiger auf Funktionen
489
11.3.1 Definition von Funktionszeigern
490
11.3.2 Zuweisung eines Funktionszeigers
492
11.3.3 Aufrufen eines Funktionszeigers
492
11.3.4 Übergabe als Parameter
494
11.4 Kommandozeilenparameter
497
11.4.1 Definition
497
11.4.2 Auswertung
498
11.5 Variable Parameterlisten
501
11.5.1 Definition
501
11.5.2 Implementierung
502
11.5.3 vprintf und vfprintf
504
11.6 Aufgaben zu Kapitel 11
506
11.7 Lösungen zu ausgewählten Aufgaben
510
12 Tipps und Tricks
520
12.1 Typische Fehlersituationen
521
12.1.1 Gleichheitsoperator
522
12.1.2 Semikolon am Ende
522
12.1.3 Semikolon in der Mitte
522
12.1.4 Semikolon hinter dem Makro
523
12.1.5 if-Anweisung
523
12.1.6 Logische Operatoren
524
12.1.7 break in der switch-Anweisung
524
12.1.8 for-Schleife
525
12.1.9 printf
525
12.1.10 Zeiger bei scanf
525
12.1.11 Dezimalkomma statt Dezimalpunkt
525
12.1.12 Backslash
526
12.1.13 Blockklammern
526
12.1.14 Deklaration vergessen
527
12.1.15 Operatorrangfolge
527
12.1.16 Nebeneffekte in logischen Ausdrücken
527
12.1.17 Überprüfung von Funktionsargumenten
528
12.1.18 Zeigerrückgabewerte
528
12.1.19 Klammerung in Makros
529
12.1.20 Nebeneffekte in Makros
530
12.1.21 Stacküberlauf
530
12.1.22 dangling-else
531
12.1.23 Ein wirkungsloses break
532
12.1.24 return-Anweisung vergessen
532
12.1.25 getchar
533
12.1.26 Tippfehler in Konstanten
534
12.1.27 Umfangreiche Makros
535
12.1.28 Array-Überlauf
536
12.1.29 Globale Variablen
537
12.1.30 Unresolved External
537
12.1.31 Rückgabewerte einiger Library-Funktionen
537
12.1.32 Fehlerhafte Sign-Extension
537
12.1.33 Alignment
538
12.1.34 Führende 0 bei Zahlenkonstanten
538
12.1.35 Textmodus bei Dateioperationen
538
12.1.36 Bindungskraft des Operators <<
539
12.1.37 sizeof auf Zeiger
539
12.1.38 free
540
12.1.39 Streams und Handles
541
12.1.40 Altmodische Zuweisungsoperatoren
541
12.1.41 do-Schleife
541
12.1.42 Parameterreihenfolge in fputc und fputs
542
12.1.43 Parameterreihenfolge bei fseek
542
12.1.44 strncpy verschluckt das Nullbyte
542
12.1.45 Kommentare
543
12.1.46 Einlesen von Strings mit scanf
543
12.1.47 Ganzzahlige Division
544
12.2 Aufgaben zu Kapitel 12
545
12.3 Lösungen zu ausgewählten Aufgaben
547
Teil II - Werkzeuge
560
13 Compiler und Linker
562
13.1 Was ist GNU?
562
13.2 Installation von GNU-C
563
13.2.1 Einleitung
563
13.2.2 Installation unter Windows 95
564
13.2.3 Installation auf anderen Betriebssystemen
565
13.2.4 Weiterführende Informationen
565
13.3 Übersetzen eines einfachen Programmes
567
13.4 Getrenntes Kompilieren und Linken
569
13.5 Arbeiten mit Libraries
570
13.5.1 Einbinden von Libraries
570
13.5.2 Erstellen einer eigenen Library
571
14 GNU-Emacs
574
14.1 Wahl des Editors
575
14.2 Installation von GNU-Emacs
577
14.3 Konzepte von Emacs
578
14.3.1 Aufruf
578
14.3.2 Bildschirmaufbau
578
14.3.3 Kommandos in Emacs
579
14.4 Grundlagen der Bedienung
581
14.4.1 Allgemeine Kommandos
581
14.4.2 Dateioperationen
581
14.4.3 Elementare Cursorbewegungen
582
14.4.4 Elementare Textmanipulationen
582
14.4.5 Puffer- und Fensterkommandos
583
14.4.6 Eingabehilfen
584
14.5 Spezielle Kommandos
584
14.5.1 Suchen und Ersetzen
584
14.5.2 Ausschneiden, Kopieren und Einfügen
586
14.5.3 Rechteckige Bereiche
586
14.5.4 Bookmarks
587
14.5.5 Tastaturmakros
587
14.5.6 Der Buffer-Modus
588
14.5.7 Der Dired-Modus
589
14.5.8 Weitere nützliche Funktionen
590
14.6 Der C-Modus
590
14.6.1 Major-Modes
590
14.6.2 Wichtige Tastaturkommandos
591
14.6.3 Compileraufruf
591
14.6.4 Tagging
592
14.6.5 Sonstige Eigenschaften des C-Modus
593
14.7 Benutzerspezifische Anpassungen
594
14.7.1 Emacs-LISP
594
14.7.2 Einfache Konfigurationen
594
14.8 Weiterführende Informationen
598
15 Debugging und Profiling
600
15.1 Debuggen mit gdb
601
15.1.1 Grundlagen
601
15.1.2 Ein fehlerhaftes Programm
602
15.1.3 Vorbereiten des Programmes zum Debuggen
607
15.2 Eine Beispielsitzung im Debugger
608
15.2.1 Breakpoints
608
15.2.2 Kommandos und Abkürzungen
609
15.2.3 Starten des Programmes
609
15.2.4 Einzelschrittbearbeitung
609
15.2.5 Variablen ansehen
610
15.2.6 Quelltext ausgeben
610
15.2.7 Beenden von gdb
611
15.2.8 Top-Down-Debugging
612
15.2.9 Löschen eines Breakpoints
613
15.2.10 Das until-Kommando
614
15.2.11 Die fehlerfreie Programmversion
615
15.3 Kommandozusammenfassung
618
15.4 Weitere Werkzeuge zur Programmanalyse
619
15.4.1 gprof
619
15.4.2 lint
620
15.4.3 Sonstige Hilfsmittel
622
16 Projektverwaltung
624
16.1 make
624
16.1.1 Abhängigkeitsregeln
625
16.1.2 Interpretation des makefile
627
16.1.3 Kommentare
628
16.1.4 Implizite Regeln
628
16.1.5 Makros
629
16.1.6 Kommandozeilenschalter
629
16.2 touch
630
16.3 grep
631
16.3.1 Mustersuche
631
16.3.2 Reguläre Ausdrücke
632
17 Versionskontrolle mit RCS
634
17.1 Grundlagen und Konzepte
635
17.1.1 Einführung
635
17.1.2 Konzepte von Quelltextmanagementsystemen
636
17.2 Grundlegende Operationen
637
17.2.1 Vorbereitungen
637
17.2.2 Einchecken einer Datei
639
17.2.3 Auschecken einer Datei
640
17.2.4 Zurücknehmen von Änderungen
642
17.2.5 Status- und Loginformationen
642
17.3 Versionen verwalten
644
17.3.1 Versionsunterschiede
644
17.3.2 Versionsnummern manuell vergeben
645
17.3.3 Versionszweige erstellen
646
17.3.4 Versionen mischen
647
17.3.5 Symbolische Versionsnamen
649
17.3.6 Das Programm rcs
650
17.4 Keyword-Expansion
650
17.5 RCS und GNU-Emacs
653
17.6 Weiterführende Informationen
655
Teil III - Referenz
656
18 Die Standard-Library
658
18.1 Einleitung
658
18.1.1 Aufbau der Referenzeinträge
659
18.2 Übersicht nach Themengebieten
660
18.2.1 Bildschirmein-/-ausgabe
660
18.2.2 Datei- und Verzeichnisfunktionen
660
18.2.3 Zeichenkettenoperationen
662
18.2.4 Speicherverwaltung
663
18.2.5 Arithmetik
663
18.2.6 Systemfunktionen
664
18.3 Alphabetische Referenz
665
A
665
B
675
C
677
D
682
E
683
F
684
G
707
H
710
I
711
L
713
M
719
O
728
P
730
Q
736
R
738
S
746
T
776
U
782
V
783
Anhang
786
A Syntax
786
A.1 EBNF
786
A.2 Produktionen
786
A.3 Terminalzeichen
786
A.4 Nichtterminalsymbole
787
A.5 Metazeichen
787
A.6 Die Syntax von C
788
B Operator-Reihenfolge
794
C Literaturhinweise
798
D Zeichensatztabellen
802
D.1 Windows-Zeichensatz (Codepage 1252)
802
D.2 PC8-Zeichensatz (Codepage 437)
803
Stichwortverzeichnis
804
Symbols
804
A
804
B
805
C
806
D
806
E
807
F
807
G
808
H
809
I
809
K
809
L
810
M
810
N
811
O
811
P
811
Q
812
R
812
S
812
T
814
U
814
V
815
W
815
X
815
Y
815
Z
816
Alle Preise verstehen sich inklusive der gesetzlichen MwSt.; Ersparnis im Vergleich zur Printversion

















