📄 编程规范与范例(2).htm
字号:
typedef struct TEACHER_STRU<br>{<br> unsigned char name[8]; /* teacher name */<br> unisgned char sex; /* teacher sex, as follows */<br> /* 0 - FEMALE; 1 - MALE */<br>} TEACHER;<br><br>typedef struct STUDENT_STRU<br>{<br> unsigned char name[8]; /* student's name */<br> unsigned char age; /* student's age */<br> unsigned char sex; /* student's sex, as follows */<br> /* 0 - FEMALE; 1 - MALE */<br> unsigned int teacher_ind; /* his teacher index */<br>} STUDENT;<br>&frac12; 5-4:不要设计面面俱到、非常灵活的数据结构。<br>说明:面面俱到、灵活的数据结构反而容易引起误解和操作困难。<br>&frac12; 5-5:不同结构间的关系不要过于复杂。<br>说明:若两个结构间关系较复杂、密切,那么应合为一个结构。<br>示例:如下两个结构的构造不合理。<br>typedef struct PERSON_ONE_STRU<br>{<br> unsigned char name[8];<br> unsigned char addr[40];<br> unsigned char sex;<br> unsigned char city[15];<br>} PERSON_ONE;<br><br>typedef struct PERSON_TWO_STRU<br>{<br> unsigned char name[8];<br> unsigned char age;<br> unsigned char tel;<br>} PERSON_TWO;<br><br>由于两个结构都是描述同一事物的,那么不如合成一个结构。<br>typedef struct PERSON_STRU<br>{<br> unsigned char name[8];<br> unsigned char age;<br> unsigned char sex;<br> unsigned char addr[40];<br> unsigned char city[15];<br> unsigned char tel;<br>} PERSON;<br>&frac12; 5-6:结构中元素的个数应适中。若结构中元素个数过多可考虑依据某种原则把元素组成不同的子结构,以减少原结构中元素的个数。<br>说明:增加结构的可理解性、可操作性和可维护性。<br>示例:假如认为如上的_PERSON结构元素过多,那么可如下对之划分。<br>typedef struct PERSON_BASE_INFO_STRU<br>{<br> unsigned char name[8];<br> unsigned char age;<br> unsigned char sex;<br>} PERSON_BASE_INFO;<br><br>typedef struct PERSON_ADDRESS_STRU<br>{<br> unsigned char addr[40];<br> unsigned char city[15];<br> unsigned char tel;<br>} PERSON_ADDRESS;<br><br>typedef struct PERSON_STRU<br>{<br> PERSON_BASE_INFO person_base;<br> PERSON_ADDRESS person_addr;<br>} PERSON;<br>&frac12; 5-7:仔细设计结构中元素的布局与排列顺序,使结构容易理解、节省占用空间,并减少引起误用现象。<br>说明:合理排列结构中元素顺序,可节省空间并增加可理解性。<br>示例:如下结构中的位域排列,将占较大空间,可读性也稍差。<br>typedef struct EXAMPLE_STRU<br>{<br> unsigned int valid: 1;<br> PERSON person;<br> unsigned int set_flg: 1;<br>} EXAMPLE;<br><br>若改成如下形式,不仅可节省1字节空间,可读性也变好了。<br>typedef struct EXAMPLE_STRU<br>{<br> unsigned int valid: 1;<br> unsigned int set_flg: 1;<br> PERSON person ;<br>} EXAMPLE;<br>&frac12; 5-8:结构的设计要尽量考虑向前兼容和以后的版本升级,并为某些未来可能的应用保留余地(如预留一些空间等)。<br>说明:软件向前兼容的特性,是软件产品是否成功的重要标志之一。如果要想使产品具有较好的前向兼容,那么在产品设计之初就应为以后版本升级保留一定余地,并且在产品升级时必须考虑前一版本的各种特性。<br>&frac12; 5-9:留心具体语言及编译器处理不同数据类型的原则及有关细节。<br>说明:如在C语言中,static局部变量将在内存“数据区”中生成,而非static局部变量将在“堆栈”中生成。这些细节对程序质量的保证非常重要。<br>&frac12; 5-10:编程时,要注意数据类型的强制转换。<br>说明:当进行数据类型强制转换时,其数据的意义、转换后的取值等都有可能发生变化,而这些细节若考虑不周,就很有可能留下隐患。<br>&frac12; 5-11:对编译系统默认的数据类型转换,也要有充分的认识。<br>示例:如下赋值,多数编译器不产生告警,但值的含义还是稍有变化。<br>char chr;<br>unsigned short int exam;<br><br>chr = -1;<br>exam = chr; // 编译器不产生告警,此时exam为0xFFFF。<br>&frac12; 5-12:尽量减少没有必要的数据类型默认转换与强制转换。<br>&frac12; 5-13:合理地设计数据并使用自定义数据类型,避免数据间进行不必要的类型转换。<br>&frac12; 5-14:对自定义数据类型进行恰当命名,使它成为自描述性的,以提高代码可读性。注意其命名方式在同一产品中的统一。<br>说明:使用自定义类型,可以弥补编程语言提供类型少、信息量不足的缺点,并能使程序清晰、简洁。<br>示例:可参考如下方式声明自定义数据类型。<br><br>下面的声明可使数据类型的使用简洁、明了。<br>typedef unsigned char BYTE;<br>typedef unsigned short WORD;<br>typedef unsigned int DWORD;<br><br>下面的声明可使数据类型具有更丰富的含义。<br>typedef float DISTANCE;<br>typedef float SCORE;<br>&frac12; 5-15:当声明用于分布式环境或不同CPU间通信环境的数据结构时,必须考虑机器的字节顺序、使用的位域及字节对齐等问题 。<br>说明:比如Intel CPU与68360 CPU,在处理位域及整数时,其在内存存放的“顺序”正好相反。<br>示例:假如有如下短整数及结构。<br>unsigned short int exam;<br>typedef struct EXAM_BIT_STRU<br>{ /* Intel 68360 */<br> unsigned int A1: 1; /* bit 0 7 */<br> unsigned int A2: 1; /* bit 1 6 */<br> unsigned int A3: 1; /* bit 2 5 */<br>} EXAM_BIT;<br><br>如下是Intel CPU生成短整数及位域的方式。<br>内存: 0 1 2 ... (从低到高,以字节为单位)<br>exam exam低字节 exam高字节<br><br>内存: 0 bit 1 bit 2 bit ... (字节的各“位”)<br>EXAM_BIT A1 A2 A3<br><br>如下是68360 CPU生成短整数及位域的方式。<br>内存: 0 1 2 ... (从低到高,以字节为单位)<br>exam exam高字节 exam低字节<br><br>内存: 7 bit 6 bit 5 bit ... (字节的各“位”)<br>EXAM_BIT A1 A2 A3<br><br>说明:在对齐方式下,CPU的运行效率要快得多。<br>示例:如下图,当一个long型数(如图中long1)在内存中的位置正好与内存的字边界对齐时,CPU存取这个数只需访问一次内存,而当一个long型数(如图中的long2)在内存中的位置跨越了字边界时,CPU存取这个数就需要多次访问内存,如i960cx访问这样的数需读内存三次(一个BYTE、一个SHORT、一个BYTE,由CPU的微代码执行,对软件透明),所有对齐方式下CPU的运行效率明显快多了。<br>1 8 16 24 32<br>------- ------- ------- -------<br>| long1 | long1 | long1 | long1 |<br>------- ------- ------- -------<br>| | | | long2 |<br>------- ------- ------- --------<br>| long2 | long2 | long2 | |<br>------- ------- ------- --------<br>| .... </td>
</tr>
<tr>
<td width="600"></td>
</tr>
<tr>
<td width="600"><b>郑重声明</b><br>
近年来我站数百篇“原创文章”被一些媒体肆意转载,不但不标明出自“中国电子技术信息网”,而且把相关字眼删除!这是无视技术价值的盗窃行为,是对技术人员辛勤劳动的蔑视,我对此种行为表示强烈的谴责。<br>
“本是同根生,相煎何太急”,考虑到我们做技术的都是同门兄弟,对以前的盗窃行为不再追究,今后再有此类事件,最低处理限度是“明示于天下”。在这里向转载过又标注了出处的兄弟媒体表示崇高的敬意!<br>
兄弟网站如果引用本站“原创文章”,请首先经本人许可,并标注“www.cetinet.com”或“中国电子技术信息网”字样。<br>
欢迎个人下载使用!</td>
</tr>
</table>
</td>
</tr>
</table>
<br>
<br>
</div>
</body>
<body bgcolor="#FFFFFF" text="#000000">
<p align="center">
本站所载文章力求原创,部分资料转自网上,假如您认为某些文章侵犯了您的权益,<br>
请告知我们,我们将在最短的时间内删除有关文章。本站转载文章均注明出处。<br>
兄弟网站如果转载本站文章请注明本站版权,谢谢!
<p align="center">中国电子技术信息网 文章管理系统由:Aoe 制作<br>
Copyright (C) 2001-2004 CETINet.COM All Rights Reserved
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -