一、assert()简介
断言,是宏,而非函数。assert 宏的原型定义在 < assert.h >(C)和< cassert >(C++)中,其作用是如果它的条件返回错误,则终止程序执行。断言提示:“Assertion failed:(条件)”。
1、源码< cassert >中
//#include <cassert>打开文档
#include <yvals.h>
#include <assert.h>
2、源码< assert.h >中
#if defined _VCRT_BUILD && !defined _ASSERT_OK
#error assert.h not for CRT internal use
#endif
#include <corecrt.h>
_CRT_BEGIN_C_HEADER
#undef assert
#ifdef NDEBUG
#define assert(expression) ((void)0)
#else
_ACRTIMP void __cdecl _wassert(
_In_z_ wchar_t const* _Message,
_In_z_ wchar_t const* _File,
_In_ unsigned _Line
);
#define assert(expression) (void)( \
(!!(expression)) || \
(_wassert(_CRT_WIDE(#expression), _CRT_WIDE(__FILE__), (unsigned)(__LINE__)), 0) \
)
#endif
_CRT_END_C_HEADER
二、关闭 assert
可以通过定义 NDEBUG 来关闭 assert,但是需要在源代码的开头,include <assert.h> 之前。
#define NDEBUG // 加上这行,则 assert 不可用
#include <assert.h>
assert( p != NULL ); // assert 不可用
三、用法及其注意事项
1、使用断言捕捉不应该发生的非法情况。不要混淆非法情况与错误情况之间的区别,后者是必然存在的并且是一定要作出处理的。
2、这个宏通常原来判断程序中是否出现了明显非法的数据,如果出现了终止程序以免导致严重后果,同时也便于查找错误。
3、ASSERT只有在Debug版本中才有效,如果编译为Release版本则被忽略。
4、常用于空指针检查。
如有错误或不足欢迎评论指出!创作不易,转载请注明出处。如有帮助,记得点赞关注哦(⊙o⊙)
更多内容请关注个人博客:https://blog.csdn.net/qq_43148810