続々々 assert(3) の無効化方法

昔書いたけど結局使ってないやつ。

#if defined(ENABLE_ASSERT)
#if defined(DEBUG)
#include 
#define ASSERT(e)       assert((e))
#define DASSERT(e, ...) *1(
#define DASSERT(e, ...) ((e) ? (void)0 : my_assert(__FILE__, __LINE__, #e, __VA_ARGS__))

void
my_assert(const char *filename, int line, const char *stmt, const char *fmt, ...)
{
    char buf[2048];
    va_list argp;

    va_start(argp, fmt);
    snprintf(buf, sizeof(buf), "assertion \"%s\" failed: file \"%s\", line %d: %s\n", stmt, filename, line, fmt);
    vfprintf(stderr, buf, argp);
    va_end(argp);
}
#endif /* DEBUG */
#else  /* !ENABLE_ASSERT */
#define ASSERT(e)       ((void)0)
#define DASSERT(e, ...) ((void)0)
#endif /* ENABLE_ASSERT */

*1:e) ? (void)0 : fprintf(stderr, __VA_ARGS__), fprintf(stderr, "\n"), assert((e))) #else /* !DEBUG */ #include void my_assert(const char *filename, int line, const char *stmt, const char *fmt, ...); #define ASSERT(e) )((e) ? (void)0 : my_assert(__FILE__, __LINE__, #e, "assert()"