stupid mistake/bugs

近來寫程式前總在腦中先模擬完整個程式的架構、演算法以及可能的最佳化方式。
為了最佳化執行效率,macro/inline function/function pointer/... 最近也用得兇!
好處是使用得當的話,程式效率會提高不少;缺點則是在 debug 時難找出問題~

說到 debug,最近鮮少遇到程式邏輯構思錯誤的情況,大多數時間反而花在一些很愚蠢小地方的 bug。
以下列出兩條出錯的程式片段,提點自己別再犯!

if (a = NULL) {
    ...;
}
== 打成了 = ,條件判斷變成 assignment。
這已經是近來第二三次犯這種錯了,謹記!

uint32 x = 0, y = 10;
for(y; y >= x; y--) {
    ...;
}
unsigned integer 減到小於零,segmentation fault!


兩個錯誤都是耍蠢的基本錯誤,剛好犯錯的地方都是在邊界條件判斷,
要重建出錯環境不容易,為此還寫了一大段程式來測試,也算有收穫。
果然程式、專案的成熟度,取決其測試環境的成熟度!

這樣的錯平時也許不會犯,專案越趕反而越容易出搥在不該犯錯的地方,
寫篇網誌記錄一下,下次不能再犯!