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
}