开发管理之代码编码规范

合集下载

编码规范1

编码规范1

盛世开天地产有限公司项目开发命名规则(第二小组)一编码规范目的为了统一软件开发设计过程的编程规范,使网站开发人员能很方便的理解每个目录,变量,控件,类,方法的意义;保证编写出的程序都符合相同的规范,保证一致性、统一性而建立的程序编码规范。

编码规范和约定必须能明显改善代码可读性,并有助于代码管理、分类范围适用于企业所有基于.NET平台的软件开发工作。

二编码规范概述:2.1 概述a 注释要求用汉语表示。

b 注释中,标明对象的完整的名称及其用途,但应避免对代码过于详细的描述。

c 每行注释的长度控制在50个字之内。

d 将注释与注释分隔符用一个空格分开。

e 不允许给注释加外框。

f 编码的同时书写注释,不要在编码完以后再补注释。

g 重要变量必须有注释,说明类型和用途。

h 变量注释和变量在同一行,所有注释必须对齐,与变量分开至少四个“空格”键。

i 典型算法必须有注释,可以简短一些。

j 在循环和逻辑分支地方的上行必须就近书写注释。

k 程序段或语句的注释在程序段或语句的上一行l 在代码交付之前,必须删掉临时的或无关的注释。

m 每行的代码应在100个字符以内,以便于阅读。

2.2 自建代码文件注释a) 数据库存储过程注释多行注释:/***************************************************************************** *创建时间:*作者:*功能:******************************************************************************/ 单行注释://2.3模块(类)注释模块开始必须以以下形式书写模块注释:///<summary>///Module ID:<模块编号,可以引用系统设计中的模块编号>///Depiction:<对此类的描述,可以引用系统设计中的描述>///Author:作者中文名///Create Date:<模块创建日期,格式:YYYY-MM-DD> ///</summary>2.4 在类的方法声明前必须以以下格式编写注释/// <summary>/// depiction:<对该方法的说明>/// </summary>/// <param name="<参数名称>"><参数说明></param>/// <returns>///<对方法返回值的说明,该说明必须明确说明返回的值代表什么含义> /// </returns>///Writer:作者中文名///Create Date:<方法创建日期,格式:YYYY-MM-DD>2.5代码间注释代码间注释分为单行注释和多行注释://<单行注释>/*多行注释1多行注释2多行注释3*/三命名总体规则名字应该能够标识事物的特性。

代码开发规范

代码开发规范

市民融合服务云平台代码开发规范V0.1修订记录1.引言1.1编写目的编写本文档主要目的是:使市民融合服务平台能以标准的、规范的方式设计和编码。

通过建立编码规范,以使每个开发人员养成良好的、统一的编码风格和习惯,提高程序的可靠性、可读性、可修改性、可维护性和一致性,保证软件产品的质量。

1.2适用范围市民融合服务平台相关人员1)架构师2)开发人员1. 工具使用规范2.1开发工具要求3. 文档规范1.项目编号、项目命名规范。

无论是项目编号,还是项目名称(项目简称、项目全称),每个项目都有一个统一的编号、简称、全称。

我们的项目名称为市民融合服务云平台,项目编号为(“待续”)2.文档编号、文档命名不规范。

每份文档都有一个编号,如某项目文档编号由WD_PA_PRO_YYMMDD_姓名拼写组成,其中WD表示公司名称,PA表示项目编号,PRO表示文档类型、此处指的是项目过程书,YYMMDD表示日期,姓名拼写表示姓名的拼音三个字母组成,不足三位的补“X”或“Y”。

而在使用过程中,有的不知道PA是表示项目编号,有的日期格式写成YYYY-MM_DD,有的随意增加其它内容。

文档命名通常由编号与文档类型名称组成,如项目过程书文档规范的命名是“WD_PA_PRO_YYMMDD_姓名拼写项目过程书”。

3.文档页眉、页脚规范页眉页脚使用公司的Logo ,它是公司的标志,也说明这一份文档不仅是代表项目组,也是代表公司的形象。

而页眉、页脚上的logo或标志应该是固定的,项目组不应该随意性修改。

4.文档的版本标识规范根据配置管理的定义,文档控制级别为中、低的文档是不需要进行版本控制的,比如那些一些临时性的、一次性的、中间性的文档,而文档控制级别较高的文档要进行版本管理。

在一些控制级别的文档中,如:用户需求说明书,概要设计说明书等,无论修改有多少次,没有留下版本记录。

有的文档标识有版本记录,一个版本对应一份文档,比如《用户需求说明书V1.0.doc》、《用户需求说明书V1.1.doc》等,这样维护文档容易出错。

项目代码管理制度

项目代码管理制度

项目代码管理制度1. 前言代码是企业项目开发和管理的核心,有效的代码管理可以提高项目的质量和效率,确保项目顺利进行。

为了规范和统一项目代码管理,订立本《项目代码管理制度》。

2. 适用范围本制度适用于企业全部项目的代码管理工作。

3. 代码版本管理3.1 代码仓库1.全部项目的代码必需存放在统一的代码仓库中,便于管理和协作。

2.代码仓库采用分布式版本掌控系统,介绍使用Git。

3.每个项目都应有独立的代码仓库,确保代码的隔离和安全。

3.2 分支管理1.项目代码应以主干分支为基准,依照功能和需求创建相应的分支。

2.分支命名规范为“feature/功能名称”或“bugfix/修复名称”,保持清楚易懂。

3.开发人员在本身的分支上完成相应的开发工作,并定期合并主干分支的更新。

3.3 提交规范1.全部代码提交必需包含有心义的提交信息,清楚描述所做的修改或添加。

2.提交信息应使用英文书写,简明扼要,并使用动词开头,例如“Add feature”,“Fix bug”。

3.4 代码审查1.全部代码提交必需经过审查,确保代码质量和规范。

2.代码审查人员应具备相关技术本领,并对项目需求和开发规范有清楚的理解。

3.审查结果应及时反馈给开发人员,并协商解决潜在问题。

3.5 版本发布1.版本发布前必需进行全面的测试,确保系统的质量和稳定性。

2.版本发布前应将全部相关的分支合并到主干分支,确保代码的完整性和全都性。

3.版本发布必需记录相应的版本信息,包含版本号、发布日期和重要更新内容。

4. 代码规范4.1 命名规范1.变量、函数和类等命名应具有描述性,遵从驼峰命名法。

2.避开使用含糊不清的缩写和简写,提高代码的可读性和可维护性。

4.2 注释规范1.对于多而杂的逻辑和算法,必需添加充分的注释,解释其思路和实现方式。

2.对于紧要的函数和类,应供应简要的描述,说明其用途和参数说明。

4.3 代码风格1.代码必需遵从统一的编码风格,包含缩进、空格、换行等。

系统代码管理规范

系统代码管理规范

系统代码管理规范在配置管理程序文件中,产品/项目的系统代码是作为配置项整体处理的,系统代码在开发过程中的管理依据本规范执行角色:组内代码管理员:每个产品开发组设置本组代码管理员总体代码管理员:集成产品开发,须明确指定代码管理员负责管理整个集成产品的代码配置管理员:开发管理部为各产品组设置的专职SCM人员公司成果管理员:公司专职成果管理员组内代码管理员从编码阶段开始执行代码管理职责●设置组内代码服务器人员权限。

●负责组内代码环境管理,保证组内开发环境、测试环境与总体的一致性。

●从单元测试开始,使用适当工具负责联编本组代码,进行代码版本化管理。

●保证本组代码安全,定期备份且在不同地点保存两份备份。

●进入联调测试后,需要定期向上一级的代码管理员(总体代码管理员)提交代码和执行程序。

每次提交代码需同时提交《代码提交说明表》。

●产品发版前提交《源程序成果提交说明书》。

●如果需要组内制作安装盘,则要提交安装程序。

总体代码管理员从联调测试阶段开始履行代码管理职责●负责整体代码环境管理;负责管理产品开发工具。

●接收各组内代码管理员提交的代码和执行文件,使用适当工具管理代码,第一次接收要总体联编,以后提交检查与《代码提交说明表》的一致性。

●负责部署或注册联调和集成测试环境。

●保证整个产品代码安全,定期备份且在不同地点保存两份备份。

●产品通过发版验收后向配置管理员提交代码和安装程序。

●定期检查各开发小组的开发编译环境是否符合总体设计要求。

●如果是单产品,因没有总体代码管理员,由组内代码管理员履行总体代码管理员的职责。

配置管理员●产品通过发版验收后把验证没有问题代码和安装程序纳入基线库。

●按期发布代码提交说明表。

●产品通过发版验收后向公司成果管理员移交成果(产品创建记录、代码、安装程序、相关文档等)。

公司成果管理员●接收公司配置管理员移交的成果。

●根据移交清单检查成果与移交清单的一致性,与公司规定的一致性。

●将代码和安装程序刻盘保存,检查提交文件与刻录文件的一致性。

软件安全开发编码规范

软件安全开发编码规范

软件平安开发编码规1.代码编写1)开发人员应保证工程中不存在无用的资源〔如代码、图片文件等〕。

2)代码中每个类名上的注释必须留下创立者和修改者的名字。

3)每个需要import的类都应使用一行import声明,不得使用import ***.*。

4)System.out.println()仅在调试时使用,正式代码里不应出现。

5)开发人员编写代码时应遵循以下命名规则:●Package 名称应该都是由一组小写字母组成;●Class 名称中的每个单词的首字母必须大写;●Static Final 变量的名称全用大写,并且名称后加注释;●参数的名称必须和变量的命名规一致;●使用有意义的参数命名,如果可能的话,使用和要赋值的字段一样的名称。

6)代码应该用uni*的格式,而不是windows的。

7)e*it 除了在 main 中可以被调用外,其他的地方不应被调用。

8)代码中应尽量使用interfaces,不要使用abstract类。

9)在需要换行的情况下,尽量使用 println 来代替在字符串中使用的"\n"。

10)涉及HTML的文档,尽量使用*HTML1.0 transitional文件类型,其中所有HTML标签都应关闭。

11)在HTML、JavaScript、*ML代码中,缩进应为两个空格,不得使用Tab。

12)HTML标签的name和id属性的命名方式应与Java变量名一样。

13)在需要经常创立开销较大的对象时,开发人员应考虑使用对象池。

14)在进展log的获取时开发人员应尽量使用is***Enabled。

15)log的生成环境上尽量防止输出文件名和行号。

16)产品中不要包含后门代码,隔离系统中的后门代码,确保其不能出现在产品中。

作为一种特殊的调试代码,后门访问代码是为了使开发者和测试工程师访问一局部终端用户不能访问的程序代码。

但是,如果后门代码被留到产品中,对攻击者来说,它就是一条不需要通过正常平安手段来攻陷系统的通路。

源代码管理制度规范

源代码管理制度规范

源代码管理制度源代码管理制度一、目的与范围本制度旨在规范公司内部源代码管理流程,提高代码质量和团队协作效率,降低软件开发风险。

本制度适用于公司内部所有软件开发项目的源代码管理。

二、编码规范1.缩进风格:采用4个空格的缩进风格,不使用制表符。

2.命名规范:变量名和函数名应采用小写字母和下划线组合的方式,避免使用中划线连接单词。

变量名应具有描述性,函数名应具有单一职责。

3.注释规范:注释应简洁明了,清晰易懂。

注释内容包括函数功能、参数说明、返回值说明等。

同时,代码中应避免出现无注释的情况。

4.代码风格:代码应简洁明了,避免冗余和复杂的嵌套结构。

适当采用模块化和面向对象的设计方法,提高代码的可读性和可维护性。

5.文件命名规范:源代码文件名应采用小写字母和下划线组合的方式,文件扩展名以.java、.py、.js等编程语言为后缀。

三、代码审查1.审查目的:代码审查的目的是发现代码中的错误、漏洞和不符合规范的编码行为,提高代码质量和安全性。

2.审查流程:开发人员提交代码后,由项目经理或资深开发人员进行代码审查。

审查包括代码逻辑、语法、注释等方面,并填写审查记录表。

3.审查标准:审查标准包括代码是否符合编码规范、是否符合设计文档要求、是否存在潜在的安全风险等。

4.不合格情况处理:对于不符合审查标准的代码,审查人员应提出整改意见,并要求开发人员限期修改。

同时,审查人员应对整改情况进行跟踪和验证。

四、版本控制1.版本控制概念:版本控制是一种对软件产品的每个版本进行控制和管理的技术手段,旨在确保软件产品的完整性和可追溯性。

2.版本控制原理:版本控制基于“版本流”的概念,将软件产品的每个版本都视为一个独立的对象,并通过版本控制系统(Version Control System,VCS)进行管理和控制。

3.版本控制实现方法:公司采用Git作为版本控制系统,实现代码的分布式管理和协作。

开发人员将代码提交到各自的分支中,通过合并请求(Pull Request)将代码合并到主分支(master)或开发分支(dev)。

软件工程中的编码规范与开发流程

软件工程中的编码规范与开发流程软件工程是一门涵盖众多领域的学科,其中之一便是编码规范与开发流程。

这两个方面是保证软件质量和可维护性的关键因素,也是软件工程师需要注意的重要内容。

本文将对编码规范与开发流程进行详细阐述,并且着重强调某些常见的错误和注意事项,供读者参考。

编码规范编码规范是软件开发中编写高质量代码的基础。

一个好的编码规范可以使代码更易于理解和维护,提高开发效率和代码质量。

以下是一些推荐的编码规范:1. 命名规范命名是代码中最基本也最重要的元素之一。

命名应该尽可能地清晰,有意义,并且符合一定的约定。

Java中的类名应该以大写字母开头,方法名和变量名应该以小写字母开头。

变量的命名应该尽量具体,不要使用无意义的简写。

2. 缩进规范缩进是让代码易于阅读的一个必要因素。

在缩进时,应该使用空格而不是制表符,缩进的数量应该是一致的。

Java类的每个代码块应该缩进4个空格,子代码块应该再次缩进4个空格,以此类推。

3. 注释规范注释是重要的代码文档,可以使其他人更容易理解代码和维护它。

注释应该清晰、简明,并且不应该涉及到底层代码的实现细节。

Java中的注释用//或者/* */均可,//表示单行注释,/* */表示多行注释。

开发流程软件开发流程是确保软件成功交付的关键因素。

良好的开发流程可以使软件工程师更好地管理时间、资源和工作质量。

以下是一些常用的软件开发流程:1. 敏捷开发敏捷开发是一种快速开发并且不断反馈和修正的软件开发方法。

它的基本原则是尽早交付可用软件,同时减少浪费。

敏捷开发可以帮助开发团队更好地适应变化,并且不断地改进产品。

2. 瀑布开发瀑布开发是一种传统的线性开发流程。

它分为分析、设计、编码、测试和维护五个阶段。

这种开发流程通常需要严格的计划和管理,同时也需要极高的要求和精度。

瀑布开发适合于小型、固定需求的项目。

3. DevOpsDevOps是一种跨部门的协作,它将开发和运维人员紧密结合在一起,借助自动化工具和流程来提高软件开发和交付的质量和速度。

code管理法则-解释说明

code管理法则-概述说明以及解释1.引言1.1 概述概述部分的内容可以是:在现代软件开发中,代码的管理和维护是一个至关重要的任务。

好的代码管理可以提高代码的可读性、可维护性和可扩展性,从而提高开发效率和代码质量。

本文将介绍一些重要的代码管理法则,包括代码规范、代码版本管理和代码文档管理。

代码规范是指制定一套统一的编码规则和标准,以保证团队成员之间的代码风格一致。

通过遵循代码规范,可以减少代码错误和混乱,增加代码可读性,方便团队合作和代码维护。

我们将介绍一些常见的代码规范准则,并提供一些实用的工具和技巧来帮助团队成员遵循代码规范。

代码版本管理是指对代码进行版本控制、追踪和管理。

通过使用版本管理工具,团队成员可以方便地协同开发、合并代码、回退版本等。

我们将介绍一些流行的代码版本管理工具,如Git和SVN,以及一些常用的版本管理实践和技巧。

代码文档管理是指对代码的说明文档进行管理和维护。

好的代码文档可以帮助开发人员了解代码的功能和设计思路,提高代码的可维护性。

我们将介绍一些编写代码文档的技巧和工具,以及一些常用的代码文档模板和规范。

通过本文的介绍,读者将了解到代码管理的重要性和相关的管理法则。

同时,我们也将探讨未来代码管理的发展方向,并总结出一些关键观点。

相信本文对于开发人员和团队管理者来说都将是一个有价值的参考资料。

1.2 文章结构文章结构部分的内容应包括本文的整体安排和组织方式。

可以从以下几个方面进行阐述:首先,介绍文章的整体结构,指明文章的章节划分和主要内容。

其次,说明每个章节的具体内容和目的。

第一章引言部分包括概述、文章结构、目的和总结。

概述部分将简要介绍本文所要探讨的内容和重要性。

文章结构部分将介绍文章的整体安排和章节划分。

目的部分将说明本文的目标和意义。

总结部分将对全文进行概括和总结。

第二章正文部分包括代码规范、代码版本管理和代码文档管理。

代码规范部分将介绍在编写代码时应遵循的规范和准则,包括命名规范、缩进规范等。

软件开发遵循的标准

软件开发遵循的标准
首先,软件开发需要遵循的标准之一是编码规范。

编码规范是指在编写代码时需要遵循的一系列规则和约定。

这些规则可以涵盖代码的命名规范、缩进规范、注释规范等。

遵循编码规范可以使代码更加清晰易懂,降低维护成本,提高代码的可读性和可维护性。

其次,软件开发还需要遵循设计规范。

设计规范是指在软件设计阶段需要遵循的一系列规则和原则。

良好的设计规范可以确保软件具有良好的架构和设计,提高软件的可扩展性和可维护性。

同时,设计规范也可以帮助开发团队在设计阶段更好地把控软件的质量和性能。

另外,软件开发还需要遵循测试规范。

测试规范是指在软件测试阶段需要遵循的一系列规则和流程。

遵循测试规范可以确保软件经过充分的测试,保证软件的质量和稳定性。

同时,测试规范也可以帮助开发团队更好地发现和修复软件中的缺陷和问题。

此外,软件开发还需要遵循文档规范。

文档规范是指在软件开发过程中需要编写和管理的一系列文档。

良好的文档规范可以帮助开发团队更好地记录和管理软件开发过程中的相关信息,提高团队协作效率,降低沟通成本。

总的来说,软件开发需要遵循一系列标准和规范,包括编码规范、设计规范、测试规范和文档规范等。

遵循这些标准和规范可以帮助开发团队提高软件的质量和稳定性,降低开发和维护成本,提高开发效率。

因此,作为软件开发人员,我们应该严格遵循这些标准和规范,确保软件开发过程的顺利进行和软件质量的提高。

C语言中的代码规范和规范检查工具

C语言中的代码规范和规范检查工具编程是一门需要高度的准确性和规范性的艺术。

在C语言编程中,代码规范和规范检查工具是确保代码质量和可维护性的重要组成部分。

遵循代码规范可以提高代码的可读性、可维护性和可移植性,同时也有助于团队协作和项目管理。

本文将介绍C语言中常用的代码规范以及一些常见的规范检查工具。

一、代码规范1. 编码风格编码风格是代码规范的基础,它主要指定了如何组织代码的结构、如何命名变量和函数、如何使用注释等。

编码风格的一致性可以使代码易于阅读和理解,也便于团队之间的合作。

在C语言中,有多种编码风格可供选择,例如K&R风格、ANSI风格和GNU风格等。

2. 命名规范良好的命名规范可以使代码更具可读性和可维护性。

在C语言中,通常使用驼峰式命名法或下划线命名法。

变量名和函数名应具有描述性,避免使用过于简单或过于复杂的命名。

另外,对于常量和宏定义,一般使用全大写字母来命名。

3. 注释规范注释是代码中的重要部分,可以提供关键信息和解释,方便他人理解和修改代码。

在C语言中,注释主要分为单行注释和多行注释。

良好的注释应该准确地描述代码的功能、输入和输出。

另外,还应注意及时更新注释,保持它们与实际代码的一致性。

二、规范检查工具1. lintlint是C语言中最早的一种规范检查工具,它可以对源代码进行静态分析,找出潜在的问题和代码不规范之处。

lint工具可以检查变量的声明和使用、函数返回值的检查、潜在的内存泄漏、未使用的变量等。

lint工具需要使用特定的选项和配置文件来指定规范。

2. clang-formatclang-format是一个由Clang项目提供的代码格式化工具,可以根据配置文件自动格式化C语言代码。

它支持多种编码风格,如K&R风格、ANSI风格和Google风格等。

clang-format可以统一代码的风格,减少人为错误,提高代码的可读性和可维护性。

3. cppcheckcppcheck是一个功能强大的静态代码分析工具,用于检查C语言代码中的潜在错误和不规范的代码。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1. 程序版式 1.1. 对齐 1.1.1. 程序块要采用缩进风格编写,缩进的空格数为4个。使用VC提供的Tab键对齐。

1.1.2. “{”和“}”应独占一行并且位于同一列,同时引用他们的语句对齐 1.1.3. {}之内的代码块在“{”右边数格外左对齐 例: 正确 错误 void Function(int x) { …

1.1.4. ,“;”,“)”向前紧跟 1.1.5. “,”后要留空格,“”;之后如果不是一行的结束,后面要留空格 1.1.6. 赋值操作符,比较,算术,逻辑,第二元操作符前后加空格 1.1.7. 一元操作符!、~、++、--、—等前后不加空格 1.1.8. 像[]、“.”、—>等前后不加空格 例: void Func1(int x, int y, int z);

Function(); b->Function();

1.1.1. 从左至右 ! ~ ++ -- (类型) sizeof + - * & 从右至左

* / % 从左至右 + - 从左至右 << >> 从左至右 < <= > >= 从左至右 == != 从左至右 & 从左至右 ^ 从左至右 | 从左至右 && 从左至右 || 从右至左 : 从右至左 = += -= *= /= %= &= ^= |= <<= >>= 从左至右

1.1.2. if 语句 1.1.2.1. 布尔变量与零值比较时,不可将布尔变量直接与TRUE、FALSE或者1、0进行比较 假设布尔变量名字为flag,它与零值比较的标准if语句如下: if (flag) 1.1.3. 中,不需要对外公开的常量放在定义文件(*.cpp)的头部 1.1.4. 不能在类中初始化const常量,只能通过枚举常量来解决 例: 错误: class A { const int SIZE=100; (错误) int array[SIZE]; } 正确: class A {… enum { SIZE1 = 100, SIZE2 = 200}; // 枚举常量 int array1[SIZE1]; int array2[SIZE2]; };

1.2. 函数 1.2.1. 参数规则 1.2.1.1. 参数书写要完整,不能只写类型,不写参数名,如果函数没有参数,用void填充 例如: void SetValue(int width, int height); // 良好的风格 void SetValue(int, int); // 不良的风格 float GetValue(void); // 良好的风格 float GetValue(); // 不良的风格

1.2.1.2. 如果参数是指针,且仅作输入用,则应在类型前加const,以免指针在函数体内被意外修改;一般地,应将目的参数放在前面,源参数放在后面 例: void StrngCopy(char *strlDestintion, const har *StrSource) 1.2.1.3. 如果参数以值传递的方式传递对象,则宜改用“const &”方法传递,能提高效率

1.2.1.4. 避免函数有太多的参数,参数个数应尽量控制在5个以内 1.2.1.5. 尽量不要使用类型和数目不确定的参数 例: int printf(const cha*format[, argument]…); 1.2.1.6. 对于内置类型参数要传值 1.2.1.7. 需要传指针不传引用的情形 a)内部需要用NULL状态(引用没有NULL状态) b)若参数是被new出来的,是将在函数内被释放

1.2.2. 返回值规则 1.2.2.1. 函数的输出值结果用输出参数(一般为指针)获得,状态用return返回

1.2.2.2. 如果返回一个对象,一般用引用传递,但有的情况下必须用值传递 例如: class String { … // 赋值函数 String & operate=(const String &other); // 相加函数,如果没有friend修饰则只许有一个右侧参数 friend String operate+( const String &s1, const String &s2); private: char *m_data; }

String的赋值函数operate = 的实现如下: String & String::operate=(const String &other) { if (this == &other) { return *this; }

delete m_data; m_data = new char[strlen+1]; strcpy(m_data, ;

return *this; // 返回的是 *this的引用,无需拷贝过程 }

对于赋值函数,应当用“引用传递”的方式返回String对象。如果用“值传递”的方式,虽然功能仍然正确,但由于return语句要把 *this拷贝到保存返回值的外部存储单元之中,增加了不必要的开销,降低了赋值函数的效率。例如: String a,b,c; … a = b; // 如果用“值传递”,将产生一次 *this 拷贝 a = b = c; // 如果用“值传递”,将产生两次 *this 拷贝 String的相加函数operate + 的实现如下: String operate+(const String &s1, const String &s2) { String temp; delete ; // 是仅含‘\0’的字符串 = new char[strlen + strlen +1]; strcpy, ; strcat, ;

return temp; }

对于相加函数,应当用“值传递”的方式返回String对象。如果改用“引用传递”,那么函数返回值是一个指向局部对象temp的“引用”。由于temp在函数结束时被自动销毁,将导致返回的“引用”无效。例如: c = a + b; 此时 a + b 并不返回期望值,c什么也得不到,流下了隐患。

1.2.2.3. 尽量保持函数只有唯一出口 1.2.2.4. 若函数返回状态,尝试用枚举作类型 1.2.2.5. 当函数返回引用或指针时,用文字描述其有效性 1.2.2.6. 禁止成员函数返回成员的引用或指针 1.2.3. 函数内部规则 1.2.3.1. 在函数体的“入口处”,对参数的有效性进行检查,应正确使用断言(assert),断言assert是仅在Debug版本起作用的宏,它用于检查“不应该”发生的情况 例: void *memcpy(void *pvTo, const void *pvFrom, size_t size) { assert((pvTo != NULL) && (pvFrom != NULL)); // 使用断言 byte *pbTo = (byte *) pvTo; // 防止改变pvTo的地址 byte *pbFrom = (byte *) pvFrom; // 防止改变pvFrom的地址 while(size -- > 0 ) *pbTo ++ = *pbFrom ++ ; return pvTo; }

1.2.3.2. 在函数的“出口处”,应对return语句的正确性和效率进行检查 1.2.3.3. return语句不可返回指向“找内存”(内部变量)的指针或引用,因为该内存在函数体结束时被自动销毁 1.2.3.4. 要搞清楚返回的究竟是值、指针,还是引用 1.2.3.5. 如果函数返回值是一个对象,要考虑return语句的效率 1.2.4. 通用规则 1.2.4.1. 函数的功能要单一,不要设计多用途函数

1.2.4.2. 函数体规模要小,尽量控制在100行代码以内,不包括注释和空格行 1.2.4.3. 尽量避免函数带有记忆功能,相同的输入应当产生相同的输出(不用static变量) 示例:如下函数,其返回值(即功能)是不可预测的。 unsigned int integer_sum( unsigned int base ) { unsigned int index; static unsigned int sum = 0; // 注意,是static类型的。 // 若改为auto类型,则函数即变为可预测。 for (index = 1; index <= base; index++) { sum += index; } return sum; }

1.2.4.4. 用于出错处理的返回值一定要清楚 1.2.4.5. 引用的规则 a)引用被创建时同时被初始化 b)不能有NULL引用,引用必须与合法的存储单元关联 c)一旦引用被初始化,就不能改变引用的关系 d)引用的功能主要是传递参数和返回值

C++语言中,函数的参数和返回值的传递方式有三种:值传递、指针传递和引用传递。 以下是“值传递”的示例程序。由于Func1函数体内的x是外部变量n的一份拷贝,改变x的值不会影响n, 所以n的值仍然是0。 void Func1(int x) { x = x + 10; } … int n = 0; Func1(n); cout << “n = ” << n << endl; // n = 0

以下是“指针传递”的示例程序。由于Func2函数体内的x是指向外部变量n的指针,改变该指针的内容将导致n的值改变,所以n的值成为10。

相关文档
最新文档