C-Programmierung unter Linux/UNIX/Windows - . Helmut Herold Dr. Jrg Arndt C-Programmierung unter Linux/UNIX/Windows Beispiele, Anwendungen, Programmiertechniken

  • View
    215

  • Download
    2

Embed Size (px)

Transcript

  • Dr. Helmut HeroldDr. Jrg Arndt

    C-Programmierung unterLinux / UNIX / Windows

    Beispiele, Anwendungen,Programmiertechniken

  • Alle in diesem Buch enthaltenen Programme, Darstellungen und Informationen wurden nach bestem Wis-sen erstellt und mit Sorgfalt getestet. Dennoch sind Fehler nicht ganz auszuschlieen. Aus diesem Grundist das in dem vorliegenden Buch enthaltene Programm-Material mit keiner Verpflichtung oder Garan-tie irgendeiner Art verbunden. Autoren und Verlag bernehmen infolgedessen keine Verantwortung undwerden keine daraus folgende Haftung bernehmen, die auf irgendeine Art aus der Benutzung diesesProgramm-Materials, oder Teilen davon, oder durch Rechtsverletzungen Dritter entsteht.

    Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Buch be-rechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne derWarenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wren und daher von jedermannverwendet werden drften.

    Alle Warennamen werden ohne Gewhrleistung der freien Verwendbarkeit benutzt und sind mglicher-weise eingetragene Warenzeichen. Der Verlag richtet sich im Wesentlichen nach den Schreibweisen derHersteller. Andere hier genannte Produkte knnen Warenzeichen des jeweiligen Herstellers sein.

    Dieses Werk ist urheberrechtlich geschtzt.Alle Rechte, auch die der bersetzung, des Nachdruckes und der Vervielfltigung des Buches, oder Teilendaraus, vorbehalten. Kein Teil des Werkes darf ohne schriftliche Genehmigung des Verlages in irgendei-ner Form (Druck, Fotokopie, Microfilm oder einem anderen Verfahren), auch nicht fr Zwecke der Unter-richtsgestaltung, reproduziert oder unter Verwendung elektronischer Systeme verarbeitet, vervielfltigtoder verbreitet werden.

    Bibliografische Information Der Deutschen Bibliothek

    Die Deutsche Bibliothek verzeichnet diese Publikation in der DeutschenNationalbibliografie; detaillierte bibliografische Daten sind im Internet berhttp://dnb.ddb.de abrufbar.ISBN 3-938626-17-7

    2010 Nicolaus Millin Verlag GmbH, Lohmar (http://www.millin.de)Umschlaggestaltung: millin Verlag, http://www.millin.deGesamtlektorat: Nicolaus MillinFachlektorat: Dieter Bloms, Jrg Dippel, Klaas Freitag, Bruno Gerz, Bernhard Hoelcker, Bjrn Jacke, An-dreas Jaeger, Dirk Pankonin, Wolfgang Rosenauer, Christian Steinrcken, Peter VarkolySatz: LATEXDruck: druckhaus kthen GmbH, Kthen (http://www.koethen.dePrinted in Germany on acid free paper.

  • Inhaltsverzeichnis

    1 Einfhrendes Beispiel 3

    1.1 Erste wesentliche C-Regeln . . . . . . . . . . 3

    1.2 Zeilen-Kommentare mit // (neu in C99) . . . . . . . 5

    1.3 Gute Lesbarkeit von Programmen . . . . . . . . . 5

    1.4 Vermeiden von geschachtelten Kommentaren . . . . . . 6

    2 Elementare Datentypen 7

    2.1 Die Grunddatentypen in C . . . . . . . . . . 7

    2.2 Wertebereiche fr die einzelnen Datentypen . . . . . . . 9

    2.3 Fallgrube: Verlust von Bits bei zu groen Zahlen . . . . . . 10

    3 Konstanten 11

    3.1 char-Konstanten . . . . . . . . . . . . 11

    3.2 Ganzzahlige Konstanten . . . . . . . . . . . 11

    3.3 Gleitpunktkonstanten . . . . . . . . . . . 12

    4 Variablen 13

    4.1 Variablen und die C-Regeln fr Variablennamen . . . . . . 13

    4.2 Tipps zur Wahl der Variablennamen . . . . . . . . 14

    4.3 Deklaration von Variablen . . . . . . . . . . 14

    4.4 Tipp: Variablen bereits bei Deklaration dokumentieren . . . . 16

    5 Ausdrcke und Operatoren 17

    5.1 Der einfache Zuweisungsoperator . . . . . . . . . 17

    5.1.1 Allgemeines zum einfachen Zuweisungsoperator . . . . 17

    5.1.2 Initialisierung von Variablen . . . . . . . . 19

    5.2 Arithmetische Operatoren . . . . . . . . . . 19

    5.2.1 Die arithmetischen Operatoren . . . . . . . . 19

    V

  • Inhaltsverzeichnis

    5.2.2 Die C-Begriffe Ausdruck und Anweisung . . . . . . 20

    5.2.3 Ausgabe von int-Variablen und -Ausdrcken . . . . . 21

    5.2.4 Ausgabe von Gleitpunkt-Variablen und -Ausdrcken . . . 21

    5.2.5 Fallgrube: Ganzzahl- statt Gleitpunktdivision . . . . . 22

    5.3 Vergleichsoperatoren . . . . . . . . . . . 23

    5.3.1 Die unterschiedlichen Vergleichsoperatoren . . . . . 23

    5.3.2 Die zwei Wahrheitswerte von Vergleichen . . . . . . 23

    5.3.3 Prioritten der Vergleichsoperatoren . . . . . . . 23

    5.4 Logische Operatoren . . . . . . . . . . . 24

    5.4.1 TRUE und FALSE in C . . . . . . . . . . 24

    5.4.2 Der Datentyp _Bool (neu in C99) . . . . . . . 24

    5.4.3 Die C-Operatoren fr NOT, AND und OR im berblick . . . 25

    5.4.4 Der Negations-Operator ! . . . . . . . . . 25

    5.4.5 Der AND-Operator && . . . . . . . . . 26

    5.4.6 Der OR-Operator || . . . . . . . . . . 26

    5.4.7 Die Prioritt der logischen Operatoren . . . . . . 26

    5.4.8 Keine unntige Auswertung rechts von &&und || . . . . 27

    5.4.9 bung: berprfungen mit logischen Operatoren . . . . 28

    5.5 Bit-Operatoren . . . . . . . . . . . . . 28

    5.5.1 Bitweise Invertierung mit ~ . . . . . . . . . 28

    5.5.2 Bitweise AND-Verknpfung mit & . . . . . . . 30

    5.5.3 Bitweise OR-Verknpfung mit | . . . . . . . . 31

    5.5.4 Bitweise XOR-Verknpfung mit ^ . . . . . . . 33

    5.5.5 Bit-Operatoren nur fr ganzzahlige Datentypen erlaubt . . . 34

    5.5.6 Fallgruben . . . . . . . . . . . . 34

    5.5.7 bung: berprfungen mit Bit-Operatoren . . . . . 36

    5.6 Shift-Operatoren . . . . . . . . . . . . 37

    5.6.1 Die beiden Shift-Operatoren . . . . . . 37

    5.6.2 Shift-Operatoren nur fr ganzzahlige Datentypen erlaubt . . 38

    5.6.3 Prioritt der Shift-Operatoren . . . . . . . . 38

    5.7 Zusammengesetzte Zuweisungsoperatoren . . . . . . . 39

    5.7.1 Die zusammengesetzten Zuweisungsoperatoren . . . . 39

    5.8 Inkrement- und Dekrement-Operatoren . . . . . . . . 40

    5.8.1 Inkrementieren und Dekrementieren mit ++ und -- . . . . 40

    5.8.2 Prfix- und Postfix-Schreibweise fr ++ und -- . . . . . 40

    5.8.3 ++ und -- ist nur fr Variablen erlaubt . . . . . . 42

    5.8.4 ++ und -- ist nicht auf linken Seite einer Zuweisung erlaubt . . 42

    VI

  • Inhaltsverzeichnis

    5.9 Priorittstabelle fr Operatoren . . . . . . . . . 42

    5.10 Assoziativitt der Operatoren . . . . . . . . . . 43

    5.11 Erlaubte und unerlaubte Operationen fr C-Datentypen . . . . 43

    5.12 Prioritt und Auswertungszeitpunkt bei ++ und -- . . . . . 43

    5.13 Fallgrube: Zugriff auf nicht vorbesetzte Variablen . . . . . . 45

    5.14 bungen . . . . . . . . . . . . . . 46

    6 Symbolische Konstanten 47

    6.1 Konstanten-Definition mit #define . . . . . . . . . 47

    6.1.1 Die Direktive #define . . . . . . . . . . 47

    6.1.2 Regeln fr Konstanten-Namen bei #define . . . . . . 49

    6.1.3 Konstanten machen Programm leicht nderbar . . . . . 49

    6.2 Konstanten-Definition mit const . . . . . . . . . 49

    7 Ein- und Ausgabe 51

    7.1 Headerdateien und #include . . . . . . . . . . 51

    7.1.1 Bibliotheken und Headerdateien . . . . . . . 51

    7.1.2 Eigene Headerdateien . . . . . . . . . . 52

    7.2 Ein- und Ausgabe eines Zeichens . . . . . . . . . 53

    7.2.1 getchar() und putchar() . . . . . . . . . 53

    7.2.2 Gepufferte Eingabe bei getchar() . . . . . . . . 53

    7.2.3 Puffer-Bereinigung mit Dummy getchar() . . . . . . 57

    7.2.4 Puffer-Bereinigung ist nicht immer notwendig . . . . . 58

    7.2.5 Fallgrube: Zahlen nicht mit getchar() einlesen . . . . . 60

    7.2.6 Die Headerdatei . . . . . . . . 60

    7.2.7 Einfache Makros . . . . . . . . . . . 62

    7.3 Die Ausgabe mit printf() . . . . . . . . . . . 67

    7.3.1 Die Funktion printf() . . . . . . . . . . 67

    7.3.2 Fallgruben . . . . . . . . . . . . 74

    7.3.3 Tipps . . . . . . . . . . . . . 75

    7.4 Die Eingabe mit scanf() . . . . . . . . . . . 77

    7.4.1 Die Funktion scanf() . . . . . . . . . . 77

    7.4.2 Fallgruben . . . . . . . . . . . . 83

    7.4.3 Die Headerdatei . . . . . . . . . 86

    7.4.4 Fallgrube: Vergessen von #include . . . . . 88

    8 Datentypumwandlungen 91

    8.1 Implizite Datentypumwandlungen . . . . . . . . 91

    VII

  • Inhaltsverzeichnis

    8.1.1 Der sizeof-Operator . . . . . . . . . . 91

    8.1.2 Implizite Datentypumwandlungen . . . . . . . 93

    8.1.3 Fallgrube: Zuweisen von Ganzzahlausdrcken an Gleitpunktvariablen 97

    8.2 Explizite Datentypumwandlungen . . . . . . . . . 98

    8.2.1 Explizite Datentypumwandlungen mit cast-Operator . . . 98

    8.2.2 Fallgruben . . . . . . . . . . . . 98

    9 Die Headerdateien

  • Inhaltsverzeichnis

    15 Die for-Anweisung 129

    15.1 Die for-Anweisung . . . . . . . . . . . . 129

    15.2 Die for-Schleife und der Komma-Operator . . . . . . . 133

    15.3 Fallgrube: Semikolon am Ende des for-Schleifenkopfs . . . . . 136

    15.4 Geschachtelte Schleifen . . . . . . . . . . . 137

    15.5 Eine endlose for-Schleife . . . . . . . . . . . 143

    15.6 for bei Durchlufen mit festen Schrittweiten . . . . . . . 143

    15.7 Variablendeklaration im for-Schleifenkopf (neu in C99) . . . . 146

    15.8 Programmiertechniken . . . . . . . . . . . 146

    15.8.1 Anhalten einer Bildschirmausgabe . . . . . . . 146

    15.8.2 Zeilenvorschbe bei geschachtelten Schleifen . . . . . 149

    15.8.3 Kombinieren mit for-Schleifen . . . . . . . . 150

    15.8.4 Zwischeninformationen bei rechenintensiven Programmen . . 152

    15.8.5 Merker in for-Schleifen bei Eintreten von Ereignissen . . . 153

    15.9 Fallgruben . . . . . . . . . . . . . 154

    15.9.1 Niemals die Laufvariable im Schleifenkrper ndern . . . 154

    15.9.2 Gleitpunktzahlen niemals auf Gleichheit prfen . . . . 157

    15.9.3 Laufvariable einer for-Schleife l

Recommended

View more >