[Debugged] Wherever possible a macro should expand into an expression. #define assert(x) (!(x) ? die_miserably("x bombed\n") : 1) will do what is desired--if x is untrue, die_miserably will be executed. (Maybe this could even be improved by casting the result to void?)