C语言编程规范

一、总体原则

【描述】在保证功能正确的基础上,可读可维护、安全、可靠、可测试、高效、可移植。

二、代码风格

【描述】代码风格指编写代码遵循的规则和约定,旨在提高代码的可读性、一致性、可维护性。

2.1、命名风格

【描述】一个标识符的好坏很大程度上取决于标识符名称。标识符命名应用合适长度完整、准确地描述其所代表的事务。

【规范】业界共四种命名法则:驼峰命名、匈牙利命名、帕斯卡命名、下划线命名,前三种较流行。

【注意】产品决定标识符命名风格。

  • 推荐驼峰
  • 亲和Linux/Unix的代码,可用内核风格
  • 开源和外部代码,维持原风格

2.1.1、命名习惯

【规范】好的命名习惯包括但不限于:

  • 使用正确的英文单词,并符合英文语法。不使用拼音。
  • 使用单词缩写命名时,仅使用常见或领域通用。
  • 对布尔型变量、函数名,避免用否定形式。

2.1.2、命名长度

【规范】不冲突、不过长过短,作用域越大,描述越精确。

2.2、排版风格

【规范】排版风格包括但不限于:

2.2.1、大括号

  • K&R风格:函数大括号的左括号独占一行,其他类型大括号的左括号跟随语句放行末。右括号独占一行,除非后面跟着同一语句的剩余部分。
  • Allman风格:左右大括号均独占一行。

2.2.2、行

  • 行宽不超120字符。
  • 一行只有一条语句。
  • 换行时,新一行进行同类对其或缩进一层。

2.2.3、*

任何时候,*宜跟随变量名或函数名,除非右侧没有变量或函数名,可以跟随类型。

2.2.4、空格

  • 行末不加
  • 关键字(if、switch、do、while、for等)后加空格
  • 小括号内部两侧不加
  • 一元操作符后不加
  • 二元操作符两侧都加

2.2.5、空行

根据内容的相关程度,合理安排空行。

2.3、注释风格

【规则】C语言按需写注释,有三种注释方式,前两种为常见:

  1. /*开始、以*/结束的块注释(block comment)。用于单、多行注释,/**/不嵌套/**/,/**/可嵌套//。
  2. //开始、以换行符结束的单行注释(line comment)。
  3. 条件编译注释。

【规范】注释置于对应代码上方或右方。

  • 上方注释应与代码同缩进,无空行。
  • 右方注释应与代码至少留一个空格,与下一行注释左对齐。长度不宜过长,不应超过行宽。

【注意】注释内容也可能是存在格式的。

三、编程实践

3.1、宏

【规则】

  • 宏名避免与关键字同名。
  • 函数宏调用时,其参数不应出现预处理指令如#include、#define 、#ifdef。
  • 宏定义不依赖宏外部的局部变量。
  • 包含多条语句的函数式宏,必须放在do-while(0)中。
  • 使用()。单独的数字、标识符无需(),负数需要(),

【规范】

  • 函数式宏尽量不超过10行。
  • 宏定义内容不以分号结尾。(易误用)
  • 慎用return、goto、continue、break等语句。
  • 使用函数代替函数式宏。宏缺乏类型检查,比函数更难调试和定位,。

【注意】带参数的宏容易出现问题。

3.2、头文件

【描述】每个.c应有一个对应的.h(不一定同名),用于放置对外提供的函数声明、类型定义、宏定义。

【规则】

  • 仅在.c内部使用的函数在.c文件头部声明,用static限制作用域。
  • 不包含用不到的头文件(减少不必要的依赖,降低模块与单元耦合度,避免编译时间恶化)。
  • 自包含(即.h不包含其他的.h,避免包含顺序的依赖)、可独立编译。
  • 使用#define进行包含保护。注意:保护符大写下划线分割、唯一命名,避免首尾是下划线。
  • 禁止通过声明的方式引用外部函数接口、外部变量(隐式依赖,容易导致声明和定义不一致)。
  • 按照稳定度包含头文件。依次是:C标准库、操作系统库、平台库、项目公共库、自己其他的依赖。
  • 不在extern "C"中包含头文件。嵌套太多次extern "C"会导致编译错误。

【规范】不提倡一个.c有两个.h(一个放置对外相关、一个放置内部使用),无法从技术规避别人包含。

3.3、条件编译

【规则】

  • #if或 #endif的预处理指令的常量表达式应该是布尔值,不直接使用0、1、2等。
  • #if或 #endif的预处理指令的常量表达式被求值前应确保其使用的标识符已定义。

3.4、数据类型

【规则】除非有明确的必要性,否则避免重复定义基础类型。

【规范】避免隐式有损算数转换。

3.5、变量

【规则】

  • 禁止将局部变量的地址传递到作用域外。
  • 资源不再使用予以关闭、释放。

【规范】

慎用全局变量。

3.6、表达式

3.7、语句

3.8、函数

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1、清晰第一 清晰性是易于维护、易于重构的程序必需具备的特征。代码首先是给人读的,好的代码应当可以像文章一样发声朗诵出来。 目前软件维护期成本占整个生命周期成本的40%~90%。根据业界经验,维护期变更代码的成本,小型系统是开发期的5倍,大型系统(100万行代码以上)可以达到100倍。业界的调查指出,开发组平均大约一半的人力用于弥补过去的错误,而不是添加新的功能来帮助公司提高竞争力。 一般情况下,代码的可阅读性高于性能,只有确定性能是瓶颈时,才应该主动优化。 2、简洁为美 简洁就是易于理解并且易于实现。代码越长越难以看懂,也就越容易在修改时引入错误。写的代码越多,意味着出错的地方越多,也就意味着代码的可靠性越低。因此,我们提倡大家通过编写简洁明了的代码来提升代码可靠性。 废弃的代码(没有被调用的函数和全局变量)要及时清除,重复代码应该尽可能提炼成函数。 3、选择合适的风格,与代码原有风格保持一致 产品所有人共同分享同一种风格所带来的好处,远远超出为了统一而付出的代价。在公司已有编码规范的指导下,审慎地编排代码以使代码尽可能清晰,是一项非常重要的技能。 如果重构/ / 修改其他风格的代码时,比较明智的做法是根据 现有 代码 的 现有风格继续编写代码,或者使用格式转换工具进行转换成公司内部风格。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

·大道至简

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值