华为软件编程规范和范例 2 —— 标识符命名和可读性

3.    标识符命名


3.1    标识符的命名要清晰、明了, 有明确含义, 同时使用完整的单词或大家基本可以理解的缩写, 避免使人  产生误解。


说明: 较短的单词可通过去掉“元音”形成缩写; 较长的单词可取单词的头几个字母形成缩写; 一些单词有大家公  认的缩写。


示例: 如下单词的缩写能够被大家基本认可。

temp可缩写为 tmp;  临时

flag可缩写为 flg;     标志

statistic可缩写为 stat ;   统计

increment可缩写为 inc;   增量

message可缩写为 msg;     消息



3.2    命名中若使用特殊约定或缩写, 则要有注释说明。


说明:  应该在源文件的开始之处, 对文件中所使用的缩写或约定, 特别是特殊的缩写, 进行必要的注释说明。



3.3    自己特有的命名风格, 要自始至终保持一致, 不可来回变化。


说明:  个人的命名风格, 在符合所在项目组或产品组的命名规则的前提下, 才可使用。(即命名规则中没有规定   到的地方才可有个人命名风格)。



3.4    对于变量命名, 禁止取单个字符(如i、j、k... ), 建议除了要有具体含义外, 还能表明其变量类型、数据类  型等, 但i、j、k 作局部循环变量是允许的。


说明:   变量, 尤其是局部变量, 如果用单个字符表示, 很容易敲错(如i写成j), 而编译时又检查不出来, 有可能为   了这个小小的错误而花费大量的查错时间。


示例: 下面所示的局部变量名的定义方法可以借鉴。

int liv_Width

其变量名解释如下:

l      局部变量(Local)  (其它: g 全局变量(Global)...)

i      数据类型(Interger)

v      变量(Variable)   (其它: c 常量(Const)...)

Width  变量含义

这样可以防止局部变量与全局变量重名。



3.5    命名规范必须与所使用的系统风格保持一致, 并在同一项目中统一, 比如采用UNIX的全小写加下划线的 风格或大小写混排的方式, 不要使用大小写与下划线混排的方式, 用作特殊标识如标识成员变量或全局 变量的m_ 和g_ , 其后加上大小写混排的方式是允许的。


示例: Add_User不允许, add_user、AddUser、m_AddUser允许。


 1、除非必要, 不要用数字或较奇怪的字符来定义标识符。


示例: 如下命名, 使人产生疑惑。

#define _EXAMPLE_0_TEST_

#define _EXAMPLE_1_TEST_

void set_sls00( BYTE sls );

应改为有意义的单词命名

#define _EXAMPLE_UNIT_TEST_

#define _EXAMPLE_ASSERT_TEST_

void set_udt_msg_sls( BYTE sls );

2、在同一软件产品内, 应规划好接口部分标识符(变量、结构、函数及常量)的命名, 防止编译、链接时产生          冲突。


说明: 对接口部分的标识符应该有更严格限制, 防止冲突。如可规定接口部分的变量与常量之前加上“模块”标识等。


3、用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。


      说明: 下面是一些在软件中常用的反义词组。


========================================================================

add / remove            begin / end          create / destroy

insert / delete         first / last         get / release

increment / decrement   put / get            add / delete

lock / unlock           open / close         min / max

old / new               start / stop         next / previous

source / target         show / hide          send / receive

source / destination    cut / paste          up / down

===========================================================================

示例:


int  min_sum;

int  max_sum;

int  add_user( BYTE *user_name );

int  delete_user( BYTE *user_name );


4、除了编译开关/ 头文件等特殊应用, 应避免使用_EXAMPLE_TEST_ 之类以下划线开始和结尾的定义。



4. 可读性


4.1    注意运算符的优先级, 并用括号明确表达式的操作顺序, 避免使用默认优先级。


说明: 防止阅读程序时产生误解, 防止因默认的优先级与设计思想不符而导致程序出错。

示例: 下列语句中的表达式

word = (high << 8) | low     (1)

if ((a | b) && (a & c))      (2)

if ((a | b) < (c & d))       (3)

如果书写为:

high << 8 | low

a | b && a & c

a | b < c & d

由于

high << 8 | low 等价于 ( high << 8) | low

a | b && a & c  等价于 (a | b) && (a & c)

故(1)(2)不会出错, 但语句不易理解, 而

a | b < c & d 等价于 a | (b < c) & d

故(3)造成了判断条件出错。



4.2    避免使用不易理解的数字, 用有意义的标识来替代。涉及物理状态或者含有物理意义的常量, 不应直接  使用数字, 必须用有意义的枚举或宏来代替。


示例: 如下的程序可读性差。

if (Trunk[index].trunk_state == 0)

{

    Trunk[index].trunk_state = 1;

    ...  // program code

}

应改为如下形式。

#define TRUNK_IDLE 0

#define TRUNK_BUSY 1



if (Trunk[index].trunk_state == TRUNK_IDLE)

{

    Trunk[index].trunk_state = TRUNK_BUSY;

    ...  // program code

}



1、源程序中关系较为紧密的代码应尽可能相邻。

说明: 便于程序阅读和查找。

示例: 以下代码布局不太合理。

rect.length = 10;

char_poi = str;

rect.width = 5;


若按如下形式书写, 可能更清晰一些。

rect.length = 10;

rect.width = 5; // 矩形的长与宽关系较密切, 放在一起。

char_poi = str;


2、不要使用难懂的技巧性很高的语句, 除非很有必要时。

说明: 高技巧语句不等于高效率的程序,实际上程序的效率关键在于算法。

示例: 如下表达式, 考虑不周就可能出问题, 也较难理解。

* stat_poi ++ += 1;

* ++ stat_poi += 1;

应分别改为如下:

*stat_poi += 1;

stat_poi++;     // 此二语句功能相当于“ * stat_poi ++ += 1; ”

++ stat_poi;

*stat_poi += 1; // 此二语句功能相当于“ * ++ stat_poi += 1; ”










































华为代码规范,适用 C/C++ 1 概述 ................................................................................................................................................................... 5 1.1 编写目的 ........................................................................................................................................... 5 1.2 文档约定 ........................................................................................................................................... 5 1.3 预期的读者和阅读建议 ................................................................................................................... 5 1.4 参考文献 ........................................................................................................................................... 5 2 排版要求 ........................................................................................................................................................... 5 2.1 程序块缩进 ....................................................................................................................................... 5 2.2 程序块之间空行 ............................................................................................................................... 5 2.3 长语句和长表达式 ........................................................................................................................... 6 2.4 循环、判断等长表达式或语句 ....................................................................................................... 7 2.5 长参数 ............................................................................................................................................... 7 2.6 短语句 ............................................................................................................................................... 8 2.7 条件、循环语句 ............................................................................................................................... 8 2.8 语句对齐 ........................................................................................................................................... 8 2.9 函数、过程和结构等语句块 ........................................................................................................... 9 2.10 程序块分界符 ................................................................................................................................... 9 2.11 操作符前后空格 ............................................................................................................................. 10 2.12 其他 ..................................................................................................................................................11 3 注释 ..................................................................................................................................................................11 3.1 有效注释量 ......................................................................................................................................11 3.2 公司标识 ..........................................................................................................................................11 3.3 说明性文件 ..................................................................................................................................... 12 3.4 源文件头 ......................................................................................................................................... 13 3.5 函数头部说明 ................................................................................................................................. 13 3.6 注释与代码一致 ............................................................................................................................. 14 3.7 注释内容 ......................................................................................................................................... 14 3.8 注释缩写 ......................................................................................................................................... 14 3.9 注释位置 ......................................................................................................................................... 14 3.10 变量、常量注释 ............................................................................................................................. 15 3.11 数据结构的注释 ............................................................................................................................. 15 3.12 全局变量 ......................................................................................................................................... 16 3.13 注释缩排 ......................................................................................................................................... 16 3.14 注释与代码之间空行 ..................................................................................................................... 17 3.15 变量定义、分支语句 ..................................................................................................................... 17 3.16 其他 ................................................................................................................................................. 19 4 标识符命名 ..................................................................................................................................................... 20 4.1 命名清晰 ......................................................................................................................................... 20 4.2 特殊命名需注释 ............................................................................................................................. 21 4.3 命名风格保持一致 ......................................................................................................................... 21 4.4 变量命名 ......................................................................................................................................... 21 4.5 命名规范与系统风格一致 ............................................................................................................. 22 4.6 其他 ................................................................................................................................................. 22 5 可读性 ............................................................................................................................................................. 23 5.1 运算符优先级 ................................................................................................................................. 23 第 3 页 共 69 页 5.2 避免直接使用数字作为标识符 ..................................................................................................... 24 5.3 其他 ................................................................................................................................................. 24 6 变量、结构 ..................................................................................................................................................... 25 6.1 公共变量 ......................................................................................................................................... 25 6.2 公共变量说明 ................................................................................................................................. 26 6.3 公共变量访问说明 ......................................................................................................................... 26 6.4 公共变量赋值 ................................................................................................................................. 26 6.5 防止局部变量与公共变量同名。 ................................................................................................. 26 6.6 严禁使用未经初始化的变量作为右值。 ...................................................................................... 26 6.7 其他 ................................................................................................................................................. 27 7 函数、过程 ..................................................................................................................................................... 34 7.1 对所调用函数的错误返回码要仔细、全面地处理。 .................................................................. 34 7.2 明确函数功能,精确(而不是近似)地实现函数设计。 .......................................................... 34 7.3 局部变量 ......................................................................................................................................... 34 7.4 全局变量 ......................................................................................................................................... 34 7.5 接口函数参数 ................................................................................................................................. 35 7.6 其他 ................................................................................................................................................. 35 8 可测性 ............................................................................................................................................................. 44 8.1 调测开关 ......................................................................................................................................... 44 8.2 打印信息 ......................................................................................................................................... 45 8.3 单元测试 ......................................................................................................................................... 45 8.4 集成测试 ......................................................................................................................................... 45 8.5 断言使用 ......................................................................................................................................... 45 8.6 设置与取消有关测试手段时,不能影响软件功能功能 .............................................................. 48 8.7 版本维护 ......................................................................................................................................... 48 8.8 其他 ................................................................................................................................................. 48 9 程序效率 ......................................................................................................................................................... 50 9.1 编程时要经常注意代码的效率。 ................................................................................................. 50 9.2 提高代码效率 ................................................................................................................................. 50 9.3 全局效率高于局部效率 ................................................................................................................. 51 9.4 提高代码空间效率 ......................................................................................................................... 51 9.5 循环体内工作量最小化 ................................................................................................................. 52 9.6 其他 ................................................................................................................................................. 53 10 质量保证 ................................................................................................................................................. 56 10.1 在软件设计过程中构筑软件质量。.............................................................................................. 56 10.2 代码质量保证优先原则 ................................................................................................................. 56 10.3 只引用属于自己的存贮空间。 ..................................................................................................... 56 10.4 防止引用已经释放的内存空间。 ................................................................................................. 56 10.5 内存及时释放 ................................................................................................................................. 57 10.6 文件句柄及时关闭 ......................................................................................................................... 57 10.7 防止内存操作越界 ......................................................................................................................... 58 10.8 认真处理程序所能遇到的各种出错情况 ...................................................................................... 59 10.9 初始化变量 ..................................................................................................................................... 59 10.10 数据一致性检查 ............................................................................................................................. 59 10.11 严禁随意更改其它模块或系统的有关设置和配置 ...................................................................... 59 10.12 不能随意改变与其它模块的接口 ................................................................................................. 59 第 4 页 共 69 页 10.13 系统接口 ......................................................................................................................................... 59 10.14 编程时,要防止差 1 错误 ............................................................................................................. 61 10.15 操作符检查 ..................................................................................................................................... 61 10.16 分支语句写完整 ............................................................................................................................. 62 10.17 使用 return 语句 .............................................................................................................................. 62 10.18 不要滥用 goto 语句 ........................................................................................................................ 62 10.19 其他 ................................................................................................................................................. 62 11 代码编辑、编译、审查 ......................................................................................................................... 65 11.1 打开编译器的所有告警开关对程序进行编译 .............................................................................. 65 11.2 在产品软件(项目组)中,要统一编译开关选项 ...................................................................... 65 11.3 通过代码走读及审查方式对代码进行检查。 .............................................................................. 65 11.4 测试部测试产品之前,应对代码进行抽查及评审 ...................................................................... 65 11.5 其他 ................................................................................................................................................. 65 12 代码测试、维护 ..................................................................................................................................... 67 12.1 单元测试要求至少达到语句覆盖 ................................................................................................. 67 12.2 单元测试开始要跟踪每一条语句,并观察数据流及变量的变化 .............................................. 67 12.3 清理、整理或优化后的代码要经过审查及测试。 ...................................................................... 67 12.4 代码版本升级要经过严格测试 ..................................................................................................... 67 12.5 使用工具软件对代码版本进行维护.............................................................................................. 67 12.6 正式版本上软件的任何修改都应有详细的文档记录 .................................................................. 67 12.7 其他 ................................................................................................................................................. 67 13 宏 ............................................................................................................................................................. 68 13.1 用宏定义表达式时,要使用完备的括号 ...................................................................................... 68 13.2 将宏所定义的多条表达式放在大括号中 ...................................................................................... 68 13.3 使用宏时,不允许参数发生变化 ................................................................................................. 69
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值