ASSERT_VALID_assert语句

ASSERT_VALID_assert语句ASSERT()ASSERT()被测试它的参数,若参数为0,则中断执行并打印一段说明消息。在Release版本的程序中它不起任何作用。ASSERT()使用的时候必须保证参数表达式中不能有函数调用(译者注:ASSERT()宏在Release版本中不对表达式求值),因此对于任何有函数调用的参数表达式,应该使用宏VERIFY(),以保证表达式中的函数调用在Release版本中会被正确求值…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

ASSERT()

 ASSERT()被测试它的参数,若参数为0,则中断执行并打印一段说明消息。在 Release 版本的程序中它不起任何作用。ASSERT()使用的时候必须保证参数表达式中不能有函数调用(译者注:ASSERT()宏在 Release 版本中不对表达式求值),因此对于任何有函数调用的参数表达式,应该使用宏 VERIFY(),以保证表达式中的函数调用在 Release 版本中会被正确求值。

断言(assertion)用带断言信息(程序, 模块, assertion行)的对话框执行. 对话框有3个按钮: “Break”, “Repeat” (“Debug”), and “Continue” (“Ignore”). “Break” 结束程序, “Continue” 忽略断言, 最有用的是”Repeat”按钮. 按下它在断言的地方打开源代码编辑器. 在这里你可以测试所有的变量值并明白哪里出了问题。

例如:ASSERT(pPointer);ASSERT(n>0 && n<100);ASSERT(0);

ASSERT在执行简单验证时很有用,但对于C++对象,特别是由CObject派生的对象,则有更好的方法ASSERT_VALID来实现类似操作。作为一般规则,我们应在开始使用每一个对象之前检查数据讹误,

ASSERT_VALID宏使得对CObject的派生类实现该操作非常简单。

例如:ASSERT_VALID(this);ASSERT_VALID(pView);

VERIFY()

 VERIFY()和 ASSERT()很相似,区别在于在 Release 版本中它仍然有效(译者注:原作者在这里没有讲清楚,VERIFY()不会打印说明,只是会对参数表达式求值)。

TRACE()

 TRACE()基本上就是函数 printf()的一个复制品,唯一的区别是它把结果输出到调试窗口。在 Release 版本中,它也是无效的。一般是用TRACE0(),TRACE1(),TRACE2()…而不用TRACE()。

 这三个宏在 Release 版本中都不会产生任何实质性的影响,它们是否起作用取决于是否定义了预定义了宏 _DEBUG。这是对 Microsoft Visual C++ 而言,在其它的编译器中可能其它不同的宏。

常用用法:

为了控制传进的指针:

void SomeFun(SomeType* pPointer)

{

 ASSERT(pPointer);

//some instructions.

}

你可以在”switch” 和 “if”操作中捕获奇怪的值

例如:

switch(nRGBColors){

 case nRed: {//some instructions.} break;

 case nGreen: {//some instructions.} break;

 case nBlue: {//some instructions.} break;

 default: ASSERT(0); // we should have never come here!

}

if(nWaterTemp >=0 && nWaterTemp < 50){

 //some instructions.

}

else if(nWaterTemp >= 50 && nWaterTemp <= 100){

 //some instructions.

}

else{

 ASSERT(0); // we should have never come here!

}

对值的断言:

ASSERT(nSomeValue >= MinValue and nSomeValue <= MaxValue);

ASSERT(nOtherValue != 0);

可爱的 ASSERT 错误

ASSERT( m_MyWnd.Create() );

呕! 这是一个可怕的错误! 程序在调试版中正常工作, 在发行版中不工作. 记住: 这是一个在发行版中将被移除的宏. 以这种方法你的窗口将永远不会被创建. 如果你用 MFC, 这样做:

VERIFY( m_MyWnd.Create() );

它在调试版中像ASSERT一样并且在发行版中执行m_MyWnd.Create()。

转载于:https://www.cnblogs.com/rogee/archive/2011/04/17/2018798.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196752.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SENT协议译码的深入探讨

    SENT协议译码的深入探讨作者:Ben在工作期间,我有机会仔细地研究现代车辆上的一些最新传感器技术。虽然这些特殊的传感器已经存在一段时间了,但是SENT技术越来越多地出现在车辆中。在汽车论坛中,我发现有关使用这些传感器的问题和讨论有所增加。这些现象促使我去研究如何利用虹科Pico示波器从这些传感器中获得尽可能多的信息。我不会在SENT协议上花费太多时间,因为网络上有很多关于该协议如何工作的资料。但是,我会简单介绍一下这个网络。SENT代表单边半字节传输,并遵循J2716标准。它是低成本且单向的(仅一个方向),这意味着传

    2022年6月16日
  • DDR之ODT_ddr3 std

    DDR之ODT_ddr3 std我们知道使用DDRSDRAM的主板上面为了防止数据线终端反射信号需要大量的终结电阻。它大大增加了主板的制造成本。实际上,不同的内存模组对终结电路的要求是不一样的,终结电阻的大小决定了数据线的信号比和反射率,终结电阻小则数据线信号反射低但是信噪比也较低;终结电阻高,则数据线的信噪比高,但是信号反射也会增加。因此主板上的终结电阻并不能非常好的匹配内存模组,还会在一定程度上影响信号品质。DDR2可以根据

    2022年9月9日
  • 网络传真的安装及使用方法「建议收藏」

    网络传真的安装及使用方法「建议收藏」在宽带网迅速普及的今天,Modem好像已经“廉颇老矣”,传真Modem已变成了一块“食之无味,弃之可惜”的鸡肋。而且windows的传真模块,已经远远无法满足今天人们快节奏的工作效率。在国外已经非常普遍的网络传真(efax),终于来到了国内,从2004年的引进到根据国内人们使用习惯的不断改进,近10年来,已拥有了百万级的客户群体,特别是近年来,传真营销被企业广泛应用,带来了越来越多的垃圾传

    2022年6月28日
  • SheetJS—(js-xlsx)

    SheetJS—(js-xlsx)SheetJS的使用(js-xlsx)使用纯前端的方式实现对excel表格的读取和导出功能github地址:https://github.com/SheetJS/js-xlsx学习地址:https://www.jianshu.com/p/74d4059403051.导入功能实现下载js-xlsx到dist复制出xlsx.full.min.js引入到页面中然后通过File…

    2022年10月31日
  • 大数据数据分析架构探究

    大数据数据分析架构探究

    2021年7月5日
  • phpsotrm 2021激活码3月最新在线激活

    phpsotrm 2021激活码3月最新在线激活,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号