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
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.