ASSERT在DEBUG程序时候帮了太多太多忙,不过在ASSERT判断传入参数后,还需要if再按相同条件判断一遍,不符合规则return,这样才是正确的逻辑。但这样代码难看,且工作重复无趣,又容易出现差漏。
刚弄了个简单EXT_ASSERT宏,按我的理解应该可以解决问题,但不确定是否有漏洞,发出来大家一起瞄瞄。
#define RET_VOID
#define EX_ASSERT(exp, ret) {ASSERT(exp);if(!(exp))return(ret);}
BOOL CXXX::FunXXX(const data* p_data)
{
EXT_ASSERT(p_data, FALSE);//---- 返回BOOL型
}
int CXXX::FunXXX(const data* p_data)
{
EXT_ASSERT(p_data, -1);//---- 返回int型
}
const retdata* CXXX::FunXXX(const data* p_data)
{
EXT_ASSERT(p_data, NULL);//---- 返回NULL指针
}
retdata CXXX::FunXXX(const data* p_data)
{
EXT_ASSERT(p_data, retdata());//---- 返回空对象
}
void CXXX::FunXXX(const data* p_data)
{
EXT_ASSERT(p_data, RET_VOID);//---- 仅仅return
}