I mention C++ mostly because there exists at least one compiler which hasn't yet got round to supporting C99 – but that compiler does support C++. So if you're prepared to write code in the common subset of C99 and C++ (which mostly just means adding a few explicit casts from void *), then you can do this sort of thing even when one of the compilers you have to support is that one.
It's true, of course, that if you're writing a program that's actually allowed to use C++ features then you probably want to be doing an entirely different set of horrifying language abuses :-)
It's true, of course, that if you're writing a program that's actually allowed to use C++ features then you probably want to be doing an entirely different set of horrifying language abuses :-)