capypad
0 Tage Serie
c / intermediate
Snippet

Sichere mehrzeilige Makros mit do-while(0)

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 Makro in 'if'-Anweisungen ohne geschweifte Klammern verwendet wird, und erzwingt ein Semikolon.

snippet.c
c
1
2
3
4
#define SAFE_FREE(ptr) do { \
free(ptr); \
ptr = NULL; \
} while (0)
Erklärung
1
do { ... } while (0)
Erzeugt einen Scope, der genau einmal ausgeführt wird und ein abschließendes Semikolon erfordert.
2
ptr = NULL;
Stellt sicher, dass der Pointer nach dem Freigeben ungültig wird, um Dangling-Pointer zu vermeiden.