Statische Variablen in Funktionen
Eine statische lokale Variable behält ihren Wert zwischen Funktionsaufrufen bei und wird nur einmal beim Programmstart initialisiert.
Snippet öffnen →Lies diese C-Snippets für Fortgeschrittene Zeile für Zeile — jedes kommt mit einer Erklärung, was der Code tut und warum.
Eine statische lokale Variable behält ihren Wert zwischen Funktionsaufrufen bei und wird nur einmal beim Programmstart initialisiert.
Snippet öffnen →Bitweise Operatoren werden verwendet, um mehrere boolesche Flags in einem einzigen Integer zu speichern, was sehr speichereffizient und schnell ist.
Snippet öffnen →In C zerfallen Array-Namen in Zeiger. Das Addieren eines Integers zu einem Zeiger bewegt den Zeiger um diese Anzahl von Elementen, nicht um Bytes.
Snippet öffnen →Die Verwendung von malloc zur Speicherallokation für Strukturen auf dem Heap ist essenziell, wenn Größe oder Lebensdauer der Daten zur Kompilierzeit unbekannt sind.
Funktionszeiger erlauben es, Funktionen als Argumente an andere Funktionen zu übergeben, was flexible und generische Codemuster wie Callbacks ermöglicht.
Snippet öffnen →Obwohl oft davon abgeraten wird, ist die Verwendung von 'goto' für die zentrale Ressourcenbereinigung ein verbreitetes Muster in der C-Programmierung. Es verhindert tief verschachtelte if-Anweisung…
Snippet öffnen →Eine Union ermöglicht es, verschiedene Datentypen im selben Speicherbereich zu speichern. Die Größe der Union wird durch ihr größtes Element bestimmt. Dies ist besonders in der Systemprogrammierung…
Snippet öffnen →Das Einschließen eines Makros mit mehreren Anweisungen in einen 'do { ... } while (0)'-Block stellt sicher, dass es sich wie eine einzelne Anweisung verhält. Dies verhindert Logikfehler, wenn das M…
Snippet öffnen →Der 'restrict'-Qualifier ist ein Hinweis an den Compiler, dass während der Lebensdauer des Pointers nur der Pointer selbst oder ein davon abgeleiteter Wert verwendet wird, um auf das Objekt zuzugre…
Snippet öffnen →Variadische Funktionen ermöglichen es, eine variable Anzahl von Argumenten an eine Funktion zu übergeben. Dies wird mit den in <stdarg.h> definierten Makros erreicht. Man muss mindestens ein festes…
Snippet öffnen →Benannte Initialisierungen ermöglichen es, Strukturmitglieder namentlich statt nach ihrer Position zu initialisieren. Dies macht den Code robuster gegenüber Änderungen in der Strukturdefinition und…
Snippet öffnen →Das Schlüsselwort 'volatile' teilt dem Compiler mit, dass sich der Wert einer Variablen jederzeit ändern kann, ohne dass der umgebende Code eine Aktion ausführt. Dies verhindert, dass der Compiler…
Snippet öffnen →_Static_assert (eingeführt in C11) ermöglicht es, Bedingungen während der Kompilierungsphase statt zur Laufzeit zu prüfen. Wenn die Bedingung falsch ist, generiert der Compiler einen Fehler und bri…
Snippet öffnen →Das Schlüsselwort 'inline' ist ein Hinweis an den Compiler, Funktionsaufrufe durch den tatsächlichen Funktionskörper zu ersetzen. Dies eliminiert den Overhead eines Funktionsaufrufs (Stack-Manipula…
Snippet öffnen →In C werden mehrdimensionale Arrays zeilenweise (row-major order) gespeichert. Um Speicher-Offsets korrekt zu berechnen, muss eine Funktion, die ein 2D-Array empfängt, die Größe der Spalten (die zw…
Snippet öffnen →Die Funktion snprintf ist eine sicherere Alternative zu sprintf, da sie eine maximale Puffergröße erfordert. Dies verhindert Pufferüberläufe, indem sichergestellt wird, dass nicht mehr als 'n' Zeic…
Snippet öffnen →Der Header stdatomic.h (C11) bietet Typen und Funktionen für atomare Operationen, die für die threadsichere Programmierung ohne den Overhead schwerer Sperren (Locks) unerlässlich sind. Diese Operat…
Snippet öffnen →Die Funktion strcspn berechnet die Länge des Anfangssegments eines Strings, das vollständig aus Zeichen besteht, die NICHT in einer angegebenen Menge enthalten sind. Sie ist sehr effizient, um das…
Snippet öffnen →Die Funktion setvbuf ermöglicht die manuelle Steuerung der Pufferung eines Dateistreams (wie stdout). Man kann zwischen voll gepuffert (_IOFBF), zeilengepuffert (_IOLBF) oder ungepuffert (_IONBF) w…
Snippet öffnen →Im Gegensatz zum einfacheren atoi() bietet strtol() eine robuste Fehlerprüfung und verarbeitet verschiedene Zahlenbasen. Es erkennt Überläufe, leere Eingaben und teilt präzise mit, wo der numerisch…
Snippet öffnen →Variadische Funktionen ermöglichen es einer Funktion, eine unbestimmte Anzahl von Argumenten zu akzeptieren. Der Header 'stdarg.h' bietet Makros wie 'va_start', 'va_arg' und 'va_end', um die Argume…
Snippet öffnen →Das in C11 eingeführte Schlüsselwort '_Generic' bietet eine Möglichkeit, einen Typ-Dispatch zur Kompilierzeit durchzuführen. Es erlaubt einem Makro, basierend auf dem Typ seines Steuerausdrucks zu…
Snippet öffnen →Das Schlüsselwort 'restrict' ist ein Hinweis an den Compiler, dass der Pointer innerhalb dieses Scopes die einzige Möglichkeit ist, auf das referenzierte Objekt zuzugreifen. Dies eliminiert potenzi…
Snippet öffnen →Unions ermöglichen es, denselben Speicherort als verschiedene Typen zu interpretieren. Dieses 'Type-Punning' wird oft auf mittlerem Niveau verwendet, um die rohe binäre Darstellung von Datentypen w…
Snippet öffnen →Compiler fügen 'Padding'-Bytes zwischen Struktur-Membern ein, um sicherzustellen, dass sie aus Performancegründen an Speichergrenzen ausgerichtet sind. Das Makro 'offsetof' aus 'stddef.h' ermöglich…
Snippet öffnen →Funktionszeiger ermöglichen es, Funktionen als Argumente zu übergeben, was dynamisches Verhalten zur Laufzeit (Callbacks) erlaubt.
Snippet öffnen →Bitfelder ermöglichen die Definition von Strukturmitgliedern mit einer spezifischen Bitanzahl, um Speicher zu sparen oder Hardware-Register abzubilden.
Snippet öffnen →Verwenden Sie bei realloc immer einen temporären Zeiger. Wenn realloc fehlschlägt, gibt es NULL zurück, aber der ursprüngliche Speicher bleibt belegt.
Snippet öffnen →Die Standardfunktion qsort verwendet einen Vergleichs-Callback, um die Sortierreihenfolge eines beliebigen Datentyps zu bestimmen.
Snippet öffnen →In C wird goto oft verwendet, um zu einem zentralen Cleanup-Block zu springen, damit Ressourcen ohne Code-Duplizierung freigegeben werden.
Snippet öffnen →