- 要使用斷言對函式引數進行確認
- 為了不必要的開銷,可以僅使用斷言,而不要return
網上有人寫的strcpy**,做了太多的出錯處理,導致效能低下,其實沒必要,用assert就行了,這樣在debug模式下能捕捉錯誤,release下又不影響效能。
- 書上提供的memcpy的範例
void memcpy(void* pvto, void* pvfrom, size_t size)
- 不使用assert的危害
這個小組的**與word**之間乙個明顯的區別是word**從過去到現在一直都使用斷言和除錯**,而他們的**卻幾乎沒有使用斷言。因此,其程式設計師沒有什麼好的辦法可以確定其**中的實際錯誤情況,錯誤只能慢慢地暴露出來。如果他們在**中使用了斷言,這些錯誤本該在幾個月之前就被檢查出來。
同樣,xeyez由於沒有使用debug版,導致了很多的記憶體錯誤在客戶的電腦上暴漏了出來。
- 乙個錯誤的使用assert的例子
char* strdup(char* str)
第乙個斷言的用法是正確的,因為它被用來檢查在該程式正常工作時絕不應該發生的非法情況。第二個斷言的用法相當不同,它所測試的是錯誤情況,是在其最終產品中肯定會出現並且必須對其進行處理的錯誤情況。
雖然這一程式更精確地反應了相應的演算法,但有經驗的程式設計師很少會這樣編碼。否則好機會就來了,我們可以把他們塞進一輛既沒有安全帶又沒有車門的雙人cessna車中。上面的程式使人感到太危險了。
在該函式的交付版本中,相應的防錯措施可以保證當出了毛病時,使用者可以不受損失;而在該函式的除錯版本中,錯誤仍然可以被報告出來。
C 程式設計的一些原則
1.不能在容器中使用auto ptr,要用boost的share ptr。具體原因可以查auto ptr的特性。2.別用vector。3.如果將派生類直接賦值給基類,派生類獨有的資訊將丟失。因此這種情況,最好用指標,將派生類的指標賦值給基類的指標變數。4.生成std map的時候,鍵值可以是任何類,...
c 程式設計的一些技巧
第一點,使用全域性物件的建構函式在程式啟動前呼叫函式 有一些應用程式需要在主程式啟動前呼叫其它函式。如 轉態過程函式 登記 功能函式都是必須在實際程式執行前被呼叫的。最簡單的辦法是通過乙個全域性物件 的建構函式來呼叫這些函式。因為全域性物件都是在主程式開始前被構造,這些函式 都將會在main 之前返...
C 程式設計的一些思想
看完c primer後,了解了c 的語法,但我想往思想,設計方面深究,所以我選擇了看c 程式設計思想。以下是第一章中我記下的筆記。oop 物件導向的程式設計 重用乙個類最簡單的方法就是直接使用這個類的物件,並且還可以講這個類的物件放到乙個新類的裡面。可以用任何數量和型別的其他物件組成新類,通過組合得...