最近除錯c語言程式,出了一些錯誤,費了很大的力氣才找到這些bug。現在把這些錯誤記錄下來,同時做一些程式設計上的原則上的約束,希望能達到兩個目的:(1)看到類似的情況,能馬上定位知道是什麼錯誤。(2)不在犯這種錯誤。
將64位整型轉換為32位整型,貌似是沒什麼問題。但是在做多結點間資料通訊的時候,這個不注意的細節將導致很嚴重的錯誤。例如在傳送端使用的是64位的整型,接收端使用32位整型,這樣會導致接收端由於接收緩衝區中的資料沒有完全被反序列化阻塞。
還有使用無符號數的時候一定要注意,因為無符號數減去乙個比自身還要大的數,容易出現很嚴重的問題。原理大家都知道,內部是使用補碼存的,但是寫程式的時候不一定能注意到。
使用一些底層的庫函式時一定要確保傳入的資料型別與介面要求的資料型別一致。我就發生過因為使用zlib的compress函式時要求傳入unsigned char * 和 unsigned long int *時,我使用了char *和 unsigned int *時出現一些莫名其妙的錯誤。
在使用沒有接觸的技術或者是底層的庫函式的時候,一定要寫夠測試程式,充分的熟悉介面的使用,而不應該直接整合在軟體中,否則會出現很嚴重的問題。
使用系統呼叫或者庫函式或者第三方軟體的函式時,如果有返回值,一定要檢查返回值的情況,以判斷程式是否正確。可能就是這樣乙個小小的問題就會導致飛彈打偏或者衛星脫軌,或者是火車站售票系統上常顯示的」***x位置的記憶體不能為讀「之類的致命錯誤。如果函式可能會丟擲異常,一定要捕獲異常。在除錯階段,出現這樣問題時,一定要使用exit或者abort之類的方法,強制程式在此結束,並打出當前的行號、檔名稱,如果有必要的話還有堆疊資訊等這些重要的除錯資訊。這些對於確定程式出錯的位置非常有幫助。
養成讀文件的好習慣,出現問題的很多一部分原因都是沒有仔細閱讀文件。文件中詳細的說明了介面的使用和注意事項,沒有注意到這些細節,除錯簡直就是自作自受。
還有常做單元測試,確保縮寫的部分**能夠正常執行。然後再整合到軟體中,否則出現問題的付出的代價要大的多。
c c 注意事項
1,在使用變數前初始化他們。包括指標可初始化為null。2,返回棧裡的物件是危險的,尤其不能返回指標。char getbuff 是錯誤的。3,char型別的符號問題。4,不要依賴表示式的運算次序,一般編譯器都進行優化,先進行函式求值,再求複雜 表示式,再處理簡單資料。5,函式形參的求值是沒有次序的。...
C C 程式設計注意事項 一
所有變數定義位於函式開始處。盡量避免全域性變數,全域性變數需於實現檔案中定義,標頭檔案中 extern 宣告。浮點零值比較採用區間值。保證正確的前提下盡量使用移位運算。if 語句 switch 語句優先處理出現概率大的情況。指標與null 比較反寫如 null p 迴圈巢狀時最長的迴圈放內層短的放外...
C C 字元陣列 注意事項
c c 中,字元陣列的輸入有很多種,但是每種情況都是不一樣的,一定要把字元陣列的每種輸入輸出的情況弄清楚,這樣才能在不同的情況下使用不同的方法。1 字元陣列的初始化方法 一 如果要初始化的字串種還有空格,應該把空格也當作乙個字元輸入,注意,字元是使用單引號。char str 15 方法二 直接使用字...