断言(assert)的作用是用来判断程序运行的正确性,确保程序运行的行为与我们理解的一致。其调用形式为assert(logic expression),如果逻辑表达式为假,则调用abort()终止程序的运行。
查看MSDN帮助文档,可以得到assert的解释信息如下:
查看include/assert.h头文件可以得到assert相关的宏写义如下:
#define assert(exp) ((void)0)
#else
#ifdef __cplusplus
extern "C" {
#endif
_CRTIMP void __cdecl _assert(void *, void *, unsigned);
#ifdef __cplusplus
}
#endif
#define assert(exp) (void)( (exp) || (_assert(#exp, __FILE__, __LINE__), 0) )
#endif /* NDEBUG */
</div>
解释:
好了,到最后,终于看到了assert的宏定义了
值得注意的是,里面有一个逗号表达式,有兴趣的可以研究一下,逗号表达式如下
Assert断言在程序的作用
Assert的例子:
解释:因为tmp=0,tmp==1为false,故程序运行的时候传给assert宏的参数为false,因此调用的结果是先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。如果改成tmp=1,则程序完全正常运行。 如里在程序中想关闭assert宏断言,可以如下defnie NDEBUG
你会发现即出tmp=0,也不会再出现断言信息,解释请看顶部
作用:
1:断言可以用来检查传给函数参数的合法性
3: 断言前后最好空一格[编程风格的问题,按你自已的喜好,适合自已就最好]
4:断言只是用来检查程序的逻辑正确性,不能代替条件替换
5:断言比printf语句这种形式的打印好使~~~~
6:断言参数可以是函数调用,但是函数返回值要是真假,如assert(sort()),解释看上面源码分析
</div>