C++断言assert
assert一般用于检查输入参数的合法性,方便程序员调试时定位代码
但是频繁的调用会影响程序性能,增加额外的开销。可以定义NDEBUG
宏来关闭assert
。
assert
一般用于程序员调试BUG时,在DEBUG
环境下的帮手- 在Release模式下,
NDEBUG
是默认定义的,因此在Relase下,assert不起作用 - 在RelWithDebInfo下也会定义
NDEBUG
,如果想要打开assert
,可这么做
注意事项¶
在使用assert
应注意以下几点。
一、assert只能包含只读操作,不能影响上下文
二、一次assert只检验一个条件,为了在调试时,一目了然是哪个条件不成立
//不建议
assert(nOffset>=0 && nOffset+nSize<=m_nInfomationSize);
//推荐写法
assert(nOffset >= 0);
assert(nOffset+nSize <= m_nInfomationSize);
三、assert不能代替条件判断,因为在某些条件下,assert并不启用