+++++++++++++++++++之前小巧版本++++++++++++++++++++++++
#define fun_chk( fun,id) \
do{\
if( (fun) == TRUE)\
{ printf("Function i=%d OK\r\n",id);\
id++;}\
else {printf("Function i=%d Failed \r\n",id);\
id=0;}\
}while(0)\
++++++++++++++++++现在复杂版本+++++++++++++++++++
void (*g_check_hook)(const char* expr, const char* func, size_t line);
#define G_CHECK_ENABLE
#ifdef G_CHECK_ENABLE
#define G_CHECK(EXPR) \
do{\
if (!(EXPR)) \
{ \
if (g_check_hook == NULL) { \
printf("(%s) has assert failed at %s:%ld.", #EXPR, __FUNCTION__, __LINE__); \
} else { \
g_check_hook(#EXPR, __FUNCTION__, __LINE__); \
} \
} \
else printf("(%s) has successed\r\n", #EXPR); \
}while(0); 【注意这里:最后一行 不能再有 \ 了 否则会认为后面还是连续的 会错误:expected a macro parameter name 】
#else
#define G_CHECK(EXPR) ((void)0);
#endif
成功则:(rst) has successed
失败则:(rst) has assert failed at lfDTM_module_init:296.TX:AT
notepad观看 细节都在上文中!
复杂版本使用说明:
1#define G_CHECK_ENABLE加入这句话 启动功能
2EXPR为0就是异常,失败等 为1就是正常,成功等
3异常的时候如果有狗子函数就执行之 否则就打印然后死机