版权 (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) ()