编码规范(变量、结构篇)

来源:互联网 发布:ubuntu安装系统工具包 编辑:程序博客网 时间:2024/06/15 17:07

//摘抄自华为软件编写规范
1、去掉没必要的公共变量
说明:公共变量是增大模块间耦合的原因之一,故应减少没必要的公共变量以降低模块间的耦合度。
2、仔细定义并明确公共变量的含义、作用、取值范围及公共变量间的关系
说明:在对变量声明的同时,应对其含义、作用及取值范围进行注释说明,同时若有必要还应说明与其它变量的关系。
3、明确公共变量与操作此公共变量的函数或过程的关系,如访问、修改及创建等
说明:明确过程操作变量的关系后,将有利于程序的进一步优化、单元测试、系统联调以及代码维护等。
这种关系的说明可在注释或文档中描述。
示例:在源文件中,可按如下注释形式说明。

RELATION   System_Init   Input_Rec   Print_Rec    Stat_Score Student    Create        Modify      Access        Access Score      Create        Modify      Access     Access, Modify 

注:RELATION 为操作关系;System_Init、Input_Rec、Print_Rec、Stat_Score 为四个不同的函数;Student、
Score 为两个全局变量;Create 表示创建,Modify 表示修改,Access 表示访问。
其中,函数 Input_Rec、Stat_Score 都可修改变量 Score,故此变量将引起函数间较大的耦合,并可能增加代码测试、维护的难度。
4、当向公共变量传递数据时,要十分小心,防止赋与不合理的值或越界等现象发生
说明:对公共变量赋值时,若有必要应进行合法性检查,以提高代码的可靠性、稳定性。
5、防止局部变量与公共变量同名
说明:若使用了较好的命名规则,那么此问题可自动消除。
6、严禁使用未经初始化的变量作为右值
说明:特别是在 C/C++中引用未经赋值的指针,经常会引起系统崩溃。
7、构造仅有一个模块或函数可以修改、创建,而其余有关模块或函数只访问的公共变量,防止多个不同模块或函数都可以修改、创建同一公共变量的现象
说明:降低公共变量耦合度。
8、使用严格形式定义的、可移植的数据类型,尽量不要使用与具体硬件或软件环境关系密切的变量
说明:使用标准的数据类型,有利于程序的移植。
9、结构的功能要单一,是针对一种事务的抽象
说明:设计结构时应力争使结构代表一种现实事务的抽象,而不是同时代表多种。结构中的各元素应代表同一事务的不同侧面,而不应把描述没有关系或关系很弱的不同事务的元素放到同一结构中。
10、要设计面面俱到、非常灵活的数据结构
说明:面面俱到、灵活的数据结构反而容易引起误解和操作困难。
11、不同结构间的关系不要过于复杂
说明:若两个结构间关系较复杂、密切,那么应合为一个结构。

typedef struct PERSON_ONE_STRU {      unsigned char name[8];      unsigned char addr[40];      unsigned char sex;      unsigned char city[15]; } PERSON_ONE; typedef struct PERSON_TWO_STRU {      unsigned char name[8];      unsigned char age;      unsigned char tel; } PERSON_TWO; 由于两个结构都是描述同一事物的,那么不如合成一个结构。  typedef struct PERSON_STRU {      unsigned char name[8];      unsigned char age;      unsigned char sex;      unsigned char addr[40];      unsigned char city[15];      unsigned char tel; } PERSON; 

12、结构中元素的个数应适中。若结构中元素个数过多可考虑依据某种原则把元素组成不同的子结构,以减少原结构中元素的个数
13、仔细设计结构中元素的布局与排列顺序,使结构容易理解、节省占用空间,并减少引起误用现象
说明:合理排列结构中元素顺序,可节省空间并增加可理解性。
示例:如下结构中的位域排列,将占较大空间,可读性也稍差。

typedef struct EXAMPLE_STRU {      unsigned int valid: 1;      PERSON person;      unsigned int set_flg: 1; } EXAMPLE; 若改成如下形式,不仅可节省 1 字节空间,可读性也变好了。 typedef struct EXAMPLE_STRU {      unsigned int valid: 1;      unsigned int set_flg: 1;      PERSON person ; } EXAMPLE; 

14、结构的设计要尽量考虑向前兼容和以后的版本升级,并为某些未来可能的应用保留余地(如预留一些空间等)
15、留心具体语言及编译器处理不同数据类型的原则及有关细节
说明:如在 C 语言中,static 局部变量将在内存“数据区”中生成,而非 static 局部变量将在“堆栈”中生成。
这些细节对程序质量的保证非常重要。
16、编程时,要注意数据类型的强制转换
说明:当进行数据类型强制转换时,其数据的意义、转换后的取值等都有可能发生变化,而这些细节若考虑不周,就很有可能留下隐患。
17、对编译系统默认的数据类型转换,也要有充分的认识
示例:如下赋值,多数编译器不产生告警,但值的含义还是稍有变化。
char chr;
unsigned short int exam;
chr = -1;
exam = chr; // 编译器不产生告警,此时 exam 为 0xFFFF。
18、尽量减少没有必要的数据类型默认转换与强制转换
19、合理地设计数据并使用自定义数据类型,避免数据间进行不必要的类型转换
20、对自定义数据类型进行恰当命名,使它成为自描述性的,以提高代码可读性。注意其命名方式在
同一产品中的统一
说明:使用自定义类型,可以弥补编程语言提供类型少、信息量不足的缺点,并能使程序清晰、简洁。

原创粉丝点击