云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 程序员所要知道的编程规范、编码规范

程序员所要知道的编程规范、编码规范

  • 62 次阅读
  • 3 次下载
  • 2025/5/29 17:31:54

编程规范(C/C++)

〖建议6-3〗如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面。

说明:下面两个示例中,反例比正例多执行了NUM -1 次逻辑判断。并且由于前者总要进行逻辑判断,使得编译器不能对循环进行优化处理,降低了效率。如果NUM 非常大,最好采用正例的写法,可以提高效率。

const int NUM = 100000; 正例:

if (bCondition) {

for (i = 0; i < NUM; i++) {

DoSomething(); } } else {

for (i = 0; i < NUM; i++) {

DoOtherthing(); } }

反例:

for (i = 0; i < NUM; i++) {

if (bCondition) {

DoSomething(); } else {

DoOtherthing(); } }

37

编程规范(C/C++)

〖建议6-4〗在进行“==”比较时,将常量或常数放在“==”号的左边。

说明:可以采用这种方式,让编译器去发现错误。 正例:

if (NULL == pTail) if (0 == iSum)

示例中有意把p和NULL颠倒。编译器认为 if (pTail = NULL) 是合法的,但是会指出 if (NULL = pTail)是错误的,因为NULL 不能被赋值。

6.7 函数与过程

函数是C/C++程序的基本功能单元。如何编写出正确、高效、易维护的函数是软件编码质量控制的关键。一个函数包括函数头,函数名,函数体,参数,返回值。其中函数头的编写参见注释章节,函数名参见命名规则章节,本章着重描述作为接口要素的参数和返回值,函数体的实现以及函数相互之间的调用关系。

6.7.1 参数

【规则7-1-1】除构造和析构函数外,如果函数没有参数,则用void 填充。

说明:函数在说明的时候,可以省略参数名。但是为了提高代码的可读性,要求不能省略。

正例:

void SetValue(int iWidth, int iHeight); float GetValue(void);

反例:

void SetValue(int, int); float GetValue();

【规则7-1-2】如果参数是指针,且仅作输入用,则应在类型前加const。

说明:防止该指针在函数体内被意外修改。 正例:

int GetStrLen(const char *pcString);

38

编程规范(C/C++)

【规则7-1-3】当结构变量作为参数时,应传送结构的指针而不传送整个结构体,并且不得修改结构中的元素,用作输出时除外。

说明:一个函数被调用的时候,形参会被一个个压入被调函数的堆栈中,在函数调用结束以后再弹出。一个结构所包含的变量往往比较多,直接以一个结构为参数,压栈出栈的内容就会太多,不但占用堆栈空间,而且影响代码执行效率,如果使用不当还可能导致堆栈的溢出。如果使用结构的指针作为参数,因为指针的长度是固定不变的,结构的大小就不会影响代码执行的效率,也不会过多地占用堆栈空间。

〖建议7-1-1〗避免函数有太多的参数,参数个数尽量控制在5 个以内。

说明:如果参数太多,在使用时容易将参数类型或顺序搞错,而且调用的时候也不方便。如果参数的确比较多,而且输入的参数相互之间的关系比较紧密,不妨把这些参数定义成一个结构,然后把结构的指针当成参数输入。

〖建议7-1-2〗参数的顺序要合理。

说明:参数的顺序要遵循程序员的习惯。如输入参数放在前面,输出参数放在后面等。

正例:

int RelRadioChan(const T_RelRadioChanReq *ptReq,

T_RelRadioChanAck *ptAck);

6.7.2 返回值

【规则7-2-1】除构造和析构函数外,不要省略返回值的类型,如果函数没有返回值,那么应声明为void 类型。

【规则7-2-2】对于有返回值的函数,每一个分支都必须有返回值。

说明:为了保证对被调用函数返回值的判断,有返回值的函数中的每一个退出点都需要有返回值。

〖建议7-2-1〗如果返回值表示函数运行是否正常,规定0 为正常退出,不同非0 值标识不同异常退出。避免使用TRUE 或FALSE 作为返回值。

正例:

int SubFunction(void);

39

编程规范(C/C++)

反例:

BOOLEAN SubFunction(void);

6.7.3 内部实现

函数体的实现中,不但要仔细检查入口参数的有效性和精心设计返回值,还要保证函数的功能单一,具有很高的功能内聚性,尽量减少函数之间的耦合,方便调试和维护。

【规则7-3-1】对输入参数的正确性和有效性进行检查。

说明:很多程序错误是由非法参数引起的,我们应该充分理解并正确处理来防止此类错误。

【规则7-3-2】防止将函数的参数作为工作变量。

说明:将函数的参数作为工作变量,有可能错误地改变参数内容,所以很危险。对必须改变的参数,最好先用局部变量代之,最后再将该局部变量的内容赋给该参数。

正例:

void SumData(int iNum, int *piData, int *piSum ) {

int iCount ;

int iSumTmp; // 存储“和”的临时变量 iSumTmp = 0;

for (iCount = 0; iCount < iNum; iCount++) {

iSumTmp += piData[iCount]; }

*piSum = iSumTmp; }

反例:

void SumData(int iNum, int *piData, int *piSum ) {

int iCount; *piSum = 0;

40

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

编程规范(C/C++) 〖建议6-3〗如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面。 说明:下面两个示例中,反例比正例多执行了NUM -1 次逻辑判断。并且由于前者总要进行逻辑判断,使得编译器不能对循环进行优化处理,降低了效率。如果NUM 非常大,最好采用正例的写法,可以提高效率。 const int NUM = 100000; 正例: if (bCondition) { for (i = 0; i < NUM; i++) { DoSomething(); } } else { for (i = 0; i < NUM; i++) { D

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com