1 / 22
实用的C语言编程标准
2 / 22
目 录
简介 3
1 代码编写总体原则 /.h文件禁止包含用不到的头文件。很多系统中头文件包含关系复杂,开发人员为了省事起见,可能不会去一一钻研,直接包含一切想到的头文件,,其中包含了所有头文件,然后发布给各个项目组使用,这种只图一时省事的做法,导致整个系统的编译时间进一步恶化,并对后来人的维护造成了巨大的麻烦。
函数编写规则
函数设计的精髓:编写整洁函数,同时把代码有效组织起来。
整洁函数要求:代码简单直接、不隐藏设计者的意图、用干净利落的抽象和直截了当的控制语句将函数有机组织起来。
一个函数仅完成一件功能。
说明:一个函数实现多个功能给开发、使用、维护都带来很大的困难。将没有关联或者关联很弱的语句放到同一函数中,会导致函数职责不明确,代码混乱,难以理解,难以测试和改动。
延伸阅读材料:《敏捷软件开发:原则、模式与实践》 第八章,单一职责原则(SRP)。
重复代码应该尽可能提炼成函数。
7 / 22
说明:重复代码提炼成函数可以带来维护成本的降低。
项目组应当使用代码重复度检查工具,在持续集成环境中持续检查代码重复度指标变化趋势,并对新增重复代码及时重构。当一段代码重复两次时,即应考虑消除重复,当代码重复超过三次时,应当立刻着手消除重复。
原则 防止函数过长,新增函数不超过50行〔非空非注释行〕。
说明:本规则仅对新增函数做要求,对已有函数修改时,建议不增加代码行。 过长的函数往往意味着函数功能不单一,过于复杂
函数的有效代码行数,即非空非注释行应当在[1,50]区间。
防止函数的代码块嵌套过深,新增函数的代码块嵌套不超过4层。
说明:本规则仅对新增函数做要求,对已有的代码建议不增加嵌套层次。函数的代码块嵌套深度指的是函数中的代码控制块〔例如:if、for、while、switch等〕之间互相包含的深度。每级嵌套都会增加阅读代码时的脑力消耗,因为需要在脑子里维护一个“栈”〔比方,进入条件语句、进入循环„„〕。应该做进一步的功能分解,从而防止使代码的阅读者一次记住太多的上下文。
废弃代码〔没有被调用的函数和变量)要及时清除。
说明:程序中的废弃代码不仅占用额外的空间,而且还常常影响程序的功能与性能,很可能给程序的测试、维护等造成不必要的麻烦。
函数不变参数使用const。
说明:不变的值更易于理解/跟踪和分析,把const作为默认选项,在编译时会对其进行检查,使代码更牢固/更安全。
函数的参数个数不超过5个。
说明:函数的参数过多,会使得该函数易于受外部〔其他部分的代码〕变化的影响,从而影响维护工作。函数的参数过多同时也会增大测试的工作量。 函数的参数个数不要超过5个,如果超过了建议拆分为不同函数。
在源文件范围内声明和定义的所有函数,除非外部可见,否则应该增加static关键字。
说明:如果一个函数只是在同一文件中的其他地方调用,那么就用static声明。使用static确保只是在声明它的文件中是可见的,并且防止了和其他文件或库中的相同标识符发生混淆的可能性。
9 / 22
3 标示符的命名规则
目前比较使用的如下几种命名风格:
unix like风格:单词用小写字母,每个单词直接用下划线„_‟分割,例如text_mutex,kernel_text_address。
Windows风格:大小写字母混用,单词连在一起,每个单词首字母大写。不过Windows风格如果遇到大写专有用语时会有些别扭,例如命名一个读取RFC文本的函数,命令为ReadRFCText,看起来就没有unix like的read_rfc_text清晰了。
匈牙利命名法:是电脑程序设计中的一种命名规则,用这种方法命名的变量显示了其数据类型。匈牙利命名主要包括三个部分:基本类型、一个或更多的前缀、一个限定词。实际上,各种风格都有其优势也有其劣势,而且往往和个人的审美观有关。我们对标识符定义主要是为了让团队的代码看起来尽可能统一,有利于代码的后续阅读和修改。
标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写,防止使人产生误解。
说明:尽可能给出描述性名称,不要节约空间,让别人很快理解你的代码更重要。
例如:好的命名:即使不注释也能理解。
不好的命名:使用模糊的缩写或随意
实用的C语言编程规范 来自淘豆网m.daumloan.com转载请标明出处.