[問題] 請問assert之後要不要return?
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VS2008, C++
問題(Question):
想請教這兩種寫法:
1.
void func(some* ptr)
{
assert(ptr);
ptr->do();
}
2.
void func(some* ptr)
{
if (ptr == NULL)
{
assert(0);
return;
}
ptr->do();
}
哪種較好?
個人比較喜歡1, 因為簡單明確也沒有無用的code.
在debug build的時候遇到ptr為NULL可以找出問題.
可是, 在release build的時候, assert直接變成noop,
雖然理論上release build的時候程式應該已經通過檢驗, 不應該發生ptr == NULL,
假使真的還是發生了, 那就當了.
所以若採用第2種做法就是debug, release通吃,
但code量會增加很多, 而且萬一ptr真的永遠不為NULL, 那這些code都白做工了.
聽起來滿矛盾的,
所以想請教比較好的做法是否要加強程式測試的完整性,
以及盡量多使用reference就可以免除NULL pointer check?
在測試完整的狀況下是否可以採用1的做法?
或者不論測試完整與否都應該採用某種作法較佳?
諸多疑惑望請板友開示
謝謝Orz
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.133.45.115
推
11/18 13:07, , 1F
11/18 13:07, 1F
→
11/18 13:08, , 2F
11/18 13:08, 2F
→
11/18 13:09, , 3F
11/18 13:09, 3F
→
11/18 13:09, , 4F
11/18 13:09, 4F
→
11/18 13:56, , 5F
11/18 13:56, 5F
→
11/18 13:56, , 6F
11/18 13:56, 6F
→
11/18 14:09, , 7F
11/18 14:09, 7F
推
11/18 14:35, , 8F
11/18 14:35, 8F
→
11/18 14:36, , 9F
11/18 14:36, 9F
→
11/18 21:53, , 10F
11/18 21:53, 10F