调试时的Assert用法
来源:互联网 发布:apache windows 32位 编辑:程序博客网 时间:2024/06/05 20:55
Assert断言类似于头文件保护技术,在调试代码时有重要的作用。基本思想(C++ Primer):程序可以 包含一些用于调试的代码,但是这些代码只在开发程序时使用。但应用程序编写完成准备发布时,要先屏蔽掉调试代码。这种方法用到两项预处理功能:assert和NDEBUG。
assert预处理宏(头文件cassert)
表达式:assert(expr),如果expr为假(即0),assert输出信息并终止程序的执行。如果表达式为真(即非0),assert什么 也不做。
#include "stdafx.h"#include <cassert>#include <iostream>using namespace std;int _tmain(int argc, _TCHAR* argv[]){int a=5;assert(a>4);a=3;assert(a>4);system("pause");return 0;}结果如图:
NDEBUG预处理变量
assert的行为依赖于一个名为NDEBUG的预处理变量的状态。如果定义了NDEBUG,则assert什么也不做。默认状态没有定义NDEBUG,此时assert将执行运行时的检测。使用#define NDEBUG来关闭调试状态,这个宏定义需要在#include<cassert>之前。定义NDEBUG能避免检测各种条件所需的运行时开销,因为当前并不执行断言assert。
#include "stdafx.h"#define NDEBUG#include <cassert>#include <iostream>using namespace std;int _tmain(int argc, _TCHAR* argv[]){int a=5;assert(a>4);a=3;assert(a>4);system("pause");return 0;}结果:
需要注意的是:
1. 使用断言尽量只检测一个条件,多个条件一起检测时无法知道是哪条语句出错。
2. 不要在断言assert中执行改变环境变量的语句,如assert(i++>5),因为断言assert只在程序开发时使用,发布正式版本时会禁用。
0 0
- 调试时的Assert用法
- C语言assert(断言)的用法-程序调试用
- 有关assert的用法
- ASSERT的用法
- ASSERT的用法
- 断言ASSERT的用法
- assert的多种用法
- assert()断言的用法
- assert的用法
- ASSERT()的用法
- assert的用法
- assert() 断言的用法
- assert的用法总结
- assert()的用法
- assert的用法
- assert的用法
- 断言(ASSERT)的用法
- assert 的用法
- ToggleButton(开关按钮)和Switch(开关)的使用
- leetcode解题报告15. 3Sum
- leetcode-标签为stack 232. Implement Queue using Stacks
- java接口备忘云云
- 逆天!安卓正式超越 Windows 成世界第一大操作系统
- 调试时的Assert用法
- MVC详解:了解真正所谓的"框架"
- java_多态
- 在 Ubuntu 16.04上安装 Nginx, MySQL, PHP (LEMP)
- springMVC方法参数值注入简要源码分析
- sql语句updata
- Ztree树形菜单实现动态初始化、添加、删除、修改节点
- 《疯狂JAVA讲义》之五——面向对象程序设计与结构化程序设计
- MVC模式与三层架构的区别