软件开发代码规范C版
C语言代码编程规范

2.1 排版
• 2.1.1空格的使用:
在两个以上的关键字、变量、常量进行对等操作时,它 们之间的操作符之前、之后或者前后要加空格;进行非对等 操作时,如果是关系密切的立即操作符(如->),后不应 加空格. – 逗号、分号只在后面加空格 – 比较操作符, 赋值操作符,算术操作符,逻辑操作符,位 域操作符等双目操作符的前后加空格 – "!"、"~"、"++"、"--"、"&"(地址运算符)等单目操作符前 后不加空格 – “->”、“.”前后不加空格 – if、for、while、switch等与后面的括号间应加空格,使if 等关键字更为突出、明显。
说明:以免用不同的编辑器阅读程序时,因TAB键所设 置的空格数目不同而造成程序布局不整齐。
• 2.1.13 程序块的分界符(如大括号‘{‟和‘}‟)应各独 占一行并且位于同一列,同时与引用它们的语句左对 齐。 在函数体的开始、类的定义、结构的定义、枚举的定 义以及if、for、do、while、switch、case语句中的程 序都要采用如上的缩进方式。
word = (high << 8) | low if ((a | b) && (a & c)) if ((a | b)< (c & d))
(1) (2) (3)
由于: 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)造成判断条件出错
C语言中的安全性代码编码规范与最佳实践

C语言中的安全性代码编码规范与最佳实践在软件开发领域中,安全性是一个至关重要的因素。
为了确保C语言代码的安全性,开发人员需要遵循一定的编码规范和最佳实践。
本文将介绍一些C语言中相关的安全性代码编码规范与最佳实践,以帮助开发人员编写更加安全的代码。
1. 输入验证在C语言中,输入验证是确保代码安全性的关键步骤之一。
开发人员应该始终验证用户输入,以避免潜在的安全漏洞。
以下是一些常见的输入验证措施:1.1 长度验证:验证用户输入的长度是否符合预期,防止缓冲区溢出的风险。
1.2 类型验证:确保用户输入的数据类型与预期类型相匹配,防止类型转换错误。
1.3 格式验证:针对特定的输入数据格式进行验证,例如邮箱、电话号码等。
2. 内存安全在C语言中,内存安全是一个常见的安全隐患。
通过以下措施,可以减少内存安全问题的发生:2.1 使用安全的库函数:C语言提供了一系列安全的库函数,如strcpy_s和strcat_s等,用于替代不安全的函数,如strcpy和strcat,以减少缓冲区溢出的风险。
2.2 动态内存分配与释放:在使用动态内存分配函数(如malloc和free)时,务必注意正确释放内存,防止内存泄漏。
3. 错误处理与日志记录良好的错误处理和日志记录机制对于代码的安全性至关重要。
以下是一些建议:3.1 错误码检查:在调用可能返回错误码的函数后,应该始终检查其返回值,以及时处理异常情况。
3.2 异常处理:使用try-catch块或其他异常处理机制来捕获和处理可能发生的异常,以避免程序崩溃或信息泄漏。
3.3 日志记录:记录错误、警告和其他重要事件,以便及时排查问题并提供追踪。
4. 密码存储与加密在处理用户密码等敏感信息时,开发人员应特别注意其存储和传输的安全性。
以下是一些建议:4.1 密码加密:使用安全的加密算法对敏感信息进行加密,如SHA-256或AES。
4.2 密码哈希:对密码进行哈希处理,并采用适当的哈希算法,如bcrypt或PBKDF2,以防止密码泄露。
c语言代码规范

c语言代码规范C语言是一种通用的编程语言,广泛应用于嵌入式系统、操作系统、驱动程序以及各种应用程序的开发中。
为了提高代码的可读性、可维护性和可移植性,制定一套严格的代码规范是非常必要的。
1. 缩进与空格:- 使用4个空格进行缩进,不要使用Tab键。
- 在运算符两侧以及逗号后加上一个空格。
2. 命名规范:- 变量、函数和类型的命名采用小驼峰命名法,例如myVariable。
- 全局变量以g_开头,静态变量以s_开头。
- 宏定义全部大写,并用下划线分隔单词。
3. 函数定义:- 函数名应该能够描述函数的功能。
- 函数名应该以动词开头,使用小驼峰命名法。
- 函数的参数列表应该明确指明参数的类型和名称。
4. 注释:- 在每个函数之前添加简要的注释,说明函数的功能、参数和返回值。
- 在复杂的代码块中添加必要的注释,解释代码的逻辑和目的。
5. 头文件:- 头文件应该包含必要的宏定义、类型定义和函数声明,不要包含具体的函数实现。
- 头文件应该有相应的宏定义来防止多次包含。
6. 文件结构:- 文件应该按照功能模块进行组织,每个功能模块放在一个独立的文件中。
- 文件中的代码应该按照逻辑顺序进行排列,函数之间使用空行进行分隔。
7. 魔法数值:- 不要直接在代码中出现魔法数值,应该使用常量或者宏来表示。
- 大多数情况下,常量应该在文件的头部定义,并加上相应的注释。
8. 错误处理:- 对于可能出现错误的函数调用,应该检查返回值并进行相应的错误处理。
- 错误处理可以是返回特定的错误码或者抛出异常,但应该保持一致。
9. 括号和空行:- 括号应该与控制语句在同一行,并在括号内留出空格。
- 在函数和控制语句之间应该使用适当的空行进行分隔,提高可读性。
10. 可移植性:- 不要使用与平台相关的特性或者语法。
- 使用标准的数据类型和函数接口,避免使用非标准扩展。
- 避免使用与编译器相关的优化选项。
以上是一些常用的C语言代码规范,可以根据具体的项目需求进行适当调整。
misrac2012规则

misrac2012规则MISRA C:2012规则概述引言MISRA C:2012规则是一套用于C语言编程的软件开发规范,旨在提高C语言代码的可靠性、可维护性和可移植性。
本文将详细介绍MISRA C:2012规则的主要内容和要求。
1. 规则1:源文件MISRA C:2012规则要求每个源文件应该是一个完整的、独立的模块,其内容应该尽可能简洁、清晰。
每个源文件应该包含一个独立的头文件,用于声明全局变量和函数原型。
2. 规则2:注释MISRA C:2012规则要求在代码中添加注释来解释代码的意图和功能。
注释应该清晰、简洁,并且应该放置在代码之前而不是代码之后。
3. 规则3:标识符命名MISRA C:2012规则要求标识符的命名应该具有描述性,并且应该遵循统一的命名风格。
标识符应该使用小写字母和下划线,不应该使用数字或特殊字符作为开头。
4. 规则4:变量声明MISRA C:2012规则要求所有变量在使用之前必须先声明。
变量的声明应该放置在函数的开头,并且应该尽量避免全局变量的使用。
5. 规则5:控制流MISRA C:2012规则要求控制流语句(如if语句和switch语句)必须有明确的结束条件,并且不允许出现没有意义的代码。
控制流语句的嵌套层数应该尽量减少,以提高代码的可读性。
6. 规则6:循环和迭代MISRA C:2012规则要求循环和迭代语句(如for循环和while循环)应该有明确的结束条件,并且循环变量的作用范围应该尽可能小。
7. 规则7:函数MISRA C:2012规则要求函数的参数和返回值应该有明确的类型和语义。
函数的参数应该尽量避免使用全局变量,并且函数的实现应该尽可能简洁、清晰。
8. 规则8:指针MISRA C:2012规则要求指针的使用应该谨慎,并且应该遵循一定的安全性规范。
指针的解引用操作应该在使用之前进行非空判断,以避免空指针引发的异常。
9. 规则9:内存管理MISRA C:2012规则要求在动态内存分配和释放过程中应该遵循一定的规范和约束,以避免内存泄漏和内存访问错误。
软件编程规范(MISRA_C)

软件编程规范目录一环境二语言扩展三文档四字符集五标识符六类型七常量八声明与定义九初始化十数值类型转换十一指针类型转换十二表达式十三控制语句表达式十四控制流十五 switch语句十六函数十七指针和数组十八结构与联合十九预处理指令二十标准库二十一运行时错误一环境规则1.1(强制):所有代码都必须遵照ISO 9899:1990 “Programming languages - C”,由ISO/IEC 9899/COR1:1995,ISO/IEC 9899/AMD1:1995,和ISO/IEC9899/COR2:1996 修订。
规则1.2(强制):不能有对未定义行为或未指定行为的依赖性。
这项规则要求任何对未定义行为或未指定行为的依赖,除非在其他规则中做了特殊说明,都应该避免。
如果其他某项规则中声明了某个特殊行为,那么就只有这项特定规则在其需要时给出背离性。
规则1.3(强制):多个编译器和/或语言只能在为语言/编译器/汇编器所适合的目标代码定义了通用接口标准时使用。
如果一个模块是以非C 语言实现的或是以不同的C 编译器编译的,那么必须要保证该模块能够正确地同其他模块集成。
C 语言行为的某些特征依赖于编译器,于是这些行为必须能够为使用的编译器所理解。
例如:栈的使用、参数的传递和数据值的存储方式(长度、排列、别名、覆盖,等等)。
规则1.4(强制):编译器/链接器要确保31 个有效字符和大小写敏感能被外部标识符支持。
ISO 标准要求外部标识符的头6 个字符是截然不同的。
然而由于大多数编译器/链接器允许至少31 个有效字符(如同内部标识符),因此对这样严格而并不具有帮助性的限制的适应性被认为是不必要的。
必须检查编译器/链接器具有这种特性,如果编译器/链接器不能满足这种限制,就使用编译器本身的约束。
规则1.5(建议):浮点应用应该适应于已定义的浮点标准浮点运算会带来许多问题,一些问题(而不是全部)可以通过适应已定义的标准来克服。
软件开发代码要求规范(C#版)

软件开发代码规(C#版)拟制: 日期:2007-2-13 审核: 日期:审核: 日期:批准: 日期:所有******** 修订纪录目录1、第一章命名规 (4)1.1、第一节总则 (4)1.2、第二节变量命名规 (4)1.2.2、控件命名规 (5)1.3、第三节常量命名规 (5)1.4、第四节命名空间、类、方法命名规 (5)1.5、第五节接口命名规 (6)1.6、第六节命名规小结 (6)2、第二章代码注释规 (6)2.1、第一节模块级注释规(命名空间、类等) (6)2.2、第二节方法级注释规 (7)2.2.1 、属性注释 (7)2.2.2 、方法注释 (7)2.3、第三节代码间注释规 (8)3、第三章编写规 (8)3.1、第一节格式规 (8)3.2、第二节编程规 (9)3.2.1 、程序结构要求 (9)3.2.2 、可读性要求 (9)3.2.3 、结构化要求 (10)3.2.4 、正确性与容错性要求 (10)3.2.5 、可重用性要求 (10)3.2.6 、interface使用注意事项 (11)3.2.8 、流程控制语句注意事项 (12)3.2.8 、其他应注意事项 (13)注:Pascal命名法则:即名称中所有单词的第一个字母大写其他字母使用小写形式。
Camel命名法则:即名称中第一个单词各个字母全部小写,其他部分遵循Pascal命名法则。
1、第一章命名规1.1、第一节总则1.本命名规则除特殊提及外统一使用Camel命名法则。
如:controlMenu2.命名时尽量不使用拼音,更不可使用拼音缩写(专有名词除外)。
3.如果使用品牌名称命名时其大小写尽量保持和品牌名称一致的样式。
如:LuX则命名时,不要写成LUX,或者Lux,而应该保持与原品牌名称风格一致使用LuX4.使用专有名词或英文缩写命名时采用大写形式。
如:CNNIC5.禁止使用仅区分大小写的方式命名。
如:Abc与abc仅用大写A来区分,这样写在类C系语言中不会出错,但是不利于系统的迁移1.2、第二节变量命名规1.2.1、CodeBehind部命名规1.公有字段/属性使用Pascal 命名规则,私有变量/保护变量/局部变量使用Camel命名规则,遵循动宾结构。
(完整word版)C++代码规范

C++代码规范目录1.介绍 (1)2.编码规范 (2)2.1文件结构 (2)2.1.1版权和版本的声明 (2)2.1.2头文件的结构 (2)2.1.3定义文件的结构 (3)2.1.4目录结构 (4)2.2结构化程序设计 (4)2.2.1功能模块抽取 (4)2.2.2功能模块编码原则 (5)2.2.3编程标准 (6)2.2.4源代码层次 (6)2.3命名约定 (7)2.3.1综述 (7)2.3.2变量命名 (8)2.3.3函数及数组的命名 (9)2.3.4结构类型命名 (10)2.3.5命名长度 (10)2.3.6Windows应用程序命名规则 (10)2.4程序规则 (12)2.4.1变量声明和定义 (12)2.4.2数组、字符串 (13)2.4.3函数声明和定义 (14)2.4.4语句 (16)2.5排版格式规则 (16)2.5.1源代码文件 (17)2.5.2空行 (17)2.5.3代码行 (17)2.5.4代码行内的空格 (18)2.5.5对齐 (19)2.5.6分行 (20)2.5.7表达式 (20)2.5.8函数 (22)2.5.9语句 (22)2.5.10变量、类型声明 (23)2.5.11修饰符的位置 (23)2.5.12类的版式 (24)2.6注释格式 (24)2.6.1介绍 (24)2.6.2注释基本规则 (25)2.6.3程序注释 (25)2.6.4模块注释 (26)2.6.5函数注释 (27)3.代码管理........................................................................................................ 错误!未定义书签。
3.1版本管理 (61)3.2代码更新 (61)本文的宗旨在于规范化源代码的编写,满足系统面向对象要求、可读性要求、正确性与容错性要求和可重用性要求。
C语言安全编码规范与最佳实践分享

C语言安全编码规范与最佳实践分享导言:在计算机软件开发过程中,安全编码规范和最佳实践对于保障系统的安全性和可靠性至关重要。
本文将分享一些关于C语言安全编码规范和最佳实践的经验和建议,帮助开发人员编写更健壮、安全的代码。
一、输入验证与数据转换1.1 预防缓冲区溢出C语言常常受到缓冲区溢出攻击的威胁。
开发人员应该采取以下措施来预防此类攻击:- 使用安全字符串函数,如`strncpy`和`strncat`,并且注意正确设置缓冲区的大小。
- 慎用易受攻击的函数,如`gets`和`scanf`,应该使用更安全的替代函数。
- 对于用户输入,尽量避免直接拷贝到固定大小的缓冲区,而是使用动态分配内存的方式。
1.2 验证输入数据的合法性任何外部输入都应该被严格验证,以防止不合法的输入导致系统漏洞。
特别需要注意的是:- 检查输入长度,并确保其符合预期范围。
- 对于需要整数的参数,需要验证其是否在有效范围内。
- 执行数据类型转换时,使用安全的转换函数,并进行错误处理。
二、内存管理和指针操作2.1 分配和释放内存在C语言中,内存管理是一个重要的问题。
以下是一些有助于提高安全性和可靠性的最佳实践:- 分配内存时,使用安全的内存分配函数(如`calloc`和`malloc`),并在使用后及时释放内存(使用`free`函数)。
- 当需要重新分配内存时,使用`realloc`函数,并确保执行错误处理。
- 防止内存泄漏,始终在不需要内存时释放它。
2.2 避免悬空指针和指针越界使用悬空指针或者越界指针可能引发各种未知错误,导致系统崩溃或者被利用。
以下是一些建议的措施:- 初始化指针,并在使用指针前对其进行有效性检查。
- 避免访问已经释放的内存。
- 在指针操作时,确保数组索引不越界。
三、错误处理和异常处理3.1 合理处理错误和异常在编写C代码时,错误和异常处理是非常重要的。
下面是一些关于错误处理和异常处理的最佳实践:- 使用错误码或者异常处理来标识和处理异常情况,而不是简单地忽略或者出现崩溃。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件开发代码规范(C#版)拟制:日期:2007-2-13审核:日期:审核:日期:批准:日期:版权所有 ********有限公司修订纪录目录注:Pascal命名法则:即名称中所有单词的第一个字母大写其他字母使用小写形式。
Camel命名法则:即名称中第一个单词各个字母全部小写,其他部分遵循Pascal命名法则。
1、第一章命名规范1.1、第一节总则1.本命名规则除特殊提及外统一使用Camel命名法则。
如:controlMenu2.命名时尽量不使用拼音,更不可使用拼音缩写(专有名词除外)。
3.如果使用品牌名称命名时其大小写尽量保持和品牌名称一致的样式。
如:LuX则命名时,不要写成LUX,或者Lux,而应该保持与原品牌名称风格一致使用LuX4.使用专有名词或英文缩写命名时采用大写形式。
如:CNNIC5.禁止使用仅区分大小写的方式命名。
如:Abc与abc仅用大写A来区分,这样写在类C系语言中不会出错,但是不利于系统的迁移、第二节变量命名规范1.2.1、CodeBehind内部命名规范1.公有字段/属性使用Pascal 命名规则,私有变量/保护变量/局部变量使用Camel命名规则,遵循动宾结构。
例:public class Hello{private string userName;private DateTime loginTime;private bool isOnline;public string UserName {get { return ; }}}2.即使对于可能仅出现在几个代码行中的生存期很短的变量,仍然使用意义描述性的名称。
仅对于短循环索引使用单字母变量名,如 i 或 j 3.在变量名中使用互补对,如 Min/Max、Begin/End 和 Open/Close。
4.当一个方法内部变量繁多的时候,可以使用Camel命名法则,其中第一个单词可以使用变量类型的缩写来说明以示区别。
例:string str Name;int int Age;object obj Person;1.2.2、控件命名规范1.控件命名使用控件缩写加名称的方式例:、第三节常量命名规范常量名也应当有一定的意义,格式为 NOUN 或 NOUN_VERB。
常量名均为大写,字之间用下划线分隔。
例:private const bool WEB_ENABLEPAGECACHE_DEFAULT= true;private const intWEB_PAGECACHEEXPIRESINSECONDS_DEFAULT = 3600;private const bool WEB_ENABLESSL_DEFAULT = false;注:变量名和常量名最多可以包含 255 个字符,但是,超过 25 到 30 个字符的名称比较笨拙。
此外,要想取一个有实际意义的名称,清楚地表达变量或常量的用途,25 或 30 个字符应当足够了。
、第四节命名空间、类、方法命名规范1.名字应该能够标识事物的特性。
2.名字尽量不使用缩写,除非它是众所周知的。
3.名字可以有两个或三个单词组成,但通常不应多于三个。
4.使用名词或名词短语命名类。
5.尽可能少用缩写。
6.不要使用下划线字符 (_)。
7.命名空间名称使用此格式:Snda + 项目名称 + 逻辑层名称例:namespace class FileStream{public void InPut(string para){}}}、第五节接口命名规范和类命名规范相同,唯一区别是接口在名字前加上大写“I”前缀例:interface IDBCommand;interface IButton;、第六节命名规范小结1、使用Pascal命名方式命名类、方法、属性和常量2、使用Camel命名方式命名局部变量和方法的参数3、接口使用Pascal命名方式,并且在前面添加“I”4、方法命名使用动宾结构,比如ShowDialog( )5、有返回值的方法命名应有单词来描述,比如GetObjectState( )6、避免使用带命名空间的类型,尽量用using关键字7、避免把using语句放到命名空间内8、控件命名使用控件缩写加名称的方式9、常量命名采用全部大写的形式,要想一个有实际意义的名称,清楚地表达常量的用途2、第二章代码注释规范、第一节模块级注释规范(命名空间、类等)模块须以以下形式书写模块注释:1.2.2.12.2.2Para3.2.1ET库函数和公共函数(无特殊情况不要使用外部方法调用Windows的核心动态链接库API)。
2.不要随意定义全局变量,尽量使用局部变量。
3.2.2 、可读性要求1.保持注释与代码完全一致。
2.去除无效的注释3.处理过程的每个阶段都有相关注释说明。
4.利用缩进来显示程序的逻辑结构,缩进量一致并以Tab键为单位,定义Tab为 4个空格。
5.循环、分支层次不要超过五层。
6.注释可以与语句在同一行,也可以在上行,视语句的长短而定。
7.一目了然的语句不加注释。
8.注释的作用范围可以为:定义、引用、条件分支以及一段代码。
9.去除IDE自动生成的注释,比如:10....11.private void Page_Load(object sender, EventArgs e) { 12..(删除这段注释)13.}3.2.3 、结构化要求1.禁止出现两条等价的支路。
2.除了在switch关键字的作用域内,禁止goto语句。
3.用 if 语句来强调只执行两组语句中的一组。
禁止 else goto 和else return。
4.用 case实现多路分支。
5.避免从循环引出多个出口。
6.函数只有一个出口。
7.尽量不使用条件赋值语句。
8.避免不必要的分支。
9.不要轻易用条件分支去替换逻辑表达式。
3.2.4 、正确性与容错性要求1.程序首先是正确,其次是优美。
2.无法证明你的程序没有错误,因此在编写完一段程序后,应先回头检查。
3.改一个错误时可能产生新的错误,因此在修改前首先考虑对其它程序的影响。
4.所有变量在调用前必须被初始化。
5.对所有的用户输入,必须进行合法性检查。
6.尽量不要比较浮点数的相等,7.如: * == ,不可靠,因为不同CPU的浮点运算能力是不同的8.程序与环境或状态发生关系时,必须主动去处理发生的意外事件,如文件能否逻辑锁定、打印机是否联机等,对于明确的错误,要有明确的容错代码提示用户,在这样不确定的场合都使用try throw catch。
9.单元测试也是编程的一部份,提交联调测试的程序必须通过单元测试。
10.尽量使用规范的容错语句.例:try{}catch{}finally{}3.2.5 、可重用性要求1.重复使用的完成相对独立功能的算法或代码应抽象为服务或类。
2.服务或类应考虑OO思想,减少外界联系,考虑独立性或封装性。
3.2.6 、interface使用注意事项1.避免一个接口中只有一个成员。
尽量使每个接口中包含3-5个成员。
接口中的成员不应该超过20个。
避免接口成员中包含事件。
2.推荐使用显式的接口实现。
3.2.7 、类使用注意事项1.避免方法的返回值是错误代码。
2.尽量定义自定义异常类。
当需要定义自定义的异常时:a) 自定义异常要继承于ApplicationException。
b) 提供自定义的序列化功能。
3.只对外公布必要的操作。
4.使程序集尽量为最小化代码(EXE客户程序)。
使用类库来替换包含的商务逻辑。
5.不要提供public的成员变量,使用属性代替他们。
6.避免在继承中使用new而使用override替换。
7.在不是sealed的类中总是将public 和 protected的方法标记成virtual的。
8.避免显式的转换,使用as操作符进行兼容类型的转换。
例:Dog dog = new GermanShepherd();GermanShepherd shepherd = dog as GermanShepherd;if (shepherd != null ){…}9.当类成员包括委托的时候在调用委托之前一定要检查它是否为null 例:public class MySource{public event EventHandler MyEvent;public void FireEvent(){EventHandler temp = MyEvent;if(temp != null ){temp(this,;}}}10.不要提供公共的事件成员变量,使用事件访问器替换这些变量。
例:public class MySource{MyDelegate m_SomeEvent ;public event MyDelegate SomeEvent{add{m_SomeEvent += value;}remove{m_SomeEvent -= value;}}}11.避免在结构里面提供方法。
建议使用参数化构造函数,可以重裁操作符。
12.类成员间调用请尽量使用this关键字。
13.除非你想重写子类中存在名称冲突的成员或者调用基类的构造函数否则不要使用base来访问基类的成员。
3.2.8 、流程控制语句注意事项1.即使if语句只有一句,也要将if语句的内容用大括号扩起来。
2.避免在条件语句中调用返回bool值的函数。
可以使用局部变量并检查这些局部变量。
例:bool IsEverythingOK(){…}//避免if (IsEverythingOK ()){…}//替换方案bool ok = IsEverythingOK();if (ok){…}3.总是使用基于零开始的数组。
4.在循环中总是显式的初始化引用类型的数组。
例:public class MyClass{}MyClass[] array = new MyClass[100];for(int index = 0; index < ; index++){array[index] = new MyClass();}5.除非在不完全的switch语句中否则不要使用goto语句。
3.2.8 、其他应注意事项1.避免将多个类放在一个文件里面。
2.一个文件应该只有一个命名空间,避免将多个命名空间放在同一个文件里面。
3.一个文件最好不要超过500行的代码(不包括机器产生的代码)。
4.避免方法中有超过5个参数的情况。
使用结构来传递多个参数。
5.每行代码不要超过80个字符。
6.不要手工的修改机器产生的代码。
如果需要编辑机器产生的代码,编辑格式和风格要符合该编码标准。
7.不要硬编码数字的值,总是使用构造函数设定其值或采用常数的方式。
8.只有是自然结构才能直接使用const,比如一个星期的天数。
9.避免在只读的变量上使用const。