BOOST_STATIC_ASSERT和assert的区别
来源:互联网 发布:业余网络作家收入多少 编辑:程序博客网 时间:2024/05/16 03:16
1.assert()函数的作用
assert在c/c++中是宏,而非函数。assert宏定义在头文件<assert.h>中。其原型如下:
#define assert(_Expression) (void)( (!!(_Expression)) || (_wassert(_CRT_WIDE(#_Expression), _CRT_WIDE(__FILE__), __LINE__), 0) )assert的作用是先计算表达式_Expression,如果其值为假(即为0),那么它会打印出来assert的内容和__FILE__, __LINE__,然后执行abort()函数使kernel杀掉自己并coredump(是否生成coredump文件,取决于系统配置);否则,assert()无任何作用。宏assert()一般用于确认程序的正常操作,其中表达式构造无错时才为真值。完成调试后,不必从源代码中删除assert()语句,因为宏NDEBUG有定义时,宏assert()的定义为空。
下面是assert宏的使用例子:
#include <iostream>//#define NDEBUG#include <assert.h>using namespace std;int main(void){cout << "请输入一个非零值:" << endl;int iValue;cin >> iValue;assert(iValue);//我们的要求是输入的值不为0,如果输入的值为0,我们不希望继续运行下去,避免产生未定义的结果cout << "iValue = " << iValue << endl;return 0;}当我们输入0时,正如我们所希望的那样,程序输出一条错误信息,并终止了程序的运行。
当我们不想使用assert进行断言时候,可以通过在包含#include <assert.h>的语句之前插入 #define NDEBUG 来禁用assert调用。
2.BOOST_STATIC_ASSERT
对于assert是运行时的断言,它只在运行时断言表达式的值。在编译期间出现的错误时不会提示的。如果我们需要在编译期间就需要确认某些表达式是否是我们所期望的那样,比方说结构体的字节对齐,这个是很常见的问题。
#include <iostream>#include <boost/static_assert.hpp>using namespace std;typedef struct{char m_cChar;int m_iValue;}MyTest;int main(void){BOOST_STATIC_ASSERT(sizeof(MyTest) == 5);return 0;}上面的代码,看上去没什么问题。但编译期就已经提示错误了。
原来是在VC中结构体是有默认的4字节对齐方式的。我们修改下。
之后就可以顺利的编译通过了。
阅读全文
0 0
- BOOST_STATIC_ASSERT和assert的区别
- [C++] BOOST_STATIC_ASSERT和assert的区别
- BOOST_STATIC_ASSERT与assert的区别
- BOOST_STATIC_ASSERT与assert的区别
- BOOST_STATIC_ASSERT与assert的区别
- ASSERT()和assert()的区别是什么?
- 问题: 什么是ASSERT()? ASSERT()和assert()的区别是什么?
- ASSERT和VERIFY的区别
- assert 和 if 的区别
- verify和assert的区别
- verify和assert的区别
- ASSERT和VERIFY的区别
- BOOST_STATIC_ASSERT
- 关于Assert和verify的区别
- ASSERT和VERITY的用法以及区别
- 浅谈 if和assert的区别
- ASSERT()和VERIFY()区别
- ASSERT()和assert() | const,static和volatile要注意的几个问题 |define宏与const区别
- 高效的APP在线制作平台,让梦想轻松孵化器
- 题解——Leetcode 12. Integer to Roman 难度:Medium
- 微信小程序 循环执行 设定固定时间间隔
- Linux 用到的命令总结 持续更新
- leetcode 题目总结(暂时按照此分类刷)
- BOOST_STATIC_ASSERT和assert的区别
- TF-IDF
- 用js处理图片加载错误时加载默认图片的方法
- SSH整合之使用spring-DWR实现动态综合查询数据
- 【PHP】高级面试题之十万个为什么?(一)
- JSON 应用
- Android仿桌面版QQ截图后编辑绘制椭圆工具
- 前端开发yeoman使用
- Django 忘记管理员或忘记管理员密码 重设密码登录教程