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



Reply via email to