Post on 06-Apr-2015
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 - Peter Klingebiel - HS Fulda - DVZ 2
Java – C 1
• Java ist objektorientiert
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
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
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);}
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
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 7
Woher kommt C? 2
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
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 (??)
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
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!
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
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
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 14
Wie wird ein C-Programm entworfen? 2
• On the fly? Quick and dirty?
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);}
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
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 17
Wie wird ein C-Programm entworfen? 5
• Struktogramm
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.
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
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);}
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!
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()
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 */}
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 24
Wie ist ein C-Programm aufgebaut? 5
• Beispiel: Temperaturregelung
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 25
Wie soll ein C-Programm nicht aussehen? 1
• Quelle: International Obfuscated C Code Contest
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 26
Wie soll ein C-Programm nicht aussehen? 2
• Quelle: main.c des X-Programms xterm
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 27
Wie soll ein C-Programm nicht aussehen? 3
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 28
Wie soll ein C-Programm nicht aussehen? 4
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 29
Wie soll ein C-Programm nicht aussehen? 5
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 30
So kann ein C-Programm aussehen! 1
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 31
So kann ein C-Programm aussehen! 2
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 32
So kann ein C-Programm aussehen! 3