Groovy, I was just yesterday thinking about using an assert macro to make my code a bit safer, and then saw this thread today.
I would personally use a function as well to avoid the hacky stuff (and potential double-definitions of who_cares [even though who_cars could be declared globally and then re-assigned in the assertion, I guess]):
function failAssert(char *msg) {
error(msg);
sys_exit(NULL);
}
#define assert(con, msg) if(!(con))failAssert(msg)
Jibb