自己动手写的一个测试执行语句对错的程序,C函数库中其实已有。
assert.h文件,定义assert宏函数,并实现测试功能
/*
* assert是用来判断test执行是否出错,若出错则输出错误文件及行号
*/
#undef assert //如果以前定义了宏assert, 取消
#ifdef NDUBUG //若定义了宏NDUBUG,NDEBUG一般是用来使宏assert失效的
#define assert(test) ((void)0)
#else
void _Assert(char *); //声明_Assert函数,
#define _STR(x) _VAL(x)
#define _VAL(x) #x
//测试test的正确性,正确则无返回,错误,则打印错误的文件及相应的行号
#define assert(test) ((test) ? (void)0 : _Assert(__FILE__ ":" _STR(__LINE__) " " #test))
#endif
assert.c文件, 实现_Assert()函数,即对测试结果进行输出功能
#include <stdio.h>
#include <stdlib.h>
void _Assert(char *mesg)
{
//print assertion message and abort
fputs(mesg, stderr);
fputs(" -- assertion failed\n", stderr);
abort();
}
main,c文件,调用宏assert进行测试
/*
* 三个特殊标识符
* __FILE__ 文件名(string)
* __LINE__ 当前执行的行号 (int)
* __func__ 当前执行的函数名(string)
*/
#include <stdio.h>
#include "assert.h"
int main(void)
{
printf("%s\n", __func__); //这条语句不能放在 assert(2 > 3)后面,因为assert判断语句若是错误的话,则会中止程序(abort())
assert(2 > 3);
return 0;
}