Informatik II Programmieren in C - Webserver - DVZ

Download Report

Transcript Informatik II Programmieren in C - Webserver - DVZ

Informatik II
Grundlagen der Programmierung
Programmieren in C
Annäherung an C
Hochschule Fulda – FB ET
Sommersemester 2010
http://www.rz.hs-fulda.de/et
Peter Klingebiel, HS Fulda, DVZ
Was kennen wir schon von C?
?????
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
2
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
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
3
Woher kommt C? 2
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
4
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
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
5
Wie entsteht ein C-Programm? 1
• Problem analysieren und
Modell entwerfen
• Algorithmus entwickeln
• Programm kodieren
• Programm übersetzen
(bis syntaktisch fehlerfrei)
• Programm testen
(bis semantisch fehlerfrei ?)
• Programm produktiv (??)
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
6
Wie entsteht ein C-Programm? 2
• Nach Problemanalyse und dem Entwurf
des Lösungsalgorithmus:
• Entwurf des Programms in Pseudocode, mit
Hilfe von Programmablaufplänen, Struktogrammen oder anderen Entwurfsverfahren
• Kodieren des Programmtextes mit Editor
(standalone oder in Programmierumgebung)
• Übersetzen des Programmtextes mit dem
C-Compiler und Montieren zu einem
ausführbaren Programm
• Programm testen
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
7
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
$ ./hallo
Hallo Welt!
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
8
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
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
9
Wie wird ein C-Programm entworfen? 1
• Pseudocode, Bsp. Euklidischer Algorithmus
euklid(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
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
10
Wie wird ein C-Programm entworfen? 2
• On the fly? Quick and dirty?
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
11
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);
}
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
12
Wie wird ein C-Programm entworfen? 4
• Programmablaufplan
• wirklich geeignet?
• eher für Assembler
• doch oft eingesetzt
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
13
Wie wird ein C-Programm entworfen? 5
• Struktogramm
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
14
Wie wird ein C-Programm entworfen? 6
?????
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
15
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.
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
16
Wie wird ein C-Programm ausgeführt? 2
• Betriebssystem
Anwendungsprogramm
Funktionsbibliotheken
Systemcalls / Systemaufrufe
Hardware / Prozessor
• Mikrocontroller
Anwendungsprogramm
(incl. aller Funktionen)
Hardware / Prozessor
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
17
Wie wird ein C-Programm ausgeführt? 3
• Betriebssystem
?????
• Mikrokontroller
?????
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
18
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);
}
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
19
Wie ist ein C-Programm aufgebaut? 2
• Kommentare, mit /* und */ geklammert,
keine Schachtelung möglich!!!
• 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!
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
20
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()
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
21
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
*/
}
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
*/
*/
*/
*/
*/
22
Wie ist ein C-Programm aufgebaut? 5
• Beispiel: Temperaturregelung
/*
*
*
*
*/
temperatur.c
Simuliere einfache Temperaturregelung
klin, Fri Mar 19 14:45:15 2010
#include <stdlib.h>
#include <stdio.h>
#define
#define
#define
#define
TMIN
TMAX
TDIF
TEMP
100
120
(TMAX-TMIN)
110
/*
/*
/*
/*
Minimaltemperatur
Maximaltemperatur
Maximale Temperaturdif
Solltemperatur
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
23
Wie soll ein C-Programm nicht aussehen? 1
• Quelle: International Obfuscated C Code Contest
#include "stdio.h"
#define e 3
#define g (e/e)
#define h ((g+e)/2)
#define f (e-g-h)
#define j (e*e-g)
#define k (j-h)
#define l(x) tab2[x]/h
#define m(n,a) ((n&(a))==(a))
long tab1[]={ 989L,5L,26L,0L,88319L,123L,0L,9367L
int tab2[]={ 4,6,10,14,22,26,34,38,46,58,62,74,82
int main(int m1,char *s)
{
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
24
Wie soll ein C-Programm nicht aussehen? 2
• Quelle: main.c des X-Programms xterm
/*
*
W A R N I N G
*
* If you think you know what all of this code is doi
* are probably very mistaken. There be serious and n
* here.
*
* This client is *not* to be taken as an example of
* X Toolkit applications.
It is in need of a substa
* ideally to create a generic tty widget with severa
* parsing widgets so that you can plug 'em together
* want.
* Don't hold your breath, though....
*/
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
25
Wie soll ein C-Programm nicht aussehen? 3
/* ostern1.c, so nicht! warum eigentlich? */
#include <stdio.h>
int main(void)
{
putchar('I');
putchar('c');
putchar('h');
putchar(' ');
putchar('w');
putchar('ü');
putchar('n');
putchar('s');
putchar('c');
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
26
Wie soll ein C-Programm nicht aussehen? 4
/* ostern2.c, so auch nicht! warum? */
#include <stdio.h>
int main(void)
{
int z;
z = 0;
START:
putchar('I');
putchar('c');
putchar('h');
putchar(' ');
putchar('w');
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
27
Wie soll ein C-Programm nicht aussehen? 5
int main(void)
{
int z;
for(z = 0; z < 10; z++) {
putchar('I');
putchar('c');
putchar('h');
putchar(' ');
putchar('w');
putchar('ü');
putchar('n');
putchar('s');
putchar('c');
putchar('h');
putchar('e');
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
28
So kann ein C-Programm aussehen! 1
while(*s)
putchar(*s++);
}
int main(void)
{
int z;
for(z = 0; z < 10; z++) {
puttext("Ich wünsche Ihnen ein frohes Ost
}
return(0);
}
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
29
So kann ein C-Programm aussehen! 2
while(*s)
putchar(*s++);
}
/* Hauptprogramm */
int main(void)
{
int z;
for(z = 0; z < MAXZ; z++) {
puttext(TEXT);
}
return(0);
}
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ
30