Re:What is your favorite C programming trick? (2009)
by Thorrez on Monday November 23, 2020 @01:36AM
(#25184127)
What's the benefit of that over nn3's version?
[ Parent
| on HN ]
Re:What is your favorite C programming trick? (2009)
by dromtrund on Monday November 23, 2020 @02:24AM
(#25184324)
It'll only evaluate the pointer once. It's possible to make this a function though, that might be preferable
Re:What is your favorite C programming trick? (2009)
by Thorrez on Monday November 23, 2020 @04:12AM
(#25184931)
Good point. But it seems like it would require usage like this:
int* p = malloc(sizeof(int));
FREE(&p);
What if we instead define the macro like this: #define FREE(ptr) do { \
__typeof__(ptr)* const __x = &(ptr); \
free(*__x); *__x = NULL; \
} while(0)
Then make usage slightly shorter, as well as more similar to free(): int* p = malloc(sizeof(int));
FREE(p);
Re:What is your favorite C programming trick? (2009)
by btrask on Monday November 23, 2020 @04:52AM
(#25185128)
Taking a pointer-to-pointer is intentional to make it clear that the pointer will be modified. That's actually the most important difference from nn3's version IMHO.
Re:What is your favorite C programming trick? (2009)
by btrask on Monday November 23, 2020 @03:13AM
(#25184598)
I tried making it a plain function at one point but ran into some weirdness around using void * * with certain arguments (const buffers?). You don't want to accept plain void * because it's too easy to pass a pointer instead of a pointer to a pointer. Using a macro is (ironically) more type safe.
Maybe someone else could figure out how to do it properly, since I'd definitely prefer a function.