介绍
assert.h
定义了一个可用作标准调试工具的宏函数:assert
宏函数。这个宏函数是C语言的调试的一个很重要的工具。
assert
函数原型
void assert (int expression);
描述
此函数用于评估断言。
简单来说就是,此宏函数接收一个表达式,如果对表达式进行求值得到的结果为 0
,则立即中断程序并返回错误信息,否则程序则继续正常运行。
详细过程是,此宏函数会判断其 expression
参数是否为 0
。如果是,则触发(位于 stdlib.h
的) abort
函数,并在标准输出报告错误信息。报错信息的内容取决于具体的库,但大多数的格式都是这样的:Assertion failed: 表达式, file 文件名, line 行号
。
提示:如果要发行程序,可以在包含 assert.h
前添加 #define NDEBUG
以禁用 assert
宏函数。
示例
这个案例实现了一个 print_number
函数,此函数输出指针指向的数字,并可以使用断言以防指针为空指针。
/*此案例修改自 http://www.cplusplus.com/reference/cassert/assert/*/
#include <assert.h>
#include <stdio.h> // printf
void print_number(int* myInt) {
assert (myInt!=NULL);
printf ("%d\n",*myInt);
}
int main () {
int a=10;
int *b = NULL;
int *c = NULL;
b=&a;
print_number (b);
print_number (c); // 在这里会在运行时报错。
return 0;
}