1. 程式人生 > >EXT_ASSERT將ASSERT與if結合在一起

EXT_ASSERT將ASSERT與if結合在一起

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

}