高質量c c程式設計指南摘要 二 原創

2021-09-30 02:03:01 字數 2447 閱讀 9321

有益的建議:

1.

變數(指標和陣列)被建立之後,應及時把它們初始化,以防止把未初始化的變數當成右值來使用。

2.當心變數的初值,預設值錯誤,或精度不夠。

3.當心資料型別轉換錯誤,盡量使用顯式的資料型別轉換,避免讓編譯器悄悄的進行隱式的資料型別轉換。

4.當心變數發生下溢或上溢,陣列的下標越界。

5.當心檔案

i/o有錯誤。

6.當心落掉「錯誤處理程式」,或「錯誤處理程式」本身有錯誤。

7.盡量不要使用與具體硬體或軟體環境關係密切的變數。

引用:1.例如

int m;int &n = m; 則n

是m 的乙個引用。

2.引用規則:

①引用被建立的同時必須被初始化。(指標可以在任何時候被初始化)②

不能有null

引用,引用必須與合法的儲存單元關聯(指標則可以

是null)③

一旦引用被初始化,就不能改變引用的關係。(指標可以是隨時

改變所指的物件)

函式的引數:

引數的書寫要完整,不能只寫引數型別而省略引數名字。

②引數命名要易懂,順序要合理,一般目的引數在前,源引數在後。

③若引數是指標,且僅做輸入用,應在型別前加

const

,以防止該指標在函式體內被修改。④

若輸入引數以值傳遞的方式傳遞物件,則應用

」const &」

方式來傳遞,可省去臨時物件

的構造和析構過程,提高效率。

返回值:

不要省略返回值型別。若沒有返回值,應宣告為

void

型別。②

正常輸出由輸出引數獲得,錯誤標誌用

return

語句返回。

③return

語句不能返回指向「棧記憶體」的指標或引用,因為該內存在函式體結束時自動銷 毀。

斷言(

assert):

是僅在debug

版本起作用的巨集,用於檢查不應該發生的情況。在編寫函式時,要反覆考查,並自問「我打算做哪些假定」,一旦確定了的假定,就要使用斷言對假定進行檢查。

記憶體分配方式:

從靜態儲存區域分配。

內存在程式編譯的時候就已經分配好,這塊內存在程式的整個

執行期間都存在,如全域性變數,

static

變數。②

在棧上建立。

函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時自動釋放。

③從堆上分配。

亦稱動態分配記憶體,用

malloc/free

或new/delete

記憶體錯誤:

(1)記憶體分配未成功,卻使用了它。所以在使用記憶體前都要檢查指標是否為

null。(

2)記憶體分配成功,但未初始化。所以分配到的記憶體必須初始化,陣列賦為0值。

(3)記憶體分配成功且初始化,但操作越界。(4

)忘記釋放記憶體,導致「記憶體洩露」。所以

malloc/free

或者new/delete

配對使用。(5

)記憶體釋放卻仍使用它。原因可能為:

return

語句指向棧記憶體的指標被返回;釋放記憶體後,未將指標置為

null,

導致野指標。

指標與陣列:

(1)陣列要麼在靜態儲存區域建立,要麼在棧上建立,位址和容量不變,內容可變。指標則可指向任何記憶體塊。如:

chara = 「hello」;

a[0] = 『x』;//

正確char*p = 「world」;

p[0] = 』x』;//

錯誤,因為「

world

」為常量字串

char a = 「hello world」;

char *p = a;

則sizeof(a) = 12;//11+』/0』 = 12

sizeof(p) = 4;//sizeof(char *) = 4;

(2)若陣列作為函式的引數進行傳遞時,該陣列自動退化為同型別的指標。

void func(char a[100])

指標作為函式的引數,不能指望用該指標去申請動態記憶體。如:

voidtest(void)

void getmemory( char *p, int num )

則str = null;

可採用指向指標的指標。

void test(void)

void getmemory(char **p, int num)

或者void test(void)

char *getmemory(int num)

《高質量c c程式設計指南》學習摘要

1.盡可能在定義變數的同時初始化該變數 就近原則 防止忘記初始化,引用未被初始化的變數,可能導致程式錯誤 2.行最大長度宜控制在70 80個字元以內 長行拆分 否則眼睛看不過來,也不便於列印。例如 virtual cmatrix cmultiplymatrix cmatrix leftmatrix,...

高質量c 程式設計指南摘要(一)(原創)

良好的程式設計習慣 一 類 封裝 讓模組僅僅分開必須讓外界知道的內容,而隱藏其他一切內容。繼承 1.若a類和b類毫不相關,不可讓b的功能多些而讓b去繼承a的功能和屬性。2.若邏輯上b是a的一種,且a的所有功能和屬性對b都有意義,則允許b 繼承a的功能和屬性。組合 若邏輯上a是b的一部分,則不允許b從...

高質量C C程式設計指南

1.如果引數是指標,且僅作輸入用,則應在型別前加const,以防止該指標在函式體內被意外修改 2.在函式體的 入口處 對引數的有效性進行檢查 在函式體的 出口處 對return語句的正確性和效率進行檢查 3.引用的一些規則如下 1 引用被建立的同時必須被初始化 指標則可以在任何時候被初始化 2 不能...