25
Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester 2014 http://c-ai.rz.hs-fulda.de Peter Klingebiel, HS Fulda, DVZ

Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ

Embed Size (px)

Citation preview

Page 1: Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C

Module und Bibliotheken

Hochschule Fulda – FB AI

Sommersemester 2014

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

Peter Klingebiel, HS Fulda, DVZ

Page 2: Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

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 3: Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

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 4: Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Module 3

• Projekt: Module und Bibliotheken

Page 5: Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

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 6: Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Module 5

• Beispiel: mydraw4.c - nicht modular!

Page 7: Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Module 6

• Beispiel: mydraw5 - Moduldatei md.h

Page 8: Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Module 7

• Beispiel: Moduldatei md_main.c

Page 9: Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Module 8

• Beispiel: Moduldatei md_object.c

Page 10: Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Module 9

• Beispiel: Moduldatei md_line.c

Page 11: Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Module 10

• Beispiel: Moduldatei md_rect.c

Page 12: Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Module 11

• Beispiel: Moduldatei md_circle.c

Page 13: Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Module 12

• Beispiel: Moduldatei md_svg.c

Page 14: Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Module 13

• IDEs wie Code::Blocks, Netbeans unterstützen Modularisierung durch sog. Projekte

• Sonst: Steuerung der Compilierung bzw. der durchzuführenden Aktionen zur Erzeugung eines Programms oder Objekts durch sog. Makefiles

• Makefiles – beschreiben die Abhängigkeit eines Objekts oder

Programms von Quelldateien, Modulen und Bibliotheken– beschreiben die notwendigen Aktionen, um Programme,

Objektfiles usw. zu erstellen

• einige Grundaktionen sind vordefiniert, z.B. C-Quelldatei Objektfile

Page 15: Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Module 14

• Aktionen abhängig von Zeitstempeln der Dateien

• Beispiel:prog.exe: main.o modul1.o modul2.o gcc -o prog.exe main.o \ modul1.o modul2.o -lm -lc– Programm prog.exe abhängig von Objektfiles main.o,

modul1.o und modul2.o– Aktion: Binden der Objektfiles mit Libs libm und libc

– Automatisches Neucompilieren einer Quelle und Neubinden des Exe bei Änderung einer Quelldatei

Page 16: Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Module 15

• Beispiel: Makefile für mydraw5

Page 17: Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Module 16

• Beispiel: Makefile gesteuerte Übersetzung

Page 18: Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

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 19: Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

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 20: Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

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 21: Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Bibliotheken 4

• Beispiel 1: md.h (Fragment)

Page 22: Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Bibliotheken 5

• Beispiel 2: stdio.h (Fragment)

Page 23: Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Bibliotheken 6

• das Handling von Dateien/Files ist ein sehr gutes Beispiel für Modularisierung in C

• die Definition des Typs FILE ist in stdio.h „verborgen“– benötigt wird für Ein-/Ausgabe in C-Programmen

nur der Typ FILE– die Implementierung des Typs FILE ist für die

Verwendung in Programmen unwichtig– sie sollte auf gar keinen Fall in Programmen

verwendet werden, da sie systemabhängig ist!– alle benötigten Konstanten und EA-Funktionen

sind in stdio.h definiert bzw. deklariert

Page 24: Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Bibliotheken 7

• Bsp: älteres UNIX

typedef struct {int _cnt;unsigned char *_ptr; unsigned char *_base;unsigned char _flag;unsigned char _file;} FILE;

extern FILE _iob[];

• Bsp: devcpp

typedef struct _iobuf{char *_ptr; int _cnt; char *_base; int _flag; int _file;int _charbuf; int _bufsiz; char *_tmpfname;} FILE;

extern FILE *_imp___iob)[];

Page 25: Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Bibliotheken 8

• FILE abstrakter Datentyp für Datei-EA• Typ FILE muss (!) unabhängig von der

realen Implementierung genutzt werden, da diese systemabhängig (Betriebssystem, Compiler) ist

• Konstanten teilweise auch systemabhängig• Bsp: devcpp _imp___iob

#define _iob (*_imp___iob)#define stdin (&_iob[STDIN_FILENO])#define stdout (&_iob[STDOUT_FILENO])#define stderr (&_iob[STDERR_FILENO]