Grundlagen der Betriebssysteme

Praktische Einführung mit Virtualisierung

Stefan Bosse

Universität Koblenz - FB Informatik

1 / 40

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A C Programmierung ::

C Programmierung

Die Grundlagen, um aus einem Quellcode mit einfachsten Mitteln eine ausführbare Datei zu generieren

2 / 40

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A C Programmierung :: Literatur

Literatur

Jürgen Wolf, René Krooß

Grundkurs C

3., aktualisierte und überarbeitete Auflage 2020

3 / 40

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A C Programmierung :: C Compiler

C Compiler

Es gibt verschiedene Compiler. Folgende Auswahl sind bekannte und weniger bekannte C Compiler:

GCC aus GNU GCC
Der C-Compiler GCC aus der GNU Compiler Collection (kurz: GCC) wird auf vielen Plattformen verwendet und ist sehr beliebt, um neue Funktionen auszuprobieren. Unter Linux ist er für gewöhnlich die erste Wahl. Unter Windows steht die Portierung MinGW (Minimal GNU for Windows) zur Verfügung. Allerdings ist MinGW besonders unter Windows 10 nicht einfach zu installieren.
Clang der LLVM
Clang aus dem LLVM-Projekt ist der C-Standard-Compiler für die macOS-Entwicklung schlechthin, mit einer sehr guten Unterstützung für C11 und C18. Aber auch für Linux können Sie diesen Compiler kostenlos nachinstallieren.
4 / 40

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A C Programmierung :: C Compiler

C Compiler

Pelles C
Diese schlanke Entwicklungsumgebung für Microsoft Windows verwendet eine modifizierte und erweiterte Version des LCC-Compilers mit Unterstützung für C11 und C18 und dürfte somit die erste Wahl für die reine Programmierung in C unter Windows sein.
Microsoft Visual Studio
Diese Entwicklungsumgebung ist der Standard schlechthin für Windows-Anwendungen. Mittlerweile können Sie sogar Apps für macOS oder Smartphones erstellen. Visual Studio eignet sich nur bedingt für diesen Kurs (oder gar nicht), weil es für die einfachen Beispiele schlicht »überdimensioniert« ist und darüber hinaus vierstellige Beträge kostet. Eine Installation benötigt bis zu 10 GB Festplattenspeicher.
5 / 40

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A C Programmierung :: C Workflow und Toolchain

C Workflow und Toolchain

Der Workflow (und die Toolchain) ist i.A. nicht monolithisch, sondern besteht aus einer Vielzahl von einzelnen Schritten mit eigenen Programmen.

Typischer C Workflow: Präprozessor CPP → C Compiler CC → Assembler ASM → Linker LD

6 / 40

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A C Programmierung :: C Workflow

C Workflow

Präprozessor

  • Der Präprozessor ist eine Krücke um den C Programmcode anpassbar und konfigurierbar zu machen.
  • Die Präprozessorsprache ist unabhängig von C und bietet Makrodefinition und Substitution sowie konditionale Codeblöcke

Makros

#define X 1
#define PRINT2(a,b) \
printf("%d:%d",a,b)
#define LINUX 1
int x=X;

Konditionale 1

#ifdef LINUX
XXX
#endif
#ifdef LINUX
XXX
#else
YYY
#endif

Konditionale 2

#if (X > 0)
#define XSIGN 1
#else
#define XSIGN 0
#endif
#if (X > 0)
unsigned int x;
#else
signed int x;
#endif
7 / 40

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A C Programmierung :: C Workflow

Präprozessor

+

8 / 40

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A C Programmierung :: Der C-JS Transpiler

Der C-JS Transpiler

In diesem Kurs wird C mittels eines C-JavaScript Transpilers geübt un erprobt.

Der C-JS Transpiler besteht aus folgenden Komponenten:

  1. Ein gebündelter C Lexer und Parser (handwritten, Token und RegEx-basiert). Ausgabe ist ein Abstrakter Syntaxgraph.
  2. Ein C-JS Generator mit Typprüfer. Ausgabe ist audführbarer JS Code.
  3. Eine Ausführungsfunktion für den transpilierten Code.

Der generierte JS Code ist lesbar und kann eingesehen werden um ein tieferes Verständnis eines C Programms zu erhalten. Alles dreht sich um ein zentrales Speichermodell und Zugriff darauf.

9 / 40

Stefan Bosse - Grundlagen der Betriebssysteme - Modul A C Programmierung :: Der C-JS Transpiler

Der C-JS Transpiler