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(x) ( (test) ? (void) 0 /
: _Assert(__FILE__":"_STR(__LINE__) "" #test) )
#endif
__FILE__,__LINE__ 为语言内置的宏,代表当前文件,和当前行。在各种c编译器里面会有实现。
xassert.h
#include<assert.h>
#include<stdio.h>
#include<stdlib.h>
void _Assert(char *mesg)
{
fputs(mesg,stderr);
fputs(" -- assertion failed/n",stderr);
abort();
}
只给出一种实现形式。在具体编译器会有更加具体的信息。