#undef assert
#undef _assert // assert.h文件允许多次被加入
#ifdef NDEBUG
#define assert(e) ((void)0) // 等于什么都没执行
#define _assert(e) ((void)0)
#else
#define _assert(e) assert(e)
#define assert(e) ((e) ? (void)0 : __assert(__func__, __FILE__, __LINE__, #e))
// #e 表示把e当作字符串
#endif
__BEGIN_DECLS
void __assert(const char *, const char *, int, const char *);
__END_DECLS
// 以上是个人理解。如有不对,恳请指出。谢谢!