<assert.h>
-- 宏函数
阅读:0
作者:严长生
assert() 断言函数,用于在调试过程中捕捉程序错误
void assert (int expression);
断言函数,用于在调试过程中捕捉程序的错误。“断言”在语文中的意思是“断定”、“十分肯定地说”,在编程中是指对某种假设条件进行检测,如果条件成立就不进行任何操作,如果条件不成立就捕捉到这种错误,并打印出错误信息,终止程序执行。
assert() 会对表达式
expression
进行检测:
-
如果
expression
的结果为 0(条件不成立),那么断言失败,表明程序出错,assert() 会向标准输出设备(一般是显示器)打印一条错误信息,并调用 abort() 函数终止程序的执行。 -
如果
expression
的结果为非 0(条件成立),那么断言成功,表明程序正确,assert() 不进行任何操作。
要打印的错误信息的格式和内容没有统一的规定,这和标准库的具体实现有关(也可以说和编译器有关),但是错误信息至少应该包含以下几个方面的信息:
-
断言失败的表达式,也即
expression
; - 源文件名称;
- 断言失败的代码的行号。
大部分编译器的格式如下所示:
Assertion failed: expression, file filename, line number
参数
-
expression
要检测的表达式。如果表达式的值为 0,那么断言失败,程序终止执行;如果表达式的值为非 0,那么断言成功,assert() 不进行任何操作。
返回值
无返回值assert() 的用法和机制
在大部分编译器下,assert() 是一个宏;在少数的编译器下,assert() 就是一个函数。我们无需关心这些差异,只管把 assert() 当做函数使用即可。assert() 的用法很简单,我们只要传入一个表达式,它会计算这个表达式的结果:如果表达式的结果为“假”,assert() 会打印出断言失败的信息,并调用 abort() 函数终止程序的执行;如果表达式的结果为“真”,assert() 就什么也不做,程序继续往后执行。
下面是一个具体的例子:
#include <stdio.h> #include <assert.h> int main(){ int m, n, result; scanf("%d %d", &m, &n); assert(n != 0); //写作 assert(n) 更加简洁 result = m / n; print