C für Fortgeschrittene

C ist eine kleine und einfache Sprache, was den Sprachumfang angeht. C ist auch eine schnelle Sprache, da compilierter Maschinencode ausgeführt wird.

Der Teufel liegt allerdings im Detail — jeder, der zum Beispiel mit Pointern hantiert, wird sofort beipflichten. Oder jeder, der einmal den beinharten Typenkonvertierungen zwischen signed und unsigned aufgesessen ist. Oder jeder, der …

Der Kurs beleuchtet die nicht ganz so oft beschrittenen dunklen Ecken der Sprache, widmet sich intensiv der Fehlersuche, und versucht Erklärungen zu geben, wo diese aus der Sprachdefinition nicht so offensichtlich greifbar sind.

Zielpublikum

Der Kurs richtet sich an erfahrene C-Programmierer, die den Verdacht haben, dass manches, was sie tun, auf Zufall basiert.

Kursinhalt

  • Typkonversionen und ihre Fallen: die Lücken im Typensystem von C

    • Techniken zur Typensicherheit

  • Der C-Präprozessor

    • Dunkle Ecken

    • C99 Features, um den C-Präprozessor unnötig zu machen.

  • Programmhygiene. Verschiedene Wege, sich von Compiler und Linker den Weg zu sauberen Programmen weisen zu lassen.

    • ``const``

    • ``static``

    • Explizite Typensicherheit

  • Performance

    • Optimierungstechniken, die Compiler anwenden - viele händische Optimierung sind unnötig und erschweren die Lesbarkeit

    • Memoryzugriff, Caches, Cache-Thrashing

  • Debugging mit dem GNU-Debugger gdb

  • Profiling mit verschiedenen Tools

    • gprof: der Ur-Profiler in Unix

    • valgrind beziehungsweise callgrind

    • oprofile: Profiling mit Hardwareunterstützung

  • Verschiedenes

    • Was heisst eigentlich volatile?

    • Was ist Alignment?

    • Compiler “Built-Ins”, wie zum Beispiel Atomare Instruktionen

Empfohlene Vorkenntnisse

Solide Kenntnisse in C werden vorausgesetzt.