首页 > 代码库 > assert的实现和用法
assert的实现和用法
assert很多时候到会用到,下面了解下assert的实现和用法
在C标准库中,assert的实现是用宏来实现的,并不是用函数,它在#include<assert.h>这标准C头文件
1、实现:宏assert是如何实现的呢?可以查看assert.h的代码,我查看的是mingw中的代码
#undef assert#ifdef __cplusplusextern "C" {#endif#ifdef NDEBUG/* * If not debugging, assert does nothing. */#define assert(x) ((void)0)#else /* debugging enabled *//* * CRTDLL nicely supplies a function which does the actual output and * call to abort. */_CRTIMP void __cdecl __MINGW_NOTHROW _assert (const char*, const char*, int) __MINGW_ATTRIB_NORETURN;/* * Definition of the assert macro. */#define assert(e) ((e) ? (void)0 : _assert(#e, __FILE__, __LINE__))#endif /* NDEBUG */#ifdef __cplusplus}#endif
很明显的看到 #define assert(e) ((e) ? (void)0 : _assert(#e, __FILE__, __LINE__))
assert()它就是一个宏,如果表达式e为真,则为(void)0;表达式e为假,则调用_assert(#e, __FILE__, __LINE__)这函数
_assert(#e, __FILE__, __LINE__)具体实现类似以下的实现
void _assert(const char *mesg, const char *file, int line) { printf("%s, %s, %d\n", mesg, file, line); abort(); }
所以当表达式e为假的时候,函数abort()被用来终止程序运行.
2、用法
一般在在源文件中加上
#include <assert.h>或者
#undef NDEBUG
#include <assert.h>
取消的时候用
#define NDEBUG
#include <assert.h> -#define NDEBUG应在#include <assert.h>前头, 这样才是正确的.看源码就知道了
assert(表达式);
示范: int a = 1; assert(a);
assert的实现和用法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。