c语言中程序偏离,C语言程序员在编码时容易出错的几个点
本期講講工作以來,自己碰到或者他人碰到的幾個C語言編碼易錯點。限于篇幅,這邊只舉了幾個例子作為拋磚引玉,歡迎大家留言說說自己遇到的其他易錯點。接下來提到的幾個易錯點的特點為看似非?;A,但是犯錯的不在少數。
sizeof
sizeof是C/C++中的一個操作符,其作用為返回一個對象或者類型所占的內存字節數。敲黑板:記住了,sizeof的基本單位是字節。易錯點之一為:使用sizeof去計算非char類型的數組元素個數,這是不對的。如果要統計一個數組的元素個數,可以通過如下方式:
sizeof(ArrayName) / sizeof(ArrayName[0]) 或者
sizeof(ArrayName) / sizeof(ArrayType)
"=="與"="
在條件表達式中,我們經常用"=="進行變量與數值進行比較作為某段代碼執行的入口條件。但是如果編寫代碼時候不注意,漏寫了一個"=",程序運行就與原先設想千差萬別,而且編譯器不會有任何告警,如果工程比較大,排查起來會非常困難。還是上面的例子:
所以,很多編碼規范中,會明確設定一個規則:對于此類if表達式,規定數值寫在==左側,被比較的變量或者表達式放在==右側。這樣,即便一時手快漏寫了一個=,編譯的時候會產生error,迫使編碼者修正。
switch...case語句
關于switch...case語句有兩個易錯點。一個是在case塊結束后漏寫了break,導致程序運行偏離預期;另外一個是,在的確需要fall
through的時候,沒有進行必要的注釋,導致不明真相的吃瓜程序員以為是第一種情況,隨手補上了break。所以在每次進行switch語句編碼的時候,記得完成后再檢查一次代碼,防止漏寫break;另外在需要fall
through的時候,一定要有fall through關鍵字以及注明清楚這樣寫的緣由。
其他
字符型常量使用單引號括起來,字符串常量使用雙引號括起來。
使用錯誤的邏輯表達式,如企圖用if(a < b < c)表達if((a < b) && (b <
c))。
對于復合表達式,沒有使用()明確優先級,導致由于混淆了操作優先級而程序非預期運行,例如if(x = z == y) 理解為if((x = z) ==
y)。
總結
以上是生活随笔為你收集整理的c语言中程序偏离,C语言程序员在编码时容易出错的几个点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言课后题2.52.8答案,C语言练习
- 下一篇: c语言设计期末考试试题及答案,C语言程序