0 Tage Serie
Code-Bibliothek

C für Experten

Lies diese C-Snippets für Experten Zeile für Zeile — jedes kommt mit einer Erklärung, was der Code tut und warum.

C · Experte

Flexible Array-Member (C99)

Ein flexibles Array-Member ist eine Array-Deklaration ohne Größe am Ende einer Struktur. Es ermöglicht eine einzige zusammenhängende Speicherreservierung sowohl für die Metadaten (Header) als auch…

Arrays & ListenMemory Management
Snippet öffnen →
C · Experte

Volatile und Signalsicherheit

Der 'volatile'-Qualifizierer verhindert, dass der Compiler den Wert einer Variablen in einem Register zwischenspeichert, und zwingt ihn, jedes Mal aus dem Speicher zu lesen. 'sig_atomic_t' ist ein…

SyntaxMemory Management
Snippet öffnen →
C · Experte

Kapselung mit Opaque Pointern (ADTs)

Opaque Pointer (oft als 'Handles' oder PIMPL-Idiom bezeichnet) ermöglichen eine vollständige Datenkapselung in C. Indem im Header nur eine Vorwärtsdeklaration bereitgestellt und die Struktur in der…

FunktionenBest Practices
Snippet öffnen →
C · Experte

Variadische Makros mit __VA_ARGS__

Der Identifikator __VA_ARGS__ wird in der Makro-Expansion verwendet, um die an das Makro übergebenen variablen Argumente darzustellen. Dies erlaubt die Erstellung mächtiger Wrapper um Funktionen wi…

SyntaxFunktionen
Snippet öffnen →
C · Experte

Thread-lokaler Speicher mit _Thread_local

Der in C11 eingeführte Speicherklassenspezifizierer _Thread_local definiert Variablen mit Thread-Speicherdauer. Jeder Thread erhält seine eigene separate Instanz der Variable, die einmal pro Thread…

Memory ManagementPerformance
Snippet öffnen →
C · Experte

Zeiger auf Arrays variabler Länge (VLA)

Die Verwendung eines Zeigers auf ein Array mit variabler Größe (VLA) als Funktionsparameter ermöglicht eine natürliche mehrdimensionale Indizierung (matrix[i][j]) unter Beibehaltung der Typsicherhe…

Arrays & ListenFunktionen
Snippet öffnen →
C · Experte

Der _Noreturn Funktions-Spezifizierer

Das Schlüsselwort _Noreturn (C11) gibt an, dass eine Funktion nicht zu ihrem Aufrufer zurückkehrt, typischerweise weil sie das Programm beendet oder einen Long-Jump ausführt. Dies dient dem Compile…

FunktionenKontrollstrukturen
Snippet öffnen →
C · Experte

Zeigersubtraktion und ptrdiff_t

Das Ergebnis der Subtraktion zweier Zeiger ist vom vorzeichenbehafteten Ganzzahltyp 'ptrdiff_t'. Diese Operation ist nur definiert, wenn beide Zeiger auf Elemente desselben Arrays oder auf das Elem…

Memory ManagementDatentypen
Snippet öffnen →
C · Experte

Typ-generische Selektion mit _Generic

Eingeführt in C11, bietet _Generic eine Möglichkeit, typ-generische Makros zu schreiben. Es fungiert wie eine Switch-Anweisung zur Kompilierzeit, die einen Ausdruck basierend auf dem Typ eines kont…

SyntaxFunktionen
Snippet öffnen →
C · Experte

Nicht-lokale Sprünge zur Fehlerbehandlung

setjmp und longjmp ermöglichen nicht-lokale Sprünge, die den standardmäßigen Funktionsaufruf- und Rückgabemechanismus umgehen. Dies wird häufig verwendet, um eine Ausnahme-ähnliche Fehlerbehebung z…

KontrollstrukturenFunktionen
Snippet öffnen →
C · Experte

Kapselung via opaker Pointer

Opake Pointer (oder 'PIMPL' in C) verbergen die Implementierungsdetails eines Structs vor dem Benutzer. Durch die Bereitstellung nur einer Vorwärtsdeklaration im Header verhindert der Compiler, das…

OOPBest Practices
Snippet öffnen →
C · Experte

X-Makros zur Datensynchronisation

X-Makros sind eine Präprozessor-Technik zur Generierung von repetitivem Code aus einer einzigen Master-Liste. Dies stellt sicher, dass Enums, String-Arrays und andere verwandte Strukturen synchron…

SyntaxBest Practices
Snippet öffnen →
C · Experte

Flexible Array-Elemente (FAMs)

Flexible Array-Elemente (eingeführt in C99) erlauben es einer Struktur, mit einem Array ohne feste Größe zu enden. Diese Technik ermöglicht es, mit einer einzigen Heap-Allokation sowohl den Metadat…

Memory ManagementArrays & ListenDatentypen
Snippet öffnen →
C · Experte

Bitfelder und strukturelles Speicher-Packing

Bitfelder ermöglichen die Definition von Strukturmerkmalen mit expliziter Bitbreite. Dies ist essenziell für die hardwarenahe Programmierung oder das Komprimieren von Daten für Netzwerkprotokolle.…

Memory ManagementPerformanceDatentypen
Snippet öffnen →
C · Experte

Generische Callbacks via Funktionszeiger

Funktionszeiger ermöglichen Polymorphie in C. Durch die Verwendung von 'void*'-Parametern in einer Callback-Signatur können generische Algorithmen (wie qsort) erstellt werden, die auf jedem Datenty…

FunktionenBest Practices
Snippet öffnen →
C · Experte

Asynchrone Sicherheit mit sig_atomic_t

'sig_atomic_t' ist ein Ganzzahltyp, auf den selbst bei asynchronen Interrupts (Signalen) atomar zugegriffen werden kann. In Kombination mit 'volatile' wird verhindert, dass der Compiler die Variabl…

PerformanceMemory ManagementDatentypen
Snippet öffnen →
C · Experte

Nicht-lokale Sprünge mit setjmp und longjmp

Nicht-lokale Sprünge ermöglichen es dem Steuerfluss, standardmäßige Funktionsaufrufe und Rücksprünge über den Aufruf-Stack hinweg zu umgehen. Der Aufruf von `setjmp` speichert den aktuellen Ausführ…

KontrollstrukturenFunktionenBest Practices
Snippet öffnen →