Simon Josefsson <si...@josefsson.org> writes: > Sam Steingold <s...@gnu.org> writes: > >> Ben Pfaff wrote: >>> Bruno Haible <br...@clisp.org> writes: >>> >>>> What do the others think? Should we possibly extend stdlib.in.h so that >>>> abort() becomes a macro that produces a detailed error message, similar to >>>> what assert() does? >>> >>> Just changing abort() to assert(0) would improve the diagnostics >>> significantly. >> >> Sounds good. >> Actually, >> >> assert(foo()) >> >> instead of >> >> if (!foo()) assert(0) >> >> wil probably produce an even better error message. > > Unless you build with NDEBUG, in which case the entire assert(foo()) is > a no-op...
Of course there are many alternatives. A few of them: - Make sure that NDEBUG doesn't affect this file: #undef NDEBUG #include <assert.h> ... assert(0); - Belt and suspenders: #include <assert.h> #define NOT_REACHED() do { assert(0); abort(); } while (0) ... NOT_REACHED(); - Hand coding: static void fail_hard(const char *msg) { fputs (msg, stderr); abort (); } ... fail_hard("oops"); -- Ben Pfaff http://benpfaff.org