巧用 C语言 断言机制助力程序debug

断言可以对在系统中隐藏很深,用其它手段极难发现的问题进行定位,并且输出信息很详细,可以很好地解决大多数C语言编译器错误信息输出不详细的问题。

断言是对某种条件进行检测,若条件成立则无反应,否则程序执行到断言处终止,同时输出为成立的条件。

assert是一个宏定义,并不是函数。

#include <assert.h>//assert所在头文件
void main()
{
int i = 9;
assert(i == 0);
}

则程序输出如下:
Assertion failed!
Program: E:\C\t_assert.exeFile: E:\C\t_assert.c, Line 8Expression: i == 0
This application has requested the Runtime to terminate it in an unPlease contact the application's support team for more information.

经常调用断言,会极大地增加程序的开销,可以通过以下方法使断言机制,使只在debug下,使用断言机制。

这种情况下,不要包含头文件 assert.h
``#ifndef NDEBUG
#define assert(exp) ((void)0)#else#define assert(exp) (void)( (exp) || (_assert(#exp, __FILE__, __LINE__), 0) )

在没有定义 NDEBUG下,assert被定义为 (void)0,无意义语句,而且对程序没有什么影响。

在定义NDEBUG时,断言会输出 不成立的条件 和 语句所在文件和行,所以我们可以在debug时,在上述代码之前,定义 NDEBUG ,在程序作为成品交出时, 删除NDEBUG的宏定义。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值