程式設計好習慣 避免使用魔數

2021-09-05 03:13:32 字數 1234 閱讀 3310

魔數(magic number),即在編寫程式時直接在程式中運用數字,而不是採用定義巨集或是const變數的方式,圖1是使用了魔數的乙個示例程式。其中的64是指msk的最大位元組數。從這一程式中可以看出,msk的最小位元組數是min_msk_len,即20。採用魔數的危害有:

1) 降低了程式的可讀性。有人可能會提出,那加一些注釋不就完了嗎?如果真是採用加注釋的方式,那為什麼不將其定義成乙個巨集或是const常量呢?要知道檢視注釋的效率肯定沒有直接看**來得快和方便,也不存在不同步的問題(**與注釋有可能不同步)。

2) 如果下一次這個最大值要從64改為128,那得在adjustmask()中對每一處都進行更改。另外,當乙個專案較大時,魔數的存在會使得程式維護非常、非常困難。

由此看來,這裡的「魔」不應理解成象「魔法(magic)」那樣神奇,而應理解為象「魔鬼(monster)」那樣可怕。

example.c

00290: #define min_msk_len 20

00291:

00292: int adjustmsk (mskcontext* context)

00293: ;

00295:

00296:     if (context->lenmsk >

64)

00301:     else if (context->lenmsk < min_msk_len)

00304:     ...

00305: } 圖1

圖2是採用巨集之後的版本。其中定義了max_msk_len的大小為64,如果其它函式中也需要用到msk的最大值,那麼也可以引用這一巨集。如果下一次想將最大值從64改為128時,只要改max_msk_len巨集的定義就行了。另外,這種巨集定義的存在有利於模組與模組之間共享,從而在一定程度上提高重用性。

example.c

00289: #define min_msk_len 20

00290:

#define max_msk_len 64

00291:

00292: int adjustmsk (mskcontext* context)

00293: ;

00295:

00296:     if (context->lenmsk >

max_msk_len

) 00302:     else if (context->lenmsk < min_msk_len)

00305:     ...

00306: } 圖2

程式設計好習慣

我們在編碼的時候總是希望能寫出風格良好,清晰 健壯的程式,把 當成一件藝術品來看待 來雕琢,讓 coding成為一種藝術。看了很多大牛關於程式設計風格與修養方面的文章,很受啟發,結合自己體會,簡錄幾條,提醒自己時刻注意。1.引數檢查 對於有引數的函式,首先要對引數的合法性進行檢查。可以利用asser...

程式設計好習慣

1.dry 不要重複你自己 don t repeat yourself dry是一條最容易理解但又是相對比較難以應用的原則。它是指當你在兩處或者更多的地方發現相似 時,我們應當把它們抽象成乙個新的函式,在之前重複的地方呼叫新的函式並帶上適當的引數。dry也許是最普遍的一條程式設計原則,我從未發現乙個...

C 程式設計好習慣

1.不要在建構函式中做初始化操作 要求類 尤其是對外介面類 提供init 函式,在該函式中進行相關初始化操作,初始化失敗能夠返回錯誤碼。可以規避問題 建構函式中難以返回錯誤碼,外部呼叫者無從判斷初始化結果。當該類作為全域性變數使用時,構造函式呼叫發生在main 函式執行之前,出現問題難以追蹤。2.所...