在现实世界中,我们脑袋时刻都在判断对与错,对的事情我们会继续深入下去,而错的事情我们会马上停止,那么在编程开发中我们如何赋予程序这种判断事物对错的能力呢?其中一个方案就可以使用断言assert,我们最常用的地方就是在函数中检查形参的数据合法性。
1、函数所属头文件:
assert.h
2、函数原型:
void assert (int expression);
3、功能说明:
assert的关键在于判断expression的逻辑真假,如果为false,就会在stderr上面打印一条包含“表达式,文件名,行号”的错误信息,然后调用abort结束整个程序。
4、程序实例:
#include <stdio.h>
#include <stdlib.h>
//#define NDEBUG //可以禁止断言
#include <assert.h>
void main()
{
//测试true情况:以写打开一个文件,不存在则创建新文件
FILE *fpWrite = fopen("d:\\testWrite", "w");
//不会出错
assert(fpWrite != NULL);
fclose(fpWrite);
//测试false情况:以读打开一个文件,不存在会失败
FILE *fpRead = fopen("d:\\testRead", "r");
//会出错
assert(fpRead != NULL);
//程序调用abort退出,不会执行到此步
fclose(fpRead);
system("pause");
}
当然,频繁的调用assert会影响系统性能,增加系统额外的开销,如果想禁用断言功能时,可以在assert.h头文件之前定义NDEBUG。