自己动手写的一个测试执行语句对错的程序,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;
}
本文介绍了一个自制的assert宏实现及其使用方法。通过定义assert宏,可以在程序运行时检查指定条件是否成立,若条件不成立则输出错误信息并终止程序。文章详细解释了assert宏的工作原理,包括如何利用预处理指令和特殊标识符来定位错误发生的文件和行号。
9932

被折叠的 条评论
为什么被折叠?



