linux c assert函数

2021-06-24, updated 2021-09-12

assert()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0), 程序将报告错误,并终止执行。如果表达式不为0,则继续执行后面的语句,它的作用是终止程序以免导致严重后果,同时也便于查找错误。

所需头文件:#include <assert.h>

使用 assert 的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。

在调试结束后,可以通过在包含 #include 的语句之前插入 #define NDEBUG 来禁用 assert 调用,示例代码如下:

1
2
3
#include <stdio.h>
#define NDEBUG 
#include <assert.h>

或者使用gcc -DNDEBUG来禁用assert

何时需要使用断言

  1. 可以在预计正常情况下程序不会到达的地方放置断言:ASSERT( FALSE );
  2. 断言可以用于检查传递给私有方法的参数。(对于公有方法,因为是提供给外部的接口,所以必须在方法中有相应的参数检验才能保证代码的健壮性)
  3. 使用断言测试方法执行的前置条件和后置条件
  4. 使用断言检查类的不变状态,确保任何情况下,某个变量的状态必须满足。(如age属性应大于0小于某个合适值)

什么地方不要使用断言

断言语句不是永远会执行,可以屏蔽也可以启用

因此:

  1. 不要使用断言作为公共方法的参数检查,公共方法的参数永远都要执行
  2. 断言语句不可以有任何边界效应,不要使用断言语句去修改变量和改变方法的返回值

实例

1
2
3
4
5
6
7
8
9
#include <stdio.h>
#include <assert.h>

int main()
{
    assert(1<100);
    assert(1>100);
    return 0;
}

运行结果

1
2
a.out: main.c:7: main: Assertion `1>100' failed.
Aborted

原文链接

https://blog.csdn.net/zqixiao_09/article/details/51417555

words: 555 tags: c linux-c