C語言程式設計十大建議——語法語義篇:使用指令碼檢查部分語義錯誤

誰不小心的發表於2013-10-12

1.親核字串、陣列操作之越界與否。不然,很可能出現程式可以編譯通過,但是最終卻給出了錯誤的結果。另外指標和陣列的越界訪問,很容易出發segment fault

2.不要重寫標準庫函式,把函式名改成你自己才懂得的晦澀的名字,遵循一種統一的程式設計規範

3.在書寫switch case和定義相同結構的變數的時候,如果為了少手動來寫一部分程式碼,直接採用複製貼上的形式,那麼很有可能你的某個便另定義是錯誤的(直接copy了錢一個變數的值,而沒有做對應的修改)。

4.scanf後面沒有加&,switch中漏掉break,=和==的誤用

5.使用一些危險的,有可能產生越界的庫函式,例如gets等。

6.多加或者少用了分號,while後if後面,會導致邏輯錯誤。

7.函式的宣告最好和定義分離,函式要先宣告,後使用

8.迴圈邊界的確定,邊界的+1還是-1,從迴圈中出來以後值是多少,往往是一些關鍵節點。


當程式的邏輯和你預想的邏輯不符的時候,想想什麼地方可能出現問題:其中,4、5、6三點是最容易出現問題的地方;如何避免這類問題浪費掉大量除錯時間呢?寫一個指令碼,每次都檢查這幾個地方!


給一個sed指令碼,可以檢測for、while、if後面多加的分號問題:

  1 #n
  2 /^[\ \t]*if/{
  3     /);/p
  4 }
  5 
  6 /^[\ \t]*while/{
  7     /);/p
  8 }
  9 
 10 
 11  /^[\ \t]*for/{
 12     /);/p
 13 }

更多的語法正確而語義錯誤的例子,可以參考:http://blog.csdn.net/ipmux/article/details/17350933


相關文章