Eric Blake <[EMAIL PROTECTED]> writes:
> Simon Josefsson <simon <at> josefsson.org> writes:
>> Couldn't a replacement assert.h look like:
>>
>> #include <stdio.h>
>> #include "progname.h"
>>
>> #ifdef NDEBUG
>> # define assert(e) ((void) 0)
>> #else
>> # define assert(e) \
>> if (!(e)) { \
>> fprintf (stderr, "%s: %s: %s: %s: Assertion failed.\n", \
>> program_name, __FILE__, __LINE__, __func__); \
>
> Not quite. Using if(){} will break if assert occurs as the sole statement
> inside another if-else pair - use while(){} or ?: instead. [...]
The C standard says that the assert macro expands to a void
expression, not to a statement, so a while or do-while loop is
out.
--
Ben Pfaff
http://benpfaff.org