IJG JPEG 函數庫:代碼規則
著作權 (C) 1991-1996, Thomas G. Lane.
本文是Independent JPEG Group軟體中的一部分。
針對於如何分發與使用,請參照隨本庫一起發放的README 檔案。
由於很多程式員將會為完善代碼與bug修複中而共同努力,因此,統一編碼風格將是很重要的一件事。使用相似的編碼風格的目的不在於風格的細枝末節,而在統一的重要性。
一般,我們遵從推薦標準"Recommended C Style and Coding
Standards"(C代碼標準和編碼風格推薦標準)的6.1版(Cannon等人。由Spencer,
Keppel和Brader修訂)。該文檔可在IJG
FTP目錄中找到(參見jpeg/doc/cstyle.ms.tbl.Z,或者專為沒有nroff/tbl
r的使用者提供的cstyle.txt.Z)。
註解區塊應以下列方式布局:
/*
* Block comments in this style.
*/
我們使用K&R風格來對語句進行縮排,例如,
if (test) {
then-part;
} else {
else-part;
}
每一級縮排使用兩個空格。(這種縮排習俗由GNU
Emacs或其他文字編輯器自動完成。)
多個單片語成的名稱應該以小寫加底線方式,例如,multi_word_name
(不是multiWordName)。前置處理器符號和枚舉常量相似,但應使用大寫形式(MULTI_WORD_NAME)。在前15個字元之內,名稱應該保持唯一。(對一些老系統而言,全域變數名應在6位以內保持唯一。我們在不引起混亂的情況下,通過使用宏來代替較短的名稱的方法來解決這個問題。)
我們可在任何地方使用函數原形;我們依賴於自動代碼轉換來彌補缺少原型的C編譯器。轉換是通過簡單輕便的工具'ansi2knr.c'(蒙Ghostscript的好意)來完成的。ansi2knr並不是很智能化,因此要求在函式宣告時要注意格式問題:函數名MUST
BEGIN IN COLUMN 1。因此所有的函數都應該這樣寫:
LOCAL(int *)
function_name (int a, char *b)
{
code...
}
註:每個函數定義必須以GLOBAL(type), LOCAL(type),或
METHODDEF(type)開頭。這些宏適當地擴充了"static type"
或僅僅是"type"。它們為函數的用法提供了一種可讀性較好的標識且可為特殊的需求備用。(例如,特殊的連結詞可被插入以便Windows
DLLs使用。)
ansi2knr不能轉換方法聲明(結構體的中的函式宣告)。我們用JMETHOD來解決,JMETHOD的定義如下:
#ifdef HAVE_PROTOTYPES
#define JMETHOD(type,methodname,arglist) type (*methodname) arglist
#else
#define JMETHOD(type,methodname,arglist) type (*methodname) ()