C语言assert() 断言怎么用

使用assert()时,必须添加头文件<assert.h>

原型:void assert(int expression);

如果expression求值为真(非零),则assert()不做任何操作。

如果expression求值为假(零),则assert()会打印一条错误消息,并调用abort()函数终止程序执行。

 void abort(void) 中止程序执行,直接从调用的地方跳出。
存在于库 stdlib

示例:

int x = 5;
int y = 10;

assert(x < y); // 不做任何操作

x = 15;
assert(x < y); // 打印错误并终止程序

这里如果x >= y,则认为程序错误,断言失败,打印错误并停止。

assert()非常适合进行程序内部的逻辑检查,捕获不应该出现的情况。

assert本质上是一个宏,在使用这个宏时,也可以在后面加上字符串自定义错误信息。如:

assert(x>0)("x must be positive")

另外

在新发布的版本中定义了宏NDEBUG。

NDEBUG就是一个预定义的宏,它表示“no debugging”的意思。

在代码中定义了NDEBUG后,所有包含<assert.h>的assert语句都会被关闭,不进行任何检查和验证。

也就是说:

#define NDEBUG
#include <assert.h>

//...
assert(x > 0);

这里的assert不会有任何效果。

NDEBUG通常在发布产品的时候定义,以关闭assert,避免影响程序效率。

在调试过程中不定义NDEBUG,这样可以打开assert来帮助调试。

总之,NDEBUG是一个控制宏,通过定义它来关闭assert断言语句,这是assert的一个重要机制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值