Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Programmieren in C Überblick C "Was ist wichtig?" Hochschule Fulda – FB AI Sommersemester 2013/14 Peter Klingebiel, HS Fulda, DVZ."—  Präsentation transkript:

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

2 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ2 Zeichensatz von C 1 Buchstaben (incl. Unterstrich) ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz _ Ziffern Semikolon (z.B. am Ende einer Anweisung) ; Punkt (Gleitpunktzahlen, Selektionsoperator).

3 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ3 Zeichensatz von C 2 Sonderzeichen (Operatoren, Satzzeichen) ( ) [ ] + - * / % ^ ~ & | = ! ?, : Anführungszeichen (Einzelzeichen, Strings) ' " Blockklammern { } Fluchtzeichen (für Sonderzeichen) \ Doppelkreuz (Preprozessordirektiven) #

4 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ4 Reservierte Worte in C C kennt (nur) 32 reservierte Worte auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while

5 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ5 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

6 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ6 Bezeichner 2 Syntaxdiagramm

7 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ7 Datentypen 1 Menge von Werten und Menge 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

8 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ8 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)

9 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ9 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 fehlen long double - Gleitkommazahl, erw. Genauigkeit - oft 128 Bit, IEEE signed, unsigned - char/int mit/ohne Vorzeichen

10 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ10 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 u = 2 * PI * r;

11 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ11 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)

12 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ12 Variablen 2 Deklaration / Definition von Variablen

13 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ13 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

14 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ14 Wie speichert C? 1 Hauptspeicher

15 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ15 Wie speichert C? 2 Programmstart und Aufruf von main()

16 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ16 Zeiger 1 Jede Variable hat einen Speicherort, d.h. eine Adresse im Hauptspeicher Zeiger (Pointer) sind Variable, die auf eine andere Variable verweisen, oder exakter: 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;

17 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ17 Zeiger 2 Zuweisung ip = &i;

18 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ18 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)

19 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ19 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

20 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ20 Call by value Kopie des Parameters an Funktion

21 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ21 Call by reference Kopie der Adresse an Funktion

22 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ22 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!

23 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ23 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)...

24 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ24 Anweisung / Ausdruck 3 Ausdruck Gültige Kombination von Konstanten, 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

25 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ25 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; dezimal short x = 0x20 sedezimal (Basis 16) int y = 020; oktal (Basis 8)

26 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ26 Datentypen short, int, long 2 Operatoren / Operationen: Zuweisung = –Beispiel: int i; i = 4711; Vorzeichen + - –Beispiel: int j = -4711; Arithm. Op. + - * / % –Beispiel: k = i + j * 3 % 8;

27 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ27 Datentypen short, int, long 3 Vergleichsoperatoren == != = expr1 op expr2 Ergebnis: wahr 1, falsch 0 Ergebnistyp int

28 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ28 Datentypen short, int, long 4 Logische Operatoren ! && || Ergebnis: wahr 1, falsch 0 (Typ int ) expr1 op expr2

29 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ29 Datentypen short, int, long 5 Bitoperatoren ~ & | ^ expr1 op expr2 bzw. ~expr

30 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ30 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

31 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ31 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

32 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ32 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

33 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ33 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 754IEEE 754 –Beispiel: float 32 Bit

34 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ34 Datentypen float, double, long double 2 Konstanten, Beispiele: float p = 3.141, a = , b = (Obacht: 1 oder 0 int) 7.0e-3 (0.007) e2(765.43) Operatoren / Operationen: = (Zuweisung) + - (Vorzeichen) + - * / (arithm. Op.) == != = (Vergleich) Vorsicht bei Vergleichsoperationen wegen Ungenauigkeiten in Darstellung (z.B. bei 0.0)

35 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ35 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

36 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ36 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

37 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ37 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; … )

38 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ38 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):

39 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ39 Vorrangregeln bei Operatoren OperatorenklasseOperatorenAssoziativitä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

40 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ40 Typumwandlung in Ausdrücken Implizite (automatische) Typumwandlung Explizite Typumwandlung durch Casting: double x; int i = 3, j = 10; x = (double) i / (double) j;

41 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ41 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

42 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ42 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!

43 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ43 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 an Bsp: ia[3] *(&ia[0] + 3 * sizeof(int))

44 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ44 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)

45 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ45 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 )

46 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ46 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

47 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ47 Kommandozeilenparameter Bekannt: jedes C-Programm startet mit einer main -Funktion main -Funktion ist vom Typ int und hat drei Parameter: int argc Anzahl von Kommandozeilenparametern char *argv[] Feld von Strings Kommandozeilenparameter char *envv[] Feld von Strings Umgebungsparameter

48 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ48 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;

49 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ49 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;

50 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ50 Zusammengesetzte Datentypen 2 Beispiel: Datentyp struct circle für Objekt Kreis in einem Zeichenprogramm notwendig 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;

51 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ51 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!

52 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ52 Anweisungen Anweisung im allgemeinsten Sinn:

53 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ53 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 */

54 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ54 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

55 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ55 Blöcke 2

56 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ56 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

57 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ57 Selektionen 1 Bedingte Anweisung if Syntax: if (ausdruck) anweisung Bedingte Anweisung if … else Syntax: if (ausdruck) anweisung else anweisung

58 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ58 Selektionen 2 Mehrfache Alternative if … else if … else if (ausdruck_1) anweisung_1 else if(ausdruck_2) anweisung_2 else if(ausdruck_3) anweisung_3 else if (ausdruck_n) anweisung_n else /* kann auch fehlen */ anweisung_else

59 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ59 Selektionen 3 Mehrfache Alternative / Fallunterscheidung switch switch(ausdruck){ case k1: anweisung_1; break; case k2: anweisung_2; break;... default: anweisung_default; }

60 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ60 Iterationen 1 Abweisende Schleife while, manchmal auch kopfgesteuerte Schleife genannt Syntax while (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

61 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ61 Iterationen 2 Laufanweisung oder abweisenden Schleife mit for Syntax for(ausdruck1; ausdruck2; ausdruck3) anweisung Kann durch while -Schleife ersetzt werden: ausdruck1; while(ausdruck2) { anweisung; ausdruck3; }

62 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ62 Iterationen 3 Nicht-annehmende Schleife do while, machmal auch: fußgesteuerte Schleife Syntax do anweisung while (ausdruck) Bedingung ausdruck wird erst am Ende des Schleifenkörperts geprüft Schleife wird mindestens einmal durchlaufen

63 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ63 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 Endlosschleife while(1)... for(;;)...

64 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ64 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)

65 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ65 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öglich Entwurf top-down oder bottom-up

66 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ66 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

67 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ67 Funktionen 4 Syntaxdiagramm Beispiel int add(int a, int b) { r = a + b; return(r); }

68 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ68 Funktionen 5 Formale Parameter beliebiger Typ, beliebiger Bezeichner formale Parameter Platzhalter für aktuelle an Funktion übergebene Parameter in Funktion wie vorbelegte lokale Variable

69 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ69 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

70 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ70 Funktionen 7 Aufruf einer Funktion –jeder Funktionsaufruf ist ein Ausdruck –void-Funktionen können keine Teilausdrücke sein wie Prozedur in anderen Sprachen

71 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ71 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

72 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ72 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)); }

73 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ73 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 Headerdatei typ name ( liste der parametertypen ); Beispiele: double sin(double); double cos(double x);

74 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ74 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

75 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ75 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

76 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ76 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

77 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ77 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!

78 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ78 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

79 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ79 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

80 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ80 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

81 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ81 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

82 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ82 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

83 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ83 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

84 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ84 C-Preprozessor 4 Parametrisierte Makros Makroparameter werden in Ersatztext ersetzt –Beispiel: #define min(a, b) (a < b ? a : b) –Quelltext int 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!!!

85 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ85 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)

86 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ86 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

87 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ87 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

88 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ88 Module 3 Projekt: Module und Bibliotheken

89 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ89 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

90 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ90 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

91 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ91 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

92 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ92 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

93 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ93 Dateien / Dateihandling 1 Grundlegender Datentyp FILE zugrundeliegendes Modell: stream Daten- oder Bytestrom: Bytes werden sequentiell gepuffert gelesen / geschrieben Bsp: printf("HALLO, WELT");

94 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ94 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 existieren w, wb write - schreiben, Datei wird erzeugt, Dateilänge auf 0 gesetzt a, ab append - schreiben, anhängen r+, rb+ update - lesen+schreiben

95 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ95 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

96 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ96 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,...)

97 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ97 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)

98 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ98 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

99 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ99 Zeichen / Zeichenfunktionen Klassifizierungsfunktionen für Zeichen #include 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()

100 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ100 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

101 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ101 Strings / Stringfunktionen 2 C-Standardbibliothek bietet eine große Menge an Stringfunktionen an Konvertierungsfunktionen #include –z.B. int atoi(char *s) wandelt String s in int #include –int sscanf(char *s, char *fmt,...) –formatierte Konvertierung aus dem String s –int sprintf(char *s, char *fmt, …) –formatierte Ausgabe auf String s

102 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ102 Strings / Stringfunktionen 3 Stringfunktionen, Beispiele #include –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

103 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ103 Dynamischer Speicher Handling von dynamischem Speicher (Heap) #include 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)

104 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ104 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.

105 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ105 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;

106 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ106 Dynamische Listen 3 Objekte der Listentypen werden zur Laufzeit –alloziert slist *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); }

107 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ107 Dynamische Listen 4 Einfache Liste: Erzeugung 1. Element

108 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ108 Dynamische Listen 5 Einfache Liste: n. Element und Verkettung

109 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ109 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 aus slist *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

110 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ110 Dynamische Listen 7 Doppelte Liste: Erzeugung 1. Element

111 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ111 Dynamische Listen 8 Doppelte Liste: n. Element und Verkettung

112 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ112 Dynamische Listen 9 Binäre Bäume

113 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ113 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 Problem: Bubblesort ziemlich langsam Sehr viel schnellerer Algorithmus Quicksort

114 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ114 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

115 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ115 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; }

116 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ116 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)...

117 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ117 Sortieren 5 Mit generischen Funktionen und Funktionen als Parametern Sortieren von komplexen Datenstrukturen möglich Beispiel: Personaldaten typedef 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;

118 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ118 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)); }

119 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ119 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

120 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ120 Suchen 2 Binärsuche: teilen und finden

121 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ121 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

122 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ122 Felder, Zeiger, Listen 2 Konstante Dimensionierung von Feldern double df[100]; /* Feld mit 100 Elementen */ Variable Dimensionierung von Feldern nur für automatische Feldvariable zulässig void 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

123 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ123 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); }

124 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ124 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

125 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ125 Datum und Zeit 1 Handling von Datum, Zeit, Zeitmessungen #include Grundtyp und -funktion (Systemcall) typedef long time_t; time_t time(time_t *t) liefert die aktuelle Systemzeit in Sekunden seit dem , 00:00:00 viele Funktionen für Datum und Zeit basierend auf time_t und time()

126 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ126 Datum und Zeit 2 Messung der benötigten CPU-Zeit Typ und Funktion typedef long clock_t; clock_t clock(void); benötigt e CPU-Zeit zwischen zwei Aufrufen von clock() in Mikrosekunden clock_t t1, t2, td; t1 = clock();/* Erste Messung */ machwas(); t2 = clock();/* Zweite Messung */ td = t2 - t1; /* CPU-Zeit in s */


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

Ähnliche Präsentationen


Google-Anzeigen