由内存复制函数看assert宏的使用
来源:互联网 发布:ps4重新构建数据库 编辑:程序博客网 时间:2024/05/19 11:44
程序一般分为Debug版本和Release版本,Debug版本用于内部调试,Release版本发行给用户使用。
断言assert是仅在Debug版本起作用的宏,它用于检查“不应该”发生的情况。示例6-5是一个内存复制函数。在运行过程中,如果assert的参数为假,那么程序就会中止(一般地还会出现提示对话,说明在什么地方引发了assert)。
void *memcpy(void *pvTo, const void *pvFrom, size_t size){assert((pvTo!=NULL)&&(pvFrom!=NULL));byte *pbTo=(byte*) pvTo;//防止改变pvTo的地址byte *pbFrom=(byte*) pvFrom;//防止改变pvFrom的地址while(size-- >0)*pbTo++ = *pbFrom++;return pvTo;}
assert不是一个仓促拼凑起来的宏。为了不在程序的Debug版本和Release版本引起差别,assert不应该产生任何副作用。所以assert不是函数,而是宏。程序员可以把assert看成一个在任何系统状态下都可以安全使用的无害测试手段。如果程序在assert处终止了,并不是说含有该assert的函数有错误,而是调用者出了差错,assert可以帮助我们找到发生错误的原因。
很少有比跟踪到程序的断言,却不知道该断言的作用更让人沮丧的事了。你化了很多时间,不是为了排除错误,而只是为了弄清楚这个错误到底是什么。有的时候,程序员偶尔还会设计出有错误的断言。所以如果搞不清楚断言检查的是什么,就很难判断错误是出现在程序中,还是出现在断言中。幸运的是这个问题很好解决,只要加上清晰的注释即可。这本是显而易见的事情,可是很少有程序员这样做。这好比一个人在森林里,看到树上钉着一块“危险”的大牌子。但危险到底是什么?树要倒?有废井?有野兽?除非告诉人们“危险”是什么,否则这个警告牌难以起到积极有效的作用。难以理解的断言常常被程序员忽略,甚至被删除。
0 0
- 由内存复制函数看assert宏的使用
- assert()函数的使用
- assert()函数的使用
- memcpy内存复制函数的使用
- assert断言函数的使用
- assert()函数的使用
- 断言assert()函数的使用
- ASSERT 宏的使用
- assert()宏的使用!
- assert();宏的使用
- assert宏的使用
- 由push_back引起的复制构造函数
- C++中TRACE宏及assert()函数的使用
- C++中TRACE宏及assert()函数的使用
- C++中TRACE宏及assert()函数的使用
- C++中TRACE宏及assert()函数的使用 .
- C++中TRACE宏及assert()函数的使用
- C++中TRACE宏及assert()函数的使用
- 全栈工程师的悲与欢
- android如果给imageview做圆角,如果在原有的bitmap上加上一些修饰的drawable
- 递归理解
- 查找字符串出现次数
- 本周学习积累(pgp加密,通道机,secureCRT)
- 由内存复制函数看assert宏的使用
- 不要62(杭电2089)
- getCurrentSession与getSession之关系
- QT 表格设置左上角按钮
- oracle 发送邮件
- 新手程序员笔记-Spring-spring上传下载
- chmod 改变权限命令
- API Demos 笔记(1)——ApiDemos.java
- 六度分离——最短路