前面写过文章,很简单,看git代码,也是这个技巧。
文件:#define __ELOG_H__
56行
#ifdef ELOG_ASSERT_ENABLE
#define ELOG_ASSERT(EXPR) \
if (!(EXPR)) \
{ \
if (elog_assert_hook == NULL) { \
elog_a("elog", "(%s) has assert failed at %s:%ld.", #EXPR, __FUNCTION__, __LINE__); \
while (1); \
} else { \
elog_assert_hook(#EXPR, __FUNCTION__, __LINE__); \
} \
}
#else
#define ELOG_ASSERT(EXPR) ((void)0);
#endif
如果定义了ELOG_ASSERT_ENABLE就执行
如果没有定义ELOG_ASSERT_ENABLE就啥也不做
执行什么?
#define ELOG_ASSERT(EXPR)
if (!(EXPR))
{
if (elog_assert_hook == NULL)
{
elog_a("elog", "(%s) failed at %s:%ld.", #EXPR, __FUNCTION__,__LINE__);
while (1);
}
else
{
elog_assert_hook(#EXPR, __FUNCTION__, __LINE__);
}
}
检测EXPR
如果EXPR==0执行
如果EXPR!=0就啥也不做
执行什么?
if (elog_assert_hook == NULL)
{
elog_a("elog", "(%s) failed at %s:%ld.", #EXPR, __FUNCTION__,__LINE__);
while (1);
}
else
{
elog_assert_hook(#EXPR, __FUNCTION__, __LINE__);
}
如果狗子函数是空空如也的话 就打印一下 然后死循环等死
如果写了狗子函数 就跑狗子函数。(ST的就是没有狗子函数)
APP应用举例:
int8_t elog_find_lvl(const char *log) {
ELOG_ASSERT(log);
####}
关于狗子函数 看下文