Einführung in die Programmiersprache C
Dieses Seminar bietet dir in zwei Tagen einen strukturierten und praxisnahen Einstieg in die prozedurale Programmiersprache C. Du lernst die Syntax, den Umgang mit grundlegenden Datenstrukturen sowie die hardwarenahe Programmierung durch Zeiger (Pointer) und manuelle Speicherverwaltung. Am Ende hast du ein solides Fundament für die Entwicklung von performanter Systemsoftware, Treibern oder eingebetteten Systemen (Embedded Systems).
Für wen ist dieses Seminar
Angehende Softwareentwickler, Systemprogrammierer, Ingenieure und Umsteiger aus höheren Programmiersprachen.
Das Angebot richtet sich an Unternehmen, Behörden und Selbstständige.
Was du mitbringen solltest
Allgemeines technisches Verständnis. IT-Grundkenntnisse sind erforderlich, erste Programmiererfahrungen sind hilfreich, aber nicht zwingend.
Detaillierte Inhalte
Grundlagen und Entwicklungsumgebung
- Historie und Einsatzgebiete von C (Systemprogrammierung, Embedded C)
- Der Build-Prozess im Detail: Präprozessor, Compiler, Assembler und Linker (z. B. GCC, Clang)
- Aufbau eines C-Programms: Die
main()-Funktion und grundlegende Syntax - Standard-Ein-/Ausgabe: Arbeiten mit
printf()undscanf() - C-Standards im Überblick: C11, C17 und Ausblick auf C23
Variablen, Datentypen und Operatoren
- Primitive Datentypen (
int,char,float,double) und ihre Speichergrößen - Typ-Modifizierer:
signed,unsigned,short,long - Konstanten definieren (
constund#define) - Operatoren: Arithmetische, relationale, logische und bitweise Operatoren
- Implizite und explizite Typumwandlung (Type Casting)
Kontrollstrukturen und Ablaufsteuerung
- Bedingte Anweisungen:
if,else if,else - Mehrfachverzweigungen: Das
switch-Statement - Schleifenkonstrukte:
while,do-whileundfor - Schleifensteuerung mit
breakundcontinue
Funktionen und Programmstrukturierung
- Definition, Deklaration und Funktionsprototypen
- Parameterübergabe: Call-by-Value
- Rückgabewerte und der Datentyp
void - Gültigkeitsbereiche von Variablen (Scope): Lokal vs. Global
- Speicherklassen-Spezifizierer:
auto,register,static,extern - Kommandozeilenargumente entgegennehmen (
argc,argv)
Arrays und Zeichenketten (Strings)
- Deklaration und Initialisierung eindimensionaler Arrays
- Mehrdimensionale Arrays und Matrizen
- Spezifika von C-Strings: Nullterminierte Zeichenketten (
\0) - Wichtige Funktionen der Standardbibliothek
<string.h>(strlen,strcpy,strcmp,strcat)
Zeiger (Pointer)
- Konzept des Arbeitsspeichers und Speicheradressen
- Zeiger-Deklaration (
*) und Adressoperator (&) - Dereferenzierung von Zeigern
- Pointer-Arithmetik und der Zusammenhang zwischen Arrays und Pointern
- Parameterübergabe an Funktionen: Call-by-Reference (Zeiger als Argumente)
- Zeiger auf Funktionen und deren Einsatz, z. B. für Callback-Mechanismen
Dynamische Speicherverwaltung (Memory Management)
- Speichermodell: Stack vs. Heap
- Speicherallokation zur Laufzeit:
malloc(),calloc()undrealloc() - Speicherfreigabe mit
free() - Best Practices und Fehlervermeidung: Memory Leaks, Dangling Pointers und Buffer Overflows
Strukturierte Datentypen
- Gruppierung heterogener Daten mit Strukturen (
struct) - Typdefinitionen mit
typedefzur Code-Vereinfachung - Unions: Speichereffiziente Datennutzung (
union) - Aufzählungen (
enum) für Konstanten-Gruppen - Zeiger auf Strukturen und der Pfeil-Operator (
->)
Der C-Präprozessor und Makros
- Einbinden von Header-Dateien (
#include) - Definition von Makros mit und ohne Parameter (
#define) - Bedingte Kompilierung (
#ifdef,#ifndef,#endif) zur Portabilität - Include-Guards zur Vermeidung von Mehrfacheinbindungen
Datei-Ein- und Ausgabe (File I/O)
- Dateizeiger (
FILE *) - Dateien öffnen und schließen (
fopen,fclose) - Textdateien verarbeiten:
fprintf(),fscanf(),fgets(),fputs() - Binärdateien verarbeiten:
fread()undfwrite() - Fehlerbehandlung und Dateiende-Prüfung (
feof,ferror)
Projektstruktur, Build-Systeme und Debugging
- Mehrdateien-Projekte organisieren: Trennung von Header- und Source-Dateien
- Projekte bauen mit
makeund CMake - Debugging mit
gdb: Breakpoints setzen, Variablen inspizieren, Stack-Traces lesen - Speicherfehler aufspüren mit AddressSanitizer und Valgrind
Dauer: 2 Tage
Was du danach kannst
- Eigenständig C-Programme mit Zeigern, dynamischer Speicherverwaltung und eigenen Datentypen entwickeln
- Mehrdateien-Projekte strukturieren und mit make/CMake bauen
- Speicherfehler mit gdb, AddressSanitizer und Valgrind aufspüren und beheben
- Kommandozeilenargumente auswerten und Funktionszeiger für Callbacks einsetzen
- Textdateien und Binärdateien lesen und schreiben
- Moderne C-Standards (C11/C17/C23) einordnen
Verwandte Seminare
- C++ Programmieren Grundlagen — der nächste Schritt zur objektorientierten Programmierung, aufbauend auf den hier vermittelten C-Grundlagen
- PHP Programmierung Grundlagen — Alternative für den Einstieg in eine höhere, webnahe Programmiersprache
Dein Dozent
Frank Glück schult seit mehr als 30 Jahren und programmiert seit fast 40 Jahren. Seit 1999 ist er auch als Dozent für die GFU tätig. Er vermittelt hardwarenahe Programmierung und Speicherverwaltung fundiert und verständlich.
Häufige Fragen (FAQ)
Für wen eignet sich dieser Einführungskurs in C?
Der Kurs richtet sich an Entwickler, Ingenieure, systemnahe Programmierer und Einsteiger, die das Fundament moderner Softwareentwicklung verstehen möchten. C ist die Basissprache für Betriebssysteme, Treiber, Embedded Systems und Hochleistungs-Backends.
Warum ist das Verständnis von Zeigern (Pointern) in C so entscheidend?
Zeiger ermöglichen den direkten Zugriff auf Arbeitsspeicheradressen, effiziente Parameterübergaben ohne Kopier-Overhead und dynamische Speicherallokation (malloc/free). Ein solides Zeigerverständnis ist unverzichtbar, um Speicherlecks und Segmentierungsfehler zu vermeiden.
Werden moderne C-Standards im Seminar behandelt?
Ja, vermittelt werden moderne C-Standards (C11, C17 und Ausblicke auf C23) mit Best Practices für plattformübergreifende Portabilität, sichere Stringverarbeitung und saubere Code-Strukturierung mit Header-Guards.