#if defined(_ASSERT_H)
#undef _ASSERT_H
#undef assert
#undef __ASSERT_VOID_CAST
#endif

#ifndef _ASSERT_H
#define _ASSERT_H 1

#define __ASSERT_VOID_CAST (void)

#if !defined(NDEBUG)
#define assert(expr) \
    ((expr) ? __ASSERT_VOID_CAST(0) : __assert_fail(__FILE__, __LINE__, #expr))
#else
#define assert(expr) \
    ((void) 0)
#endif

#if defined(__cplusplus)
extern "C" {
#endif

[[noreturn]] void __assert_fail(const char *file, int line, const char *message);

#if defined(__cplusplus)
}
#endif

#endif
