首先,贴出标准库中<assert.h>的实现源码:
#undef assert
#ifdef NDEBUG
#define assert(test)((void)0)
#else
void _Assert(char*);
#define _STR(x) _VAL(x)
#define _VAL(x) #x
#define assert(test)((test)?(void)0:_Assert(__FILE__":"_STR(__LINE)""#test))
#endif
_Assert(char*)的实现如下:
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
void _Assert(char * mesg)
{
fputs(mesg, stderr);
fputs(" -- assertion failed\n", stderr);
abort();
}
全部的代码就在这里了。首先,<assert.h> 里有一个 NDEBUG宏,从assert.h的条件宏中可以看出,如果定义了宏NDEBUG, 那么assert测试宏将等于