programmieren in c Überblick c "was ist wichtig?" hochschule fulda – fb ai...

126
Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14 http://c.rz.hs-fulda.de Peter Klingebiel, HS Fulda, DVZ

Upload: adelric-gerlitz

Post on 06-Apr-2015

104 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C

Überblick C"Was ist wichtig?"

Hochschule Fulda – FB AI

Sommersemester 2013/14

http://c.rz.hs-fulda.de

Peter Klingebiel, HS Fulda, DVZ

Page 2: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 2

Zeichensatz von C 1

• Buchstaben (incl. Unterstrich)ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_

• Ziffern0123456789

• Semikolon (z.B. am Ende einer Anweisung);

• Punkt (Gleitpunktzahlen, Selektionsoperator).

Page 3: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 3

Zeichensatz von C 2

• Sonderzeichen (Operatoren, Satzzeichen)( ) [ ] < > + - * / % ^ ~ & | = ! ? , :

• Anführungszeichen (Einzelzeichen, Strings)' "

• Blockklammern{ }

• Fluchtzeichen (für Sonderzeichen)\

• Doppelkreuz (Preprozessordirektiven)#

Page 4: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 4

Reservierte Worte in C

• C kennt (nur) 32 reservierte Worte

auto break case charconst continue default dodouble else enum externfloat for goto ifint long register returnshort signed sizeof staticstruct switch typedef unionunsigned void volatile while

Page 5: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 5

Bezeichner 1

• Bezeichner (Identifier) für Konstanten, Variablen, Funktionen, Typen usw. müssen mit einem Buchstaben oder Unterstrich beginnen

• danach können Buchstaben, Unterstriche und Ziffern folgen

• Groß- und Kleinschreibung wird streng unterschieden

• keine Sonderzeichen (z.B. $ oder #)• keine reservierten Worte• Vorsicht bei vordefinierten Funktionsnamen

Page 6: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 6

Bezeichner 2

• Syntaxdiagramm

Page 7: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 7

Datentypen 1

• Menge von Werten undMenge von Operationen auf diesen Werten

• Konstanten / Variablen• Datentypen bestimmen

– Darstellung der Werte im Rechner– benötigten Speicherplatz– zulässige Operationen

• Festlegung des Datentyps– implizit durch Schreibweise bei Konstanten– explizit durch Deklaration bei Variablen

Page 8: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 8

Datentypen 2

• Vordefinierte Grunddatentypen

char Zeichen (ASCII-Kode, 8 Bit)int Ganzzahl (maschinenabhängig, meist 16 oder 32 Bit)float Gleitkommazahl (32 Bit, IEEE, etwa auf 6 Stellen genau)double doppelt genaue Gleitkommazahl (64 Bit, IEEE, etwa auf 12 Stellen genau)void ohne Wert (z.B. Zeiger)

Page 9: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 9

Datentypen 3

• Type-Modifier spezifizieren Grunddatentypen

short int, long int- legen Länge der Ganzzahl fest- maschinenabhängig, 16 Bit, 32 Bit - int kann auch fehlenlong double - Gleitkommazahl, erw. Genauigkeit- oft 128 Bit, IEEEsigned, unsigned - char/int mit/ohne Vorzeichen

Page 10: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 10

Konstanten

• Konstanten haben einen festgelegten, unveränderbaren Wert

• explizite Deklaration, z.B.const float pi = 3.141;

• implizite Notation, z.B.u = 2 * r * 3.141;

• mittels CPP textuelle implizite Ersetzung#define PI 3.141...

u = 2 * PI * r;

Page 11: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 11

Variablen 1

• Variable sind Platzhalter für Daten• haben einen festgelegten Speicherort,

an dem der aktuelle Wert gespeichert wird• der aktuelle Wert (an seinem Speicherort)

ist veränderbar• Attribute von Variablen:

– Datentyp– Namen (Bezeichner, Identifier)– Lebensdauer / Speicherklasse– evtl. initialer Wert– Sichtbarkeit (Scope)

Page 12: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 12

Variablen 2

• Deklaration / Definition von Variablen

Page 13: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 13

Variablen 3

• Variablen-Definitionen, z.B.double u;short int i, tab = 5;char *hallo = "Hallo, Welt!";

• Position im Programm:– außerhalb von Funktionen– in einem Block, also zwischen { }

• Wert ist veränderbar (Zuweisung, Operation)• Programmstruktur Lebensdauer / Scope

Page 14: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 14

Wie speichert C? 1

• Hauptspeicher

Page 15: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 15

Wie speichert C? 2

• Programmstart und Aufruf von main()

Page 16: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 16

Zeiger 1

• Jede Variable hat einen Speicherort,d.h. eine Adresse im Hauptspeicher

• Zeiger (Pointer) sind Variable, die auf eine andere Variable verweisen, oderexakter: den Speicherort bzw. die Adresse dieser Variablen als Wert haben

• Pointerdefinition: int *ip; int i = 5;

• Adresszuweisung: ip = &i;• Zugriff auf Wert: *ip = *ip + *ip;

Page 17: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 17

Zeiger 2

• Zuweisung ip = &i;

Page 18: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 18

Zeiger 3

• In anderes Programmiersprachen, z.B. Ada oder Pascal, werden Pointer meist nur für dynamische Datentypen verwendet

• In C werden Zeiger leider schon von Anfang an für einfache Grundoperationen benötigt!

• Pointer notwendig für Eingaben:scanf("%d", &i);

• Pointer notwendig als Funktionsparameter:doit(int *i)

Page 19: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 19

Funktionsaufruf und Parameter

• Parameterübergabe als Werte (call by value), z.B. bei printf()

• Variable werden als Werte in den Adressraum der Funktion kopiert

• Parameterübergabe als Adresse (call by reference), z.B. bei scanf()

• Adressen der Variablen werden in den Adressraum der Funktion kopiert

• In Funktion sind die Parameter Zeiger

Page 20: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 20

Call by value

• Kopie des Parameters an Funktion

Page 21: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 21

Call by reference

• Kopie der Adresse an Funktion

Page 22: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 22

Anweisung / Ausdruck 1

• Programm setzt sich aus vielen Anweisungen (Zuweisungen, Vergleichen, Operationen, Funktionsaufrufen, usw.) zusammen

• Anweisung (statement) im strengen Sinn in C unbekannt

• Anweisung hat kein verwertbares Ergebnis• Beispiel: Zuweisung in Pascal, Ada, … integer i; i := 123;

• Variable i hat nach Zuweisung den Wert 123, die Zuweisung selbst ist allerdings nicht weiter auswertbar!

Page 23: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 23

Anweisung / Ausdruck 2

• C kennt keine Anweisungen (statements), sondern nur Ausdrücke (expressions)

• Ausdruck hat einen Wert (wie in Assembler!)• Beispiel: Zuweisung in C int i; i = 4711;

• Zuweisung kann auch ausgewertet werden: int a, b, c, i, j; a = b = c = 3; if(i = 4711) ... while(j = 1) ...

Page 24: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 24

Anweisung / Ausdruck 3

• Ausdruck Gültige Kombination vonKonstanten, Variablen, Operatoren, Funktionen

• Reihenfolge der Auswertung– Vorrangregeln der Operatoren legen Reihenfolge

der Auswertung implizit fest– Klammern ( ) legen Vorrangregeln explizit fest– Sind Vorrangregeln nicht eindeutig

Reihenfolge der Auswertung nicht definiert– Compiler kann Ausdrücke / Teilausdrücke in

effizient auswerten / optimieren

Page 25: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 25

Datentypen short, int, long 1

• Ganze Zahlen• Typen short, int, long, long long• Speicherbedarf maschinenabhängig

– short <= int <= long <= long long– Heute z.B: short 16 Bit, int 32 Bit, long 64 Bit

• Vorzeichen– signed mit Vorzeichen– unsigned vorzeichenlos

• Konstanten, Beispiele:int a = 4711, b = -18; dezimalshort x = 0x20 sedezimal (Basis 16)int y = 020; oktal (Basis 8)

Page 26: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 26

Datentypen short, int, long 2

• Operatoren / Operationen:• Zuweisung =

– Beispiel: int i; i = 4711;

• Vorzeichen + -– Beispiel: int j = -4711;

• Arithm. Op. + - * / %– Beispiel: k = 2010 - i + j * 3 % 8;

Page 27: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 27

Datentypen short, int, long 3

• Vergleichsoperatoren == != < > <= >=• expr1 op expr2

• Ergebnis: wahr 1, falsch 0• Ergebnistyp int

Page 28: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 28

Datentypen short, int, long 4

• Logische Operatoren ! && ||

• Ergebnis: wahr 1, falsch 0 (Typ int)• expr1 op expr2

Page 29: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 29

Datentypen short, int, long 5

• Bitoperatoren ~ & | ^

• expr1 op expr2 bzw. ~expr

Page 30: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 30

Datentypen short, int, long 6

• Bitshiftoperatoren << >>• expr1 op expr2• Bits in expr1 um expr2 Bits verschoben

– Bsp. 1 << 2 1 um 2 Bits nach links – Bsp: n >> 5 n um 5 Bits nach rechts

Page 31: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 31

Datentypen short, int, long 7

• Inkrement- / Dekrementoperatoren ++ --• Linkseitiger Operator ++n --n

– Wert von n wird inkrementiert / dekrementiert– das Resultat wird als Ergebnis geliefert

• Rechtsseitiger Operator n++ n--– Wert von n wird als Ergebnis geliefert– Danach wird n inkrementiert / dekrementiert

Page 32: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 32

Datentyp char

• Einzelzeichen oder Integer 8 Bit• Speicherbedarf 1 Byte (8 Bit)• Konstanten, Zeichen durch ' ' geklammert

char c1 = 'A', c2 = '1', c3 = '\n'

• Sonderzeichen mit \ beschrieben, Bsp: '\n' Zeilentrenner (NL) '\t' Tabulator (TAB) '\0' Stringende (NUL) '\"' Anführungszeichen '\\' Backslash, Fluchtzeichen

• Darstellung im ASCII-Code char Untertyp von Ganzzahlen int

Page 33: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 33

Datentypen float, double, long double 1

• Fließkommazahlen• Typen float, double, long double• Speicherbedarf

– float < double < long double– float 32 Bit, double 64 Bit, long double 128 Bit

• Repräsentation nach IEEE 754– Beispiel: float 32 Bit

Page 34: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 34

Datentypen float, double, long double 2

• Konstanten, Beispiele:float p = 3.141, a = -21.56, b = 0.54671.0 0.0 (Obacht: 1 oder 0 int)7.0e-3 (0.007) 7.6543e2(765.43)

• Operatoren / Operationen:= (Zuweisung)+ - (Vorzeichen)+ - * / (arithm. Op.)== != < > <= >= (Vergleich)

• Vorsicht bei Vergleichsoperationen wegen Ungenauigkeiten in Darstellung (z.B. bei 0.0)

Page 35: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 35

Weitere Operatoren 1

• Spezielle Zuweisungsoperatoren verkürzte Schreibweise für Operationen auf Variablen

• a op= b a = a op b• Arithm. Operatoren: + - * / % • Bitoperatoren: << >> & | ^• Beispiele: int n = 12 n -= 24 n /= 3 n <<= 3

Page 36: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 36

Weitere Operatoren 2

• Operator sizeof• Ermittelt Größe von Typ / Variablen in Bytes• Beispiel: long l; sl = sizeof(l) sd = sizeof(double)

• Beispiel: Sun Sparc 32 Bit

Page 37: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 37

Weitere Operatoren 3

• Komma-Operator ,• Erlaubt die Aneinanderreihung mehrerer

Ausdrücke• Wert = Wert des letzen Teilausdrucks• Beispiel (etwas sinnlos):

• Beispiel (sinnvoller): for(i = 0, j = 0, k = 1; … )

Page 38: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 38

Weitere Operatoren 4

• Bedingte Bewertung ? : expr1 ? expr 2 : expr3

• Verkürzte Formulierung von Bedingungen• Auswertung

– Erst Auswertung von expr1– Wenn expr1 ≠ 0 dann gesamter Ausdruck expr2– Sonst gesamter Ausdruck expr3

• Beispiel max(a, b) und min(a, b):

Page 39: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 39

Vorrangregeln bei Operatoren

Operatorenklasse Operatoren Assoziativität

Unär ! ~ ++ -- + - Von rechts nach links

Multiplikativ * / % Von links nach rechts

Additiv + - Von links nach rechts

Shift << >> Von links nach rechts

Relational < <= > >= Von links nach rechts

Gleichheit == != Von links nach rechts

Bitweise & Von links nach rechts

Bitweise ^ Von links nach rechts

Bitweise | Von links nach rechts

Logisch && Von links nach rechts

Logisch || Von links nach rechts

Bedingte Bewertung ?: Von rechts nach links

Zuweisung = op= Von rechts nach links

Reihung , Von links nach rechts

Page 40: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 40

Typumwandlung in Ausdrücken

• Implizite (automatische) Typumwandlung

• Explizite Typumwandlung durch Casting:double x; int i = 3, j = 10; x = (double) i / (double) j;

Page 41: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 41

Felder 1

• Ein Feld (array) ist die Zusammenfassung von Daten gleichen Typs in einer Variablen

• Felder haben eine oder auch mehrere Dimensionen (Vektoren, Matrizen, …)

• Definition von Feldern: char sbuf[128]; int arr[] = { 1, 8, 7, -1, 2 }; short mat[2][2] = { 11, 12, 21, 22};

• Mit der Felddefinition wird der benötigte Speicherplatz für die Variable reserviert

Page 42: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 42

Felder 2

• Zugriff auf Feldelemente mit Index in []: char c; c = sbuf[32]; sbuf[0] = 'A';

• Die Feldindizierung beginnt immer mit 0! short s, mat[3][3]; s = mat[0][0];

• Felder werden elementweise und Zeile für Zeile hintereinander abgespeichert

• Es gibt beim Zugriff keinerlei Überprüfungen auf Bereichsgrenzen von Feldern!

Page 43: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 43

Felder 3

• Feldnamen sind eigentlich Pointer, zeigen auf das erste Element im Feld

• Felder werden mit Adresse an Funktionen übergeben (wie Pointer)

• Feldindizes sind eigentlich Offsets und geben den Abstand zum Feldanfang anBsp: ia[3] *(&ia[0] + 3 * sizeof(int))

Page 44: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 44

Felder und Zeiger

• Felder reservieren bei der Definition den benötigten Speicherplatz

• Zeiger erhalten den Speicherplatz erst bei der Zuweisung des Objekts, auf das sie zeigen, oder bei dynamischer Speicherallokation

• Ähnlichkeit von Feldern und Zeigern mächtige Pointerarithmetik möglich

• Manchmal ein wenig unverständlich!• Pointer essentiell bei Zeichenketten (strings)

Page 45: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 45

Zeichenketten 1

• Zeichenketten (strings) sind eine Folge von Einzelzeichen char

• String ist terminiert mit '\0'• Speicherbedarf: Länge + 1 Byte• Beispiel: char *s; char *hallo = "Hallo, Welt!";

• String Pointer auf Feld von Elementen vom Typ char

• Nullstring NULL (definiert in stdio.h)

Page 46: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 46

Zeichenketten 2

• Beispiel: char buffer[128]; char *bp = buffer;

• Stringpointer bp erstes Zeichen im Feld buffer

Ähnlichkeit von Feldern und Pointern!• Beispiel: String kopieren und ausgeben

Page 47: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 47

Kommandozeilenparameter

• Bekannt: jedes C-Programm startet mit einer main-Funktion

• main-Funktion ist vom Typ int und hat drei Parameter:

• int argcAnzahl von Kommandozeilenparametern

• char *argv[]Feld von Strings Kommandozeilenparameter

• char *envv[]Feld von Strings Umgebungsparameter

Page 48: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 48

Aufzählungsdatentyp

• Aufzählungsdatentyp enum• Für Datentypen mit diskreten konstanten

Werten• Beispiel: enum color { rot, gruen, blau } c; enum boolean { FALSE, TRUE } b; b = FALSE; c = blau;

• Darstellung als int beginnend mit 0,wenn nicht explizit angegeben: enum boolean { TRUE=1, FALSE=0 } b; b = TRUE;

Page 49: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 49

Zusammengesetzte Datentypen 1

• Zusammenfassung von zusammengehörigen Daten in eigenen Datentyp struct

• Beispiel einfaches EA-Gerät mit 8-Bit Steuerregister cr und 16-Bit Datenregister dr: struct { char cr; int dr; } ea1; struct _ea { char cr; int dr; } ea2;

• Zugriff durch Selektor . if(ea1.cr & 0x01) ea2.dr = 4711;

• Bei Pointern durch Selektor -> if(ea1->cr & 0x01) ea2->dr = 4711;

Page 50: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 50

Zusammengesetzte Datentypen 2

• Beispiel: Datentyp struct circle für Objekt Kreis in einem Zeichenprogrammnotwendig Mittelpunkt (x,y) und Radius r

/* Kreis: Typ */struct circle { int x; /* Mittelpunktkoordinate x */ int y; /* Mittelpunktkoordinate y */ int r; /* Radius */};struct circle c;c.x = 100; c.y = 100; c.r = 50;

Page 51: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 51

Typdefinitionen

• Oft sinnvoll, eigene Typen oder Untertypen zu definieren typedef

• Beispiel: typedef unsigned char byte;

• Beispiel: typedef struct _ea { byte cr; int dr; } ea; ea ea1, ea2;

• Problem: Typprüfung bei C eher ungenau! besser lesbar, bessere Dokumentation!

Page 52: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 52

Anweisungen

• Anweisung im allgemeinsten Sinn:

Page 53: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 53

Ausdrücke

• Ausdrücke– Definitionen, Zuweisungen, …– arithmetische, logische, … Operationen, …

• Bei Zuweisungen zu beachten: gültiger l-value und r-value– l-value (left, location) Variable mit Speicherplatz– r-value (right, read) auswertbarer Ausdruck– Beispiel:int i, j;i = 9 / 3; /* gültiger l-value */45 = j; /* ungültiger l-value */

Page 54: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 54

Blöcke 1

• Zusammenfassung mehrerer Anweisungen• Geklammert mit { }• v.a. bei Funktionen, Kontrollstrukturen, aber

auch lokale Blöcke, Unterblöcke• zur Definition z.B. von lokalen Variablen,

insbesondere Hilfsvariablen• legt Lebensdauer von Variablen fest• legt Sichtbarkeit (Scope) von Variablen fest• Bei Namensgleichheit ist Variable des

innersten Blocks sichtbar

Page 55: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 55

Blöcke 2

Page 56: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 56

Kontrollstrukturen

• Kontrolle des Programmablaufs abhängig von Ergebnis von Ausdrücken

• Selektionen / bedingte Anweisungen– Einfache Alternative if … else– Mehrfache Alternative if … else if … else– Fallunterscheidung switch

• Iterationen / Schleifen– Abweisende Schleife while – Laufanweisung for– Annehmende Schleife do … while

Page 57: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 57

Selektionen 1

• Bedingte Anweisung if• Syntax:if (ausdruck) anweisung

• Bedingte Anweisung if … else• Syntax:if (ausdruck) anweisungelse anweisung

Page 58: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 58

Selektionen 2

• Mehrfache Alternative if…else if…else if (ausdruck_1) anweisung_1else if(ausdruck_2) anweisung_2else if(ausdruck_3) anweisung_3else if (ausdruck_n) anweisung_n... ...else /* kann auch fehlen */ anweisung_else

Page 59: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 59

Selektionen 3

• Mehrfache Alternative / Fallunterscheidungswitchswitch(ausdruck){ case k1: anweisung_1;

break; case k2: anweisung_2; break; . . . default: anweisung_default;}

Page 60: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 60

Iterationen 1

• Abweisende Schleife while, manchmal auch kopfgesteuerte Schleife genannt

• Syntaxwhile (ausdruck) anweisung

• Bedingung ausdruck wird vor Ausführung vom Schleifenkörper anweisung geprüft

• Schleifenkörper wird nur ausgeführt, wenn Bedingung ausdruck wahr ist

Page 61: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 61

Iterationen 2

• Laufanweisung oder abweisenden Schleife mit for

• Syntaxfor(ausdruck1; ausdruck2; ausdruck3) anweisung

• Kann durch while-Schleife ersetzt werden:ausdruck1;while(ausdruck2) { anweisung; ausdruck3;}

Page 62: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 62

Iterationen 3

• Nicht-annehmende Schleife do while, machmal auch: fußgesteuerte Schleife

• Syntaxdo anweisungwhile (ausdruck)

• Bedingung ausdruck wird erst am Ende des Schleifenkörperts geprüft

Schleife wird mindestens einmal durchlaufen

Page 63: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 63

Iterationen 4

• Schleifensteuerung• break

– bricht die Ausführung der Schleife bzw. switch-Anweisung ab und verlässt diese

• continue– bricht den aktuellen Schleifendurchlauf ab– setzt mit Ausführung des Schleifenkopfes fort

• Endlosschleifewhile(1) ...for(;;) ...

Page 64: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 64

Funktionen 1

• Funktionen sind Programmteile (Blöcke) mit Namen, ggfs. Parametern und ggfs. einem Rückgabewert

• elementare Bausteine für Programme– gliedern umfangreiche Aufgaben in kleinere

Komponenten– reduzieren Komplexität– Wiederverwendung von Komponenten– verbergen Details der Implementierung vor

anderen Programmteilen (black box)

Page 65: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 65

Funktionen 2

• dienen der Abstraktion• Name und Parameter abstrahieren

– vom tatsächlichen Programmstück– von Darstellung und Verwendung der Daten

• Verwendung– mehrfach benötigte Programmstücke werden

einmal erstellt und können durch Angabe des Funktionsnamens aufgerufen werden

– schrittweise Abstraktion möglichEntwurf top-down oder bottom-up

Page 66: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 66

Funktionen 3

• Funktionsdefinition• Schnittstelle (Typ, Name, Parameterliste)• Typ

– Datentyp, der von Funktion zurückgeliefert wird– Kann beliebiger Typ sein– void kein Rückgabewert (Prozedur)

• Name – Bezeichner kann beliebig gewählt sein– keine Schlüsselworte

Page 67: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 67

Funktionen 4

• Syntaxdiagramm

• Beispielint add(int a, int b){ r = a + b; return(r);}

Page 68: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 68

Funktionen 5

• Formale Parameter

• beliebiger Typ, beliebiger Bezeichner• formale Parameter Platzhalter für aktuelle

an Funktion übergebene Parameter• in Funktion wie vorbelegte lokale Variable

Page 69: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 69

Funktionen 6

• Beliebiger Block mit {} geklammert• Zusätzliche Anweisung return(ausdruck)

Rückkehr aus der Funktion• Bei void-Funktion: nur return• Nach Rückkehr aus Funktion Programm

wird nach Funktionsaufruf fortgesetzt• Typ von Ausdruck und Funktion müssen

übereinstimmen• Klammern bei return können entfallen

Page 70: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 70

Funktionen 7

• Aufruf einer Funktion

– jeder Funktionsaufruf ist ein Ausdruck– void-Funktionen können keine Teilausdrücke sein

wie Prozedur in anderen Sprachen

Page 71: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 71

Funktionen 8

• Die Ausdrücke in der Parameterliste werden vor dem Sprung in die Funktion ausgewertet aktuelle Parameter

• Anzahl und Typen der Ausdrücke der aktuellen Parameter müssen mit denen der formalen Parameter in der Definition der Funktion übereinstimmen

• Die Auswertungsreihenfolge der Parameter-ausdrücke ist nicht festgelegt

Page 72: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 72

Funktionen 9

• Funktionen werden global definiert keine lokalen Funktionen möglich

• static beschränkt Funktion auf Modul • main() ist normale Funktion, die aber beim

Programmstart automatisch aufgerufen wird• Rekursion ist möglich:int fak(int n){ if(n == 1) return(1); else return(n * fak(n-1));}

Page 73: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 73

Funktionen 10

• Funktionen müssen deklariert sein, bevor sie aufgerufen werden können

• Name, Rückgabetyp und Parametertypen müssen dem Compiler bekannt sein

• Funktionsdefinition Funktion ist automatisch deklariert und bekannt

• sonst Prototype, z.B. in Headerdateityp name ( liste der parametertypen );

• Beispiele:double sin(double);double cos(double x);

Page 74: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 74

Funktionen 11

• Parameterübergabe an Funktionen• call by value

– aktuelle Parameter werden in Speicherbereich der Funktion kopiert

– in Funktion: Änderungen nur lokal in Funktion

• call by reference– In C nur über Zeiger realisierbar– Adresse der Parameter werden in Funktion kopiert– Änderungen an Parametern Änderungen an den

originalen Variablen

Page 75: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 75

Speichersegmentierung

• Programmcode und Programmdaten eines Programms werden von Betriebssystem in unterschiedliche Speichersegmente geladen– Programmcode Textsegment– globale / statische Daten Datensegmente

• Konstanten• initialisierte / nichtinitialisierte Daten

– automatische Daten Stacksegment• Daten werden erst bei Eintritt in Block erzeugt

– dynamische Daten Heapsegment

Page 76: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 76

Speicherklassen 1

• Funktionen können nur global, d.h. ausserhalb von Blöcken definiert werden– Sichtbarkeit global– static Sichtbarkeit im Quelldateikontext

• Variablen können ausserhalb von Blöcken, d.h. global definiert werden– Sichtbarkeit global– static Sichtbarkeit im Quelldateikontext

• Variablen können innerhalb von Blöcken, d.h. lokal oder automatisch definiert werden

Page 77: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 77

Speicherklassen 2

• auto– nur innerhalb eines Blocks, Standardklasse

– Variable existiert / ist sichtbar nur im Block

• static– in Block: Variable erhält ihren Wert

– sonst: Variable/Funktion nur in C-Quelle sichtbar

• extern– Variable ist in anderer C-Quelle definiert

• register– Variable CPU-Register, hat keine Adresse!

Page 78: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 78

Lebensdauer

• Lebensdauer einer Variablen ist die Zeit,in der diese Variable Speicherplatz belegt

• lokale / automatische Variable– „lebt“, d.h. hat einen Speicherort vom Anfang bis

zum Ende des Blocks, in dem sie definiert ist– Speicherplatz wird bei Verlassen des Blocks

wieder freigegeben Variable ist ungültig!– Zugriff darauf ist dann undefiniert

• Globale oder statische Variable– „lebt“ vom Anfang bis zum Ende des Programms

Page 79: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 79

Sichtbarkeit 1

• Der Sichtbarkeitsbereich (Scope) einer Variablen Programmabschnitt, in dem die Variable sichtbar / nutzbar / gültig ist

• Der Scope wird durch den Ort der Definition bzw. Deklaration der Variablen festgelegt– innerhalb eines Blocks sichtbar von der Stelle der

Definition bis zum Blockende– ausserhalb sichtbar von Stelle der Definition bzw.

Deklaration bis zum Ende der Quelldatei– mit static definierte Variablen sind nur im Modul

(= C-Quelldatei) sichtbar

Page 80: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 80

Sichtbarkeit 2

• Globale Variable müssen ausserhalb von Blöcken definiert sein

• Variablen aus anderen Modulen (globale Variable) müssen explizit als extern deklariert werden

• Scope einer Funktion: Bereich auf Ebene des Programms, in der die Funktion nutzbar ist– global– sollte dann vor Nutzung bekannt sein (Prototype)– lokal nur im Modul bei Definition als static

Page 81: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 81

C-Preprozessor 1

• C-Preprozessor bearbeitet C-Quelltexte vor dem eigentlichen Compilerlauf

• reiner textueller Eingriff in den Quelltext• CPP hat eigene Syntax• # leitet CPP-Anweisungen ein• CPP-Anweisungen nicht mit ; terminiert!• Wichtige Direktiven von CPP:

– #include – Dateien einfügen – #define – Makros definieren– #if / #ifdef – Bedingte Compilierung

Page 82: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 82

C-Preprozessor 2

• #include – fügt den Inhalt anderer Dateien (sog. Headerfiles) in den Quelltext ein

• Includedateien enthalten i.w.– Deklarationen von Funktionen (prototypes)– Deklarationen von Datentypen– Deklarationen von externen/globalen Variablen– Definitionen von Konstanten (const)– Definitionen von Konstanten als CPP-Makro– Definitionen von CPP-Makros– Bedingte Compilierung

Page 83: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 83

C-Preprozessor 3

• #define – definiert ein Makro Textersatz#define makroname#define makroname ersatztext#undef makroname

• Beispiele: – #define UNIX - Makro UNIX definiert, z.B. zur

Verwendung bei bedingter Compilierung – #define EOF (-1) - Makro EOF wird durch

Ersatztext (-1) ersetzt wie Konstante– #undef TEST - Makro TEST nicht definiert

Page 84: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 84

C-Preprozessor 4

• Parametrisierte Makros• Makroparameter werden in Ersatztext ersetzt

– Beispiel:#define min(a, b) (a < b ? a : b)

– Quelltextint i = 2, j = 3, m;m = min(i, j);

– Nach CPP-Lauf:int i = 2, j = 3, m;m = (i < j ? i : j);

– Achtung: Nebeneffekte!!!

Page 85: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 85

C-Preprozessor 5

• Bedingte Compilierung Verändern des Quelltextes abhängig von CPP-Makros

• Syntax#if (expr1)#elif (expr2)#else#endif

• und#ifdef (symbol)#ifndef (symbol)

Page 86: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 86

Module 1

• Um größere Programmprojekte überschaubar und sicherer zu machen, wird die Aufgabe in kleinere Teilaufgaben (= Module) zerlegt Reduktion der Komplexität separates Entwickeln und Testen Wiederverwendbarkeit von Programmteilen Erstellen von Programmbibliotheken

• Abstraktion von Daten und Funktionen• Kapselung von Daten

Page 87: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 87

Module 2

Black Box • Ein Modul in C ist eine Quelldatei, in der eine

oder mehrere Funktionen zusammengefasst werden

• Interne Funktionen möglich, die nur innerhalb des Moduls sichtbar sind

• Interne Variable möglich, die nur innerhalb des Moduls zugreifbar sind

Definition als static

Page 88: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 88

Module 3

• Projekt: Module und Bibliotheken

Page 89: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 89

Module 4

• Schnittstellen eines Moduls, Funktionen und ggfs. Variablen in Headerdatei beschrieben

• Getrennte Übersetzung der Quelldateien und Erzeugen von Objektkode

• Erstellen von Programmbibliotheken zur leichten Wiederverwendbarkeit

• Zusammenmontieren des ausführbaren Programms aus Objektkode der Quellen und der Module sowie aus Bibliotheken

Page 90: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 90

Bibliotheken 1

• in der Programmiersprache C sind nur die notwendigsten Grundfunktionalitäten definiert

• es fehlen z.B. Funktionen für Ein-/Ausgabe, Funktionen für Dateihandling, Funktionen für Stringhandling, höhere mathematische Funktionen und vieles andere mehr

• erleichtert die Entwicklung eines C-Compilers• leichtere Anpassung / Übertragung auf

andere Hardware oder Betriebssysteme

Page 91: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 91

Bibliotheken 2

• Sehr viele der in der Sprachdefinition nicht enthaltenen Funktionen werden in sog. Funktionsbibliotheken, wie z.B. der C-Standardbibliothek, mitgeliefert

• In der Standardbibliothek sind u.a. enthalten – Ein- und Ausgabefunktionen, Dateihandling,

Stringfunktionen u.v.m. libc– Mathematische Funktionen libm– und viele, viele weitere Funktionen

• Die C-Standardbibliothek ist „genormt“

Page 92: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 92

Bibliotheken 3

• Funktionen sind zu funktionalen Gruppen zusammengefasst jeweils eine eigene Headerdatei

• In den Headerdateien sind Prototypen der Funktionen, Typen, Konstanten, Makros usw. definiert oder deklariert

• Beispiele:– Ein- und Ausgabe stdio.h– Stringfunktionen strings.h– Mathematische Funktionen math.h

Page 93: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 93

Dateien / Dateihandling 1

• Grundlegender Datentyp FILE • zugrundeliegendes Modell: stream• Daten- oder Bytestrom: Bytes werden

sequentiell gepuffert gelesen / geschrieben• Bsp: printf("HALLO, WELT");

Page 94: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 94

Dateien / Dateihandling 2

• FILE *fopen(char *pn, char *mode)• öffnet Datei mit dem Pfadname pn und

verbindet einen stream mit der Datei• liefert einen Zeiger vom Typ FILE * auf den

geöffneten stream• mode gibt den Modus an:

r, rb read - lesen, Datei muss existierenw, wb write - schreiben, Datei wird erzeugt, Dateilänge auf 0 gesetzta, ab append - schreiben, anhängenr+, rb+ update - lesen+schreiben

Page 95: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 95

Dateien / Dateihandling 3

• fopen() liefert NULL bei Fehler, Bsp: FILE *fp;fp = fopen("datei", "r");if(fp == NULL) { perror("datei"); return(1);}

• void perror(char *msg)– Gibt Systemfehlermeldung auf stderr aus

• int fclose(FILE *fp)– schließt Verbindung zum stream fp

Page 96: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 96

Dateien / Dateihandling 4

• int fprintf(FILE *fp, char *fmt, /* args */ ...)– formatiertes Schreiben auf stream fp– liefert die Anzahl geschriebener Bytes– printf() fprintf(stdout, ...)

• int fscanf(FILE *fp, char *fmt, /* args */ ...)– formatiertes Lesen von stream fp– liefert Anzahl gelesener Elemente– scanf() fscanf(stdin, ...)

Page 97: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 97

Dateien / Dateihandling 5

• Viele weitere Ein-/Ausgabefunktionen für Zeichen, Beispiele:

• int fgetc(FILE *fp), int getc(FILE *fp)– Zeichen von stream fp lesen– liefert gelesenes Zeichen, EOF bei Dateiende – getchar() fgetc(stdin)

• int fputc(int c, FILE *fp)int putc(int c, FILE *fp)– Zeichen c auf stream fp ausgeben– putchar(c) fputc(c, stdout)

Page 98: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 98

Dateien / Dateihandling 6

• String-Ein-/Ausgabe, Beispiele:• char *fgets(char *s, int n, FILE *fp)

– Zeile von fp in Puffer s lesen, maximal n Bytes– liefert NULL bei Dateiende– char *gets(char *s)– Zeile von stdin in Puffer s einlesen

• int fputs(char *s, FILE *fp)– String s auf stream fp ausgeben, EOF bei Fehler– int puts(char *s)– String s auf stdout ausgeben, EOF bei Fehler

Page 99: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 99

Zeichen / Zeichenfunktionen

• Klassifizierungsfunktionen für Zeichen• #include <ctype.h>• alle Funktionen liefern Rückgabewert

≠ 0, wenn Test ok, 0 sonst

• Funktionen– zum Test von Zeichen, z.B. isalnum()– zur Konvertierung von Zeichen,

z.B. toupper()

Page 100: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 100

Strings / Stringfunktionen 1

• Kein eigener Datentyp für Strings in C! • Strings sind Arrays vom Typ char

oder Pointer auf char:– char b[LEN];

bietet Platz für LEN-1 Zeichen– char *s;

Pointer s gültig erst nach Zuweisung auf char-Array, Konstante oder dyn. Speicherallozierung

• Strings werden mit ASCII-NUL '\0' terminiert– dafür: ein weiteres Zeichen Speicherplatz nötig

Page 101: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 101

Strings / Stringfunktionen 2

• C-Standardbibliothek bietet eine große Menge an Stringfunktionen an

• Konvertierungsfunktionen• #include <stdlib.h>

– z.B. int atoi(char *s)wandelt String s in int

• #include <stdio.h>– int sscanf(char *s, char *fmt,...)– formatierte Konvertierung aus dem String s– int sprintf(char *s, char *fmt, …)– formatierte Ausgabe auf String s

Page 102: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 102

Strings / Stringfunktionen 3

• Stringfunktionen, Beispiele• #include <string.h>

– int strlen(char *s)– liefert Länge des String s– char *strcpy(char *s1, char *s2)– kopiert String s2 nach String s1, bis zum s2

terminierenden NUL, liefert Ptr auf s1– int strcmp(char *s1, char *s2)– vergleicht zeichenweise s1 und s2– liefert 0 bei Gleichheit– sonst Differenz *s1-*s2 bei erstem Unterschied

Page 103: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 103

Dynamischer Speicher

• Handling von dynamischem Speicher (Heap)• #include <stdlib.h>• Anforderung von Speicher:

– void *malloc(size_t s)– s Bytes allozieren

– void *calloc(size_t n, size_t s)– s * n Bytes allozieren und mit 0 initialisieren– return NULL bei Fehler, sonst Pointer auf Speicherbereich

• Freigabe von alloziertem Speicher– void free(void *ptr)

Page 104: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 104

Dynamische Listen 1

• Häufig ist die Anzahl der zu speichernden und zu bearbeitenden Daten erst zur Laufzeit des Programms bekannt

• Felder ungeeignet: müssen zur Compilezeit oder in Blöcken dimensioniert werden

dynamische Datenstrukturen– einfach verkettete Listen– doppelt verkettete Listen – Bäume– usw.

Page 105: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 105

Dynamische Listen 2

• Beispiel: einfach verkettete Liste/* Datentyp f. einfach verkettete Liste */ typedef struct _slist { int value; /* Daten */ struct slist *next; /* Nachfolger */} slist;

• Beispiel: doppelt verkette Liste/* Datentyp f. doppelt verkettete Liste */typedef struct _dlist { int value; /* Daten */ struct dlist *prev; /* Vorgaenger */ struct dlist *next; /* Nachfolger */} dlist;

Page 106: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 106

Dynamische Listen 3

• Objekte der Listentypen werden zur Laufzeit – alloziertslist *insert(slist *llp, int value){ slist *nlp; nlp = (slist *) malloc(sizeof(slist));

– besetzt bzw. initialisiert nlp-> value = value; nlp->next = NULL;

– und in die Liste eingehängt if(llp) llp->next = nlp; return(nlp);}

Page 107: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 107

Dynamische Listen 4

• Einfache Liste: Erzeugung 1. Element

Page 108: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 108

Dynamische Listen 5

• Einfache Liste: n. Element und Verkettung

Page 109: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 109

Dynamische Listen 6

• Erstes Element wird oft Wurzel, Anker oder Kopf der Liste genannt

• Durchlaufen der Liste i.d.R. von der Wurzel der Liste ausslist *root, *slp;for(slp = root; slp; slp = slp->next) printf("%d\n", slp->value);

• Wird das letzte Listenobjekt mit der Wurzel verlinkt Ringpuffer

• Sortieren bei Erzeugen der Liste möglich

Page 110: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 110

Dynamische Listen 7

• Doppelte Liste: Erzeugung 1. Element

Page 111: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 111

Dynamische Listen 8

• Doppelte Liste: n. Element und Verkettung

Page 112: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 112

Dynamische Listen 9

• Binäre Bäume

Page 113: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 113

Sortieren 1

• Sortieren von Zahlen, Strings, allgemein von Daten, ist oft auftretende Aufgabenstellung

• Meist: Daten sind in Feldern vorhanden Sortieren von Feldelementen• Intuitiver Algorithmus: Bubblesort-Algorithmus• http://de.wikipedia.org/wiki/Bubblesort• Problem: Bubblesort ziemlich langsam• Sehr viel schnellerer Algorithmus Quicksort• http://de.wikipedia.org/wiki/Quicksort

Page 114: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 114

Sortieren 2

• Oft sind unterschiedliche Typen zu sortieren, z.B. Integer-, Double-, String-, Struct-Typen usw.

Generischer Sortieralgorithmus für Felder• Sortieralgorithmen identisch bis auf

– Vergleichsfunktion compare()– und eventuell Austauschfunktion swap()

Generische Funktionsparameter Funktionen als Parameter

Page 115: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 115

Sortieren 3

• Generische Funktionsparameter Nutzung des Typs void• Beispiel: generische swap-Funktion void swapv(void *s[], int i, int j){ void *t;

t = s[i]; s[i] = s[j]; s[j] = t;}

Page 116: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 116

Sortieren 4

• Funktionen als Parameter• C erlaubt, Funktionen als Parameter an

Funktionen zu übergeben und aufzurufen• Übergabe der Funktion comp()void bsortv(void *v[], int n, int (*comp)(void *, void *)){ ...

• Aufruf der Funktion comp() ... if((* comp)(v[j], v[j+1]) > 0) ...

Page 117: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 117

Sortieren 5

• Mit generischen Funktionen und Funktionen als Parametern Sortieren von komplexen Datenstrukturen möglich

• Beispiel: Personaldatentypedef struct _person { /* Personaleintrag: */ int no; /* Personalnummer */ char *nn; /* Nachname */ char *vn; /* Vorname */ int gj; /* Geburtsjahr */ int gm; /* Geburtsmonat */ int gt; /* Geburtstag */} person_t, *person_p;

Page 118: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 118

Sortieren 6

• Personalliste nach verschiedenen Kriterien (Name, P-Nr., Geburtsdatum) sortierbar

Implementierung einer Vergleichsfunktion• Beispiel: Nachnamen vergleichen

int compnn(person_p p1, person_p p2){ int n; if(n = strcmp(p1->nn, p2->nn)) return(n); else return(strcmp(p1->vn, p2->vn));}

Page 119: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 119

Suchen 1

• Häufige Aufgabe: in größeren Datenmengen nach Einzelelementen suchen

• Oft: Daten in Feldern gespeichert• Intuitives Verfahren: Feld mit Daten von

Anfang bis Ende durchlaufen und nach gesuchtem Element fahnden– ist bei großen Datenmengen sehr langsam– notwendig bei unsortierten Daten / Feldern

Felder sortieren und in sortierten Feldern mit binärer Suche suchen

Page 120: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 120

Suchen 2

• Binärsuche: teilen und finden

Page 121: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 121

Felder, Zeiger, Listen 1

• Bekannt: Felder und Zeiger werden in C ganz ähnlich behandelt

• Wesentlichster Unterschied:– Felder sind dimensioniert ihnen ist ein fester

Speicherort zugeordnet für die zu speichernden Objekte / Feldelemente ist Platz vorhanden

– Zeiger weisen erst nach Zuweisung oder dyn. Allozierung auf den Speicherort ihrer Objekte

• Feldvariable Adresse des 1. Elements• Feldindizes Offset im Feld

Page 122: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 122

Felder, Zeiger, Listen 2

• Konstante Dimensionierung von Felderndouble df[100]; /* Feld mit 100 Elementen */

• Variable Dimensionierung von Feldern nur für automatische Feldvariable zulässigvoid fun(int n) { double df[n]; /* Feld mit n Elementen */ ...}

• Grund: Feldgröße muss beim Anlegen / bei Speicherzuweisung des Felds bekannt sein– statisch / global Compilezeit– automatisch / lokal Eintritt in Funktion / Block

Page 123: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 123

Felder, Zeiger, Listen 3

• variable Dimensionierung von statischen und globalen Feldern häufig benötigt

• Lösung dynamische Feldallozierung• Beispiel: double-Feld dynamisch duplizieren

double *dbldup(double d[], int n) { double *df; int i;

df = calloc(n, sizeof(double)); for(i = 0; i < n; i++) df[i] = d[i]; return(df);}

Page 124: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 124

Felder, Zeiger, Listen 4

• Problem oft: schnelles Suchen in dynamischen Daten / Objekten

• Suche in sortierten Feldern sehr schnell• Suche in Listen (sortiert oder unsortiert)

meist ziemlich langsam• Balancierte Bäume sehr aufwendig Kombination von Listen und Feldern Listen: Speicherung dynamischer Daten Felder: Sortierte Indizes der Daten

Page 125: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 125

Datum und Zeit 1

• Handling von Datum, Zeit, Zeitmessungen• #include <time.h>• Grundtyp und -funktion (Systemcall)typedef long time_t;time_t time(time_t *t)

• liefert die aktuelle Systemzeit in Sekunden seit dem 1.1.1970, 00:00:00

• viele Funktionen für Datum und Zeit basierend auf time_t und time()

Page 126: Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 126

Datum und Zeit 2

• Messung der benötigten CPU-Zeit• Typ und Funktiontypedef long clock_t;clock_t clock(void);

• benötigte CPU-Zeit zwischen zwei Aufrufen von clock() in Mikrosekundenclock_t t1, t2, td;t1 = clock(); /* Erste Messung */machwas();t2 = clock(); /* Zweite Messung */td = t2 - t1; /* CPU-Zeit in s */