文章目录
1、命名约定
1.1 通用 命名规则
函数命名
,变量命名
,文件命名
要有描述性
,少用缩写。
注意,一些特定
的广为人知
的缩写
是允许的,例如用i
表示迭代变量
(iteration)和用T
表示模板参数
(template)。
目前主要有 4种命名风格:
序号 | 类型 | 描述 |
---|---|---|
1 | 驼峰 命名法 | 首字母小写,每个逻辑断点都用大写字母来标记 一般用于 全局变量 ,函数 、结构体变量 、对象名 示例:myData |
2 | 帕斯卡(Pascal)命名法 | 与驼峰命名法类似,只是 首字母大写 一般用于 结构名 、类名 示例:MyData |
3 | 下划线 命名法 | 函数名中的每个逻辑断点都用下划线 _ 分割C程序 和UNIX 这样的环境中,它的使用非常普遍一般用于 函数 、变量 示例:my_data |
4 | 匈牙利 命名法 | 变量名前面加上相应的小写字母的符号标识作为前缀,标识出变量的作用域、类型等 示例:i_MyData |
1.2 文件名 命名规则
文件名
要全部小写
,可以包含下划线 _
或连字符 -
,,依照项目的约定。如果没有约定。那么下划线 _
更好。
例如:my_useful_class.c
1.3 变量 命名规则
变量(包括函数参数
) 和数据成员名
一律小写,单词之间用下划线 _
连接。
类
的成员变量
以下划线结尾,但结构体
的就不用。
序号 | 类别 | 举例 |
---|---|---|
1 | 局部变量 ,函数参数 | local_variable |
2 | 结构体 内的变量 | struct_data_member |
3 | 类 的成员变量 | class_data_member_ |
1.4 类型 命名规则
所有类型命名:类
,结构体
,类型定义
(typedef
),枚举
,类型模板参数
,均使用相同约定,即以大写字母开始
,每个单词首字母均大写,不包含下划线(帕斯卡
命名法)。例如:
class BookCartoon {
string title_;
string author_;
};
struct BookCartoon {
char title[40];
char author[40];
};
typedef struct {
char title[40];
char author[40];
} BookCartoon;
enum ButtonState {
SHORT_PRESS, /* 短按 */
LONG_PRESS, /* 长按 */
};
typedef enum {
SHORT_PRESS, /* 短按 */
LONG_PRESS, /* 长按 */
} ButtonState;
类型 变量 采用驼峰
命名:
序号 | 类别 | 举例 |
---|---|---|
1 | 结构体 变量 | bookCartoon |
2 | 对象名 | bookCartoon |
3 | 枚举 变量 | buttonState |
1.5 函数 命名规则
一般来说,函数名
的每个单词首字母大写
,没有下划线。
对于首字母缩写的单词,更倾向于将它们视作一个单词进行首字母大写。
序号 | 方式 | 描述 |
---|---|---|
1 | 驼峰 命名法 | myFunctio() ,deleteUrl() |
2 | 下划线 命名法 | my_function() |
3 | 帕斯卡(Pascal)命名法 | MyFunction() ,DeleteUrl() |
1.6 枚举 命名规则
枚举的命名应当和常量
或宏
一致:kEnumName
或是ENUM_NAME
。
typedef enum {
BS_SHORT_PRESS, /* 短按 */
BS_LONG_PRESS, /* 长按 */
} ButtonState;
1.7 宏 的命名规则
命名全部大写
,使用下划线 _
连接。
#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL
2、函数
序号 | 描述 |
---|---|
1 | 一个函数 仅完成 一件功能 |
2 | 重复代码 应该尽可能提炼成 函数 |
3 | 避免函数的代码块嵌套 过深 |
4 | 对函数的错误返回码 要全面处理 |
5 | 在源文件范围内声明 和定义 的所有函数,除非外部可见,否则应该增加static 关键字 |
3、质量保证
序号 | 原则 | 描述 |
---|---|---|
1 | 正确性 | 程序要实现设计要求的功能 |
2 | 简洁性 | 程序易于理解 并且易于实现 |
3 | 可靠性 | 程序在给定时间间隔和环境条件下,按设计要求成功运行程序的概率 |
4 | 可维护性 | 程序被修改的能力,包括纠错 、改进 、新需求 或功能规格变化 的适应能力 |
5 | 代码 可测试性 | 软件发现故障并隔离 、定位故障 的能力,以及在一定的时间和成本前提下,进行测试设计 、测试执行 的能力 |
6 | 代码 性能高效 | 尽可能少地占用系统资源 ,包括内存和执行时间 |
7 | 可移植性 | 为了在原来设计的特定环境之外运行,对系统进行修改的能力 |
4、程序效率
在保证软件系统的 正确性、简洁、可维护性、可靠性 及 可测性的前提下,提高代码效率。
5、注释
优秀的代码 不写注释也可轻易读懂,注释无法把糟糕的代码变好,需要很多注释来解释的代码往往存在坏味道,需要重构
。
命名的 常用缩写
Primitive(原语) | 缩写 | 翻译 |
---|---|---|
receive | recv | 接收 |
send | send | 发送 |
argument | arg | - |
buffer | buf | - |
command | cmd | - |
compare | cmp | - |
config | cfg | - |
device | dev | - |
error | err | - |
hexadecimal | hex | - |
initialize | init | - |
maximum | max | - |
minimum | min | - |
message | msg | - |
parameter | param | - |
previous | prev | - |
register | reg | - |
synchronize | sync | - |
temp | tmp | - |