ASSERT与VERIFY宏的区别(转载)

简介:
1 ASSERT与VERIFY宏在Debug模式下作用基本一致,二者都对表达式的值进行计算,如果值为非0,则什么事也不做;如果值为0,则输出诊断信息。

2 ASSERT与VERIFY宏在Release模式下效果完全不一样。ASSERT不计算表达式的值,也不会输出诊断信息;VERIFY计算表达式的值,但不管值为0还是非0都不会输出诊断信息。 VERIFY与ASSERT用在程序调试上并无本质上的区别。
 
 
此外,TRACE() 宏的编译也受 _DEBUG 控制。
所有这些断言都只在 Debug版中才被编译,而在 Release 版中被忽略。唯一的例外是 VERIFY() 。事实上,这些宏都是调用了 assert() 函数,只不过附加了一些与库有关的调试代码。如果你在这些宏中加入了任何程序代码,而不只是布尔表达式(例如赋值、能改变变量值的函数调用 等),那么 Release 版都不会执行这些操作,从而造成错误。初学者很容易犯这类错误,查找的方法也很简单,因为这些宏都已在上面列出,只要利用 VC++ 的 Find in Files 功能在工程所有文件中找到用这些宏的地方再一一检查即可。另外,有些高手可能还会加入 #ifdef _DEBUG 之类的条件编译,也要注意一下。
顺便值得一提的是 VERIFY() 宏,这个宏允许你将程序代码放在布尔表达式里。这个宏通常用来检查 Windows API 的返回值。有些人可能为这个原因而滥用 VERIFY() ,事实上这是危险的,因为 VERIFY() 违反了断言的思想,不能使程序代码和调试代码完全分离,最终可能会带来很多麻烦。因此,专家们建议尽量少用这个宏

本文转自jazka 51CTO博客,原文链接:http://blog.51cto.com/jazka/188130,如需转载请自行联系原作者
相关文章
使用hutool完成excle文件导入导出
使用hutool完成excle文件导入导出
使用hutool完成excle文件导入导出
|
Linux
Xshell 登录 AWS CentOS 出现“所选择的用户秘钥未在远程主机上注册“,最终解决办法!
其实就是 登录用户名错了,是 root,不是centos 也不是 ec2-user !  Xshell 连接配置界面如下   最重要是 登录授权配置  最后,登录成功! 就这么简单
3069 0
|
5月前
|
缓存
|
10月前
|
人工智能 自然语言处理 测试技术
指令跟随大比拼!Meta发布多轮多语言基准Multi-IF:覆盖8种语言,超4500种任务
Meta发布的Multi-IF新基准旨在评估大型语言模型(LLMs)在多轮和多语言指令跟随方面的能力。该基准扩展了IFEval,包含4501个多语言对话,每个对话有三个回合,涵盖8种语言。评估结果显示,现有模型在多轮和非拉丁字母语言中的表现较差,揭示了LLMs在这些方面的潜在限制。尽管存在局限性,Multi-IF为更全面、真实的模型评估提供了重要参考,推动LLMs的发展与改进。论文链接:https://arxiv.org/abs/2410.15553
381 29
|
搜索推荐 算法 C语言
【排序算法】八大排序(上)(c语言实现)(附源码)
本文介绍了四种常见的排序算法:冒泡排序、选择排序、插入排序和希尔排序。通过具体的代码实现和测试数据,详细解释了每种算法的工作原理和性能特点。冒泡排序通过不断交换相邻元素来排序,选择排序通过选择最小元素进行交换,插入排序通过逐步插入元素到已排序部分,而希尔排序则是插入排序的改进版,通过预排序使数据更接近有序,从而提高效率。文章最后总结了这四种算法的空间和时间复杂度,以及它们的稳定性。
557 8
|
机器学习/深度学习 数据采集 算法
|
物联网 人机交互 语音技术
计算机中输入输出设备
【7月更文挑战第28天】
395 1
基于遗传算法的TSP问题求解
以下内容大部分来源于《MATLAB智能算法30个案例分析》,仅为学习交流所用。
|
消息中间件 存储 缓存
Kafka 3.0新特性 详解(一)
导语 | kafka3.0的版本已经试推行去zk的kafka架构了,如果去掉了zk,那么在kafka新的版本当中使用什么技术来代替了zk的位置呢,接下来我们一起来一探究竟,了解kafka的内置共识机制和raft算法
2671 0
Kafka 3.0新特性 详解(一)
|
测试技术 Android开发
Junit - 断言方法(Assert Methods)
Junit - 断言方法(Assert Methods)
463 0
Junit - 断言方法(Assert Methods)