32
Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014 http://c-ai.rz.hs-fulda.de Peter Klingebiel, HS Fulda, DVZ

Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ

Embed Size (px)

Citation preview

Page 1: Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C

Annäherung an C

Hochschule Fulda – FB AI

Sommersemester 2014

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

Peter Klingebiel, HS Fulda, DVZ

Page 2: Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Java – C 1

• Java ist objektorientiert

Page 3: Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Java – C 2

• Objekte kapseln Daten (Attribute) und Operationen auf den Daten (Methoden)

• Attribute = Daten in C• Methoden = Funktionen in C• Objekte kommunizieren durch Senden und

Emfangen von Nachrichten• Objekte entstehen durch Instantiierung einer

Objektklasse• Java aus C abgeleitet• Daher einige Ähnlichkeiten von Java und C

Page 4: Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Java – C 3

• C ist eine imperative strukturierte Sprache• Daten werden durch die Mühle von Funk-

tionen geschickt, um dann zu einem Resultat (Ergebnisdaten) zu kommen

Page 5: Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Java – C 4

• Beispiel Java:public class HelloWorld {   public static void main(String[]args) { // Ausgabe Hello World! System.out.println("Hello World!"); } }

• Beispiel C:int main(int argc, char *argv[]){ printf("Hello World!\n"); return(0);}

Page 6: Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Woher kommt C? 1

• 1971-73 Dennis Ritchie entwickelt bei den Bell Laboratorien C für die Programmierung des neuen UNIX-Betriebssystems

• 1973 Implementierung von UNIX in C

• Vorläufer: B (1969/70) und BCPL (1960er Jahre)

• 1978 Ritchie/Kernighan: „The C Programming Language“ (dt. „Programmieren in C“)

• 1989 Norm ANSI X3.159-1989 Programming Language C

• 1990 ISO Standard C90

• 1995 erweiterter ISO Standard C95

• 1999 ISO/IEC 9899:1999

Page 7: Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Woher kommt C? 2

Page 8: Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Einsatzgebiete von C

• CAD-, CAE-, Simulationssysteme• Text- und Grafikverarbeitungssysteme• Mathematik-, Numerische Systeme• Betriebssysteme (Unix, Linux, ...)• Systemprogramme (Unix, Linux, Windows, ...)• Sprachinterpreter, -compiler (GNU C++, CC)• Netz-, Webdienste (Apache Webserver, ...)• Steuerungs-, Regelungssysteme• Aber auch: Mathlab C-Code

Page 9: Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Wie entsteht ein C-Programm? 1

• Problem analysieren undModell entwerfen

• Algorithmus entwickeln• Programm kodieren• Programm übersetzen

(bis syntaktisch fehlerfrei)• Programm testen

(bis semantisch fehlerfrei ?)• Programm produktiv (??)

Page 10: Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Wie entsteht ein C-Programm? 2

• Nach Problemanalyse und dem Entwurfdes Lösungsalgorithmus:

• Entwurf des Programms in Pseudocode, mitHilfe von Programmablaufplänen, Strukto-grammen oder anderen Entwurfsverfahren

• Kodieren des Programmtextes mit Editor(standalone oder in Programmierumgebung)

• Übersetzen des Programmtextes mit demC-Compiler und Montieren zu einem ausführbaren Programm

• Programm testen

Page 11: Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Wie entsteht ein C-Programm? 3

• Beispiel: Programm Ausgabe eines Textes

$ ed hallo.c/* hallo.c */#include <stdio.h>int main(void){ puts(„Hallo Welt!\n“); return(0);}$ gcc –o hallo hallo.c$ ./halloHallo Welt!

Page 12: Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Wie entsteht ein C-Programm? 4

• Übersetzung passiert in mehreren Schritten• C-Preprozessor (cpp) - reine Textoperationen

(include, define, if, ..) im Quelltext• C-Compiler übersetzt C-Quelltext in den

maschinenabhängigen Assemblercode• Assembler erzeugt noch nicht ausführbaren

Maschinencode• Linker montiert den Maschinencode mit

Funktionen aus Bibliotheken zu einem dann ausführbarem Programm

Page 13: Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Wie wird ein C-Programm entworfen? 1

• Pseudocode, Bsp. Euklidischer Algorithmuseuklid(a, b) wenn a = 0 dann liefere b sonst solange b ≠ 0 wenn a > b dann a = a – b sonst b = b – a liefere a

Page 14: Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Wie wird ein C-Programm entworfen? 2

• On the fly? Quick and dirty?

Page 15: Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Wie wird ein C-Programm entworfen? 3

• Pseudocode als Kommentar in C/* Funktion euklid – euklid. Algorithmus */int euklid(int a, int b){ /* wenn a = 0 dann liefere b */ if(a == 0) return(b); /* sonst solange b ≠ 0 */ while(b != 0) { /* wenn a > b dann a = a – b */ if(a > b) a = a – b;

/* sonst b = b – a */ else b = b –a; } /* liefere a */ return(a);}

Page 16: Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Wie wird ein C-Programm entworfen? 4

• Programmablaufplan

• wirklich geeignet?• eher für Assembler• doch oft eingesetzt

Page 17: Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Wie wird ein C-Programm entworfen? 5

• Struktogramm

Page 18: Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Wie wird ein C-Programm ausgeführt? 1

• Ausführung direkt auf dem Prozessor– z.B. Temperaturregelung in Kühltruhe– Programm in ROM, EPROM o.ä. gespeichert– alle Funktionalitäten müssen im Programm in

Maschinencode vorhanden sein

• Ausführung auf einem Betriebssystem– Hardware ist durch das BS gekapselt– Starten/Beenden des Programms über das BS– Unterstützung durch BS bzw. BS-Funktionen,

z.B. IO, Dateien, Timer, Signale, Threads usw.

Page 19: Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Wie wird ein C-Programm ausgeführt? 2

• Betriebssystem

• MikrocontrollerHardware / Prozessor

AnwendungsprogrammFunktionsbibliotheken

Systemcalls / Systemaufrufe

Anwendungsprogramm(incl. aller Funktionen)

Hardware / Prozessor

Page 20: Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Wie ist ein C-Programm aufgebaut? 1

• Beispiel hallo.c/* * hallo.c */

#include <stdio.h>

int main(void){ char *text = „Hallo, Welt!“; puts(text); return(0);}

Page 21: Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Wie ist ein C-Programm aufgebaut? 2

• Kommentare, mit /* und */ geklammert, keine Schachtelung möglich!!!

• Einzeiliger Kommentar wie bei Java mit //• Preprozessoranweisungen, beginnen mit #• Schlüsselwörter, z.B. return• Bezeichner (Identifier) für Konstanten,

Variablen, Funktionsnamen usw. fangen mit Buchstaben oder Unterstrich _ an, können dann weitere Buchstaben, _ und Ziffern enthalten. Keine Schlüsselwörter!

• Jede Anweisung wird durch ; beendet!

Page 22: Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Wie ist ein C-Programm aufgebaut? 3

• Funktionen / Prozeduren• Funktionskopf gibt Typ des Rückgabewerts an,

den Namen der Funktion und in Klammern ggfs. die Parameter mit Typ und Bezeichnername

• Funktionskörper ist mit { und } geklammert,enthält Deklaration von Variablen, Konstanten, den Programmablauf sowie das return

• Jedes C-Programm hat eine Funktion main()

Page 23: Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Wie ist ein C-Programm aufgebaut? 4

• Allgemeiner Aufbau eines C-Programms /* Kommentare *//* Preprozessoranweisungen *//* Globale Variablen *//* Funktionen / Unterprogramme */type function1(...){ /* Lokale Variablen */ /* Anweisungen */}/* Hauptprogramm */int main(...){ /* Lokale Variablen */ /* Anweisungen */}

Page 24: Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Wie ist ein C-Programm aufgebaut? 5

• Beispiel: Temperaturregelung

Page 25: Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Wie soll ein C-Programm nicht aussehen? 1

• Quelle: International Obfuscated C Code Contest

Page 26: Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Wie soll ein C-Programm nicht aussehen? 2

• Quelle: main.c des X-Programms xterm

Page 27: Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Wie soll ein C-Programm nicht aussehen? 3

Page 28: Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Wie soll ein C-Programm nicht aussehen? 4

Page 29: Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

Wie soll ein C-Programm nicht aussehen? 5

Page 30: Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

So kann ein C-Programm aussehen! 1

Page 31: Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

So kann ein C-Programm aussehen! 2

Page 32: Programmieren in C Annäherung an C Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

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

So kann ein C-Programm aussehen! 3