On Sunday, 13 January 2019 at 22:40:57 UTC, Alec Stewart wrote:


Example without code; for some reason a macro is defined for the stdlib functions `malloc`, `realloc`, and `free`. Maybe it's just because I don't have any pro experience with C or C++, but that seems a bit excessive. Or I could just be dumb.

Generally this is done to allow the compile-time configuration of memory allcoators. Back in my C days I had a little memory module that tracked total allocated and unallocated bytes and logged a few stats to a file at shutdown. I used macros to switch between it and the default stdlib calls.


I understand what it's doing, but do I really any of this with D?

No.

And then there's this inline function

    #define RS_DATA_SIZE(f, s, input)
          \
            do {
   \
                    if (rs_is_heap(input))                                  \
                            f(s, input->heap.buffer, rs_heap_len(input));   \
                    else                                                    \
                            f(s, input->stack.buffer, rs_stack_len(input)); \
            } while (0)


Generally, this sort of thing can be moved into a D function or template if it's repeated in several places. Without the do...while, of course. And in case you're unfamiliar with its purpose here:

https://stackoverflow.com/questions/154136/why-use-apparently-meaningless-do-while-and-if-else-statements-in-macros


Reply via email to