linux 之assert学习

转载地址:https://blog.csdn.net/supenman_mwg/article/details/8601387

assert是头文件assert.h中的一个宏定义,执行到assert(test()),如果test()返回值为真,则继续往下执行,如果为假,则报错退出程序;

如果在包含assert.h之前定义一个NDEBUG宏(表示No Debug),就可以禁用assert.h中的assert宏定义

 

转载地址:https://www.cnblogs.com/cxjchen/archive/2013/04/25/3042172.html

程序员都知道assert。但在Windows下使用VC编写的程序的人来说,使用assert之后,只需在IDE中设置为debug版或者是release版,编译器就会自动忽略掉assert。

但在Linux下,必须要在编译命令中加入-DNDEBUG中,系统编译时才不会将assert编译进去。不然,程序运行时有可能会被assert中断。

 

转载地址:https://www.cnblogs.com/jackluolei/p/8858787.html

 assert是常用于程序调试的一个宏函数,在程序运行时,计算assert()括号里面的表达式,如果为false则报错,并且终止程序的运行,相反继续运行。

简而言之:assert()函数的功能是终止程序以免导致更加严重的错误,同时也用于查找错误。

       使用assert()函数的情况:

  1.在函数开始时检验传入参数的合法性。

  2.一个assert()函数一次只能检测一个条件的合法性。

  3.因assert()只在DEBUG下生效,故不能使用改变环境的语句。

  4.assert()不能用它来实现条件过滤。

       5.频繁的调用assert()语句会影响程序的性能,增加额外的开销

 

转载地址:http://www.sohu.com/a/114171895_486809

首先来给大家说说assert函数:

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

void assert(

int expression

);

assert的作用是现计算表达式 expression ,assert 其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。

代码如下:

接下来小编给大家总结了assert函数的方法总结,一起来看看吧!

linux系统使用assert函数的方法详解就给大家介绍到这里了,如果有不足之处还望见谅。大家也可以在评论下方写出自己的见解,大家一起学习!

 

转载地址:http://blog.sina.com.cn/s/blog_602f87700102xx7e.html

0. 基础知识:

assert()用来检查不可能发生的行为, 以确保开发者在调试阶段尽早发现不可能发生的事件是否真的发生了。 若真的发生了,则表明这里逻辑有问题。

assert()最好的地方是,它只在debug模式下其效果,在Release模式下无效。保证了程序效率。

 

 

assert()  协助开发者发现程序bug.  当参数为false时,assert() 输出错误信息到标准错误. 并且调用abort(3) 终止程序。 

 

错误信息包括调用者的文件名和函数名,程序行号。

 

如果宏 NDEBUG 被defined 在include 头文件 assert.h之前,assert()不做任何动作。

#define NDEBUG

#include <<span style="margin: 0px; padding: 0px; font-family: "Courier New" !important;">assert.h>

 

 

assert()使用总结:

1. 在函数开始阶段,检验传入参数的合法性。

例如: 

MsgCpy(msg*  dst, msg* src)

{

assert(dst != NULL);

assert(src != NULL);

.......

}

 

2. 每个assert()仅仅检验一个条件。否则出错了不知道是哪个条件出错。

 

3. 不能在assert()中对变量做出改变因为assert()仅在Debug模式下起作用。若改变了变量,则Release和Debug模式下会有不同。

例如:

assert(i++ < 1024)

则在Debug下,i++被执行了。 Release模式下,i++没被执行。

 

4. assert()应自成一行,上下有空行。

 

5. assert()与条件过滤各自有自己的适用点。不能混淆

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值