防禦編程是在多人開發的系統中保持局部正確性的一種編程方法,
有其積極的一方面,通過防禦編程檢查所使用參數是否正確阻止崩潰和意外的產生。
防禦編程對輸入參數的一個檢查,這種檢查由基本的是否存在,範圍是否正確,邏輯是否符合等等。
例如函數防禦編程有如下的形式卻變成了防禦陷阱
void fun(void* p)
{
if(!p)return;
}
函數判斷p是否可用,如果不可用就直接返回不執行。
看似通過防禦編程解決裏p指針不正常導致的崩潰,卻把錯誤隱藏起來。
這種如果不正確就不執行的方式是一種消極防禦,或者叫防禦陷阱。
在多人合作的環境中其他人可能根本不知道你的函數沒有執行。
只有最後出現邏輯數據不正常的情況下才猛然發現是因爲某個函數沒有正常執行導致的。
正常的方式是對所防禦的情況做出評估給出對應的反應。
例如比較極端的提醒方式直接退出系統。
void fun(void* p)
{
if(!p)_exit();
}
當然還有更友好的方式,彈出對話框警告,
但前提是要提供對應的支持,如果是系統函數要寫嚴重警告的錯誤日誌等等。
防禦編程不能爲了防禦再去防禦,要在第一時間作出對應防禦的同時
一定要對所防禦的本身提出迴應
而不是消極的等待出現嚴重問題再倒查防禦錯誤。