C C 程式設計注意事項 一

2021-05-23 19:18:24 字數 1862 閱讀 3719

所有變數定義位於函式開始處。

盡量避免全域性變數,全域性變數需於實現檔案中定義,標頭檔案中

extern

宣告。浮點零值比較採用區間值。

保證正確的前提下盡量使用移位運算。

if 語句、

switch

語句優先處理出現概率大的情況。

指標與null

比較反寫如:

null==p

。迴圈巢狀時最長的迴圈放內層短的放外層。

盡量不在迴圈體內修改迴圈變數。

凡是無返回值、無引數、任意型別指標引數的函式均使用

void

或void

指標。適當使用

const

,使用目的限於節省空間、提高效率、不允許修改或可能產生的函式引數修改。

對於可變、多變的暫存器變數、多執行緒共享變數,在經過**優化處理的

releas

版本下需使用

volatile

型別修飾符修飾變數。

多引數函式應使用結構體減少引數個數。

負數右移操作時會帶上符號位,高位補零或補一取決編譯器。左移或右移時移動位數不能大於資料的儲存位數。

release

版下assert()

語句無效,故非除錯狀態下還是可能出現資料溢位而不報錯。

使用巨集定義

#define

定義檔案路徑時候使用帶雙引號、雙反斜槓的字串。巨集定義函式時候盡可能的使用括號。巨集定義中的換行接續後和行起始處保證無任何字元。

一種變數名稱代表一段有限空間,其內容稱為值,c/c++中稱之為從左值到右值的轉換。另一種變數是一段有限空間的引用,同時規定空間的長度(陣列)。

建立動態二維陣列(指向指標的指標)一維使用new char*[一維度] 或者 (char**)malloc(一維度).二維迴圈於一維下動態建立new char[二維度] 或者(char*)malloc(二維度)。釋放動態二維陣列剛好相反,先迴圈釋放二維,再釋放一維。

使用vector作為全域性變數時候存在問題。release版下push_back()會出現錯誤,估計是vector本身具有動態擴充套件性而做為全域性變數其空間大小是固定的。如果允許其變數使用push_back新增資料則可能導致堆資料破壞。解決辦法是將變數定義於類中並完成push_back再賦值於全域性變數。

利用字元創的結束標識'/0' (其ascii 碼是 0,0x00)而非空格(其ascii 碼是 32,0x20)可判斷字串結束以否,並可以移動指標的方式計算字串的大小。

dll庫,不但可以匯出函式介面,也可以匯出類。如:calss _declspec(dllexport) calssname{}; class _declspec(dllimport) classname{};#pragma comment(lib,"path")。

合理使用整數的/ 和 % 可取得整數(浮點數整數部分)的各個位數(%10 /10),合理使用h,p,q,t做迴圈下的指標移動可以構建鍊錶和逆序鍊錶。合理利用陣列下標可實現折半迴圈逆序陣列(字串)

int a= 4; (++a) += (a++)  a= ?

字元陣列的大小不要忘了最後的'/0'(字元指標不能使用sizeof(point)計算)。

free後的記憶體空間只是被標記為了可重新分配,但作為該程序的記憶體塊他依然具有讀寫許可權,為了避免記憶體混亂需要null指標避免野指標的存在。

使用雜湊查詢加速檢索,雜湊過程就是建立直接索引的過程,經過雜湊處理的資料在查詢時候可以通過函式計算後直接定位(雜湊表的索引值相當於陣列索引直接定位)到該資料。雜湊不能做到百分百的唯一,所以需要處理雜湊衝突,通常使用鍊錶加關鍵值匹配。

減少程式與外存的互動次數可提速程式執行,考慮使用鍊錶一次載入多次使用、記憶體塊分配或者檔案對映等方法。

對大資料大檔案的處理,考慮使用多執行緒均分工作任務的辦法從而可降低對處理器的佔用率。

c c 注意事項

1,在使用變數前初始化他們。包括指標可初始化為null。2,返回棧裡的物件是危險的,尤其不能返回指標。char getbuff 是錯誤的。3,char型別的符號問題。4,不要依賴表示式的運算次序,一般編譯器都進行優化,先進行函式求值,再求複雜 表示式,再處理簡單資料。5,函式形參的求值是沒有次序的。...

C C 的注意事項

最近除錯c語言程式,出了一些錯誤,費了很大的力氣才找到這些bug。現在把這些錯誤記錄下來,同時做一些程式設計上的原則上的約束,希望能達到兩個目的 1 看到類似的情況,能馬上定位知道是什麼錯誤。2 不在犯這種錯誤。將64位整型轉換為32位整型,貌似是沒什麼問題。但是在做多結點間資料通訊的時候,這個不注...

程式設計注意事項

1.動態輸出表頭或資料 每次輸出之前,請先清空表頭以及資料再新增。2.一般資料都要分頁,請直接加上分頁 3.重複性資料的校驗 介面接收資料 1.介面接收資料,一般型別接受 例如 string 列印日誌,之後再轉換成自己想要的格式json等。需求評審 問題一 大面問題 1.是什麼?2.怎樣玩?業務流程...