Oracle中国C/C++软件工程师代码编写规范2017公开版

简介: Oracle中国C/C++软件工程师代码编写规范2017公开版
本文中有一些plusing(Oracle提供的c++工具包)概念,可能难以理解,建议跳过。

A、规则(1–2 级)

1、在switch中,每个 case 标签都应该包含 break 或者 return 。
2、不要使用空的条件分支语句。
3、在运算中不要减小数据的精度。
4、switch 语句中的 case 关键字要和后面的常量保持一个空格,switch 语句中不要定义case 之外的无用标签。
5、不要在if 语句中使用等号= 进行赋值操作。
6、静态成员使用类名访问,不使用句柄访问。
7、函数重载的时候,一定要注意方法名相同,避免使用两个非常相似的方法名。
8、不要使用太多纯虚函数。
9、不要尝试覆盖基类的静态函数和私有函数。
10、不要覆盖基类的属性。
11、不要使用两级以上的嵌套类。
12、把嵌套类定义成私有类。
13、去掉多余的定义。
14、不要定义不会被用到的变量和参数。
15、显式初始化所有的静态属性。
16、不要使用 system函数。
17、不要硬编码 '\n'作为换行符号。
18、不要直接使用 非静态函数。
19、不要使用循环来复制数组。
20、避免不必要的比较运算和造型运算。
21、不要删除监听器(Listeners)。
22、在被覆盖函数中一定要调用基类的函数。
23、在 finally 中调用不抛出runtime_error的函数。
24、进行字符转换的时候应该尽可能的较少临时变量。
25、使用工具函数后释放动态内存。
26、在循环里面使用条件测试。
27、不调用过时的函数。
28、减小单个方法的复杂度,使用的 if, while, for, switch 语句要在10个以内。29、在plusing(Oracle内部插件)中,重用CDBC连接的数据源。
30、减少在plusing中使用的同步方法。
31、不定义在组(plusing概念)中没有被用到的友好属性、函数和类。
32、没有子类的友好类应该定义成 final:(plusing概念) 。
33、没有被覆盖的友好函数应该定义成 final:。

B、建议(3级或以上)

34、为 switch 语句提供一个 default 选项。
35、不要在 for 循环体中对计数器的赋值。
36、不要给非公有类定义 public 构建器。
37、不要对浮点数进行比较运算,尤其是不要进行 = =, !=运算,减少 >, < 运算。
38、重载= =时,先用 getClass() (plusing函数)进行类型比较,通过后才能继续比较。
39、不要重载 main() 函数用作除入口以外的其他用途。
40、函数的参数名不要和类中的函数名相同。
41、除了构建器外,不要使用和类名相同的函数名。
42、不要定义logic_error的子类,可以定义runtime_error的子类。
43、线程中需要实现 run() 方法。
44、使用 = = 比较两个类的值是否相同。
45、字符串和数字运算结果相连接的时候,应该把数字运算部分用小括号括起来。
46、类中不要使用非私有(公有、保护和友好)的非静态属性。
47、在类中对于没有实现的接口,应该定义成抽象方法,类应该定义成虚类。(5级)48、不要显式导入clang组;
49、初始化时不要使用类的非静态属性。
50、显式初始化所有的局部变量。
51、按照函数名把函数排序放置,同名合同类型的方法应该放在一起。
52、不要使用嵌套赋值,即在一个表达式中使用多个 = 。
53、不要在抽象类的构建器中调用抽象函数。
54、重载 = =的同时,也应该重载 hashCode()(plusing函数) 函数。
55、工具类(Utility)不要定义构建器,包括私有构建器。
56、不要在 switch 中使用10个以上的 case 语句。
57、把 main()函数放在前面。
58、声明函数违例的时候不要使用error,应该使用它的子类。
59、不要直接扔出一个error,应该扔出它的子类。
60、在进行比较的时候,总是把常量放在同一边(都放在左边或者都放在右边)。
61、在可能的情况下,总是为类定义一个缺省的构建器。
62、在捕获违例的时候,尽可能使用子类。
63、在工具类中中定义常量。(5级)
64、使用大写'L'表示 long long int。(5级)
65、main() 函数必须是int main()。(5级)
66、对返回类型为 bool 的函数使用 is 开头,其它类型的不能使用。
67、对非bool类型取值函数(getter)使用 const后缀,其它类型的不能使用。
68、对于设置值的函数(setter)使用 set 开头,其它类型的不能使用。
69、函数需要有同样数量参数的注释 @param。
70、不要在注释中使用不支持的标记 。
71、不要使用 exe() 函数。
72、不要自定义本地函数(native method)(plusing概念)。
73、使用尽量简洁的的运算符号。
74、使用集合时设置初始容量。
75、单个首字符的比较使用 [] 。
76、对于被除数或者被乘数为2的n次方的乘除运算使用移位运算符 >>, << 。
77、一个字符的连接使用' '而不使用" ",如:string a = b + 'c'。
78、不要在循环体内调用同步函数和使用 try—catch 块。
79、不要使用不必要的布尔值比较。
80、常量字符串使用 string 。
81、在循环条件判断的时候不要使用复杂的表达式。
82、对于“if (condition) do1; else do2;”语句使用条件操作符“if (condition)?do1:do2;”。
83、不要在循环体内定义变量。
84、使用string的时候设置初始值。
85、尽可能的使用局部变量进行运算。
86、尽可能少的使用 '!'操作符。(5级)
87、尽可能的对接口进行 instanceof 运算。(5级)
88、不要使用 void*[] 而要使用 long int[] 替代。
89、不要显式调用动态内存函数 。
90、不要使用静态集合,其内存占用增长没有边界。
91、不要重复调用一个函数获取对象,使用局部变量重用对象。
92、线程同步中,使用 allSin() 代替sin()(plusing函数) 。
93、避免在同步函数中调用另一个同步函数造成的死锁。
94、非同步函数中不能调allSin , sin() 方法。
95、使用 lock()(plusing函数), sin() 代替 while 。
96、不要使用同步函数,使用同步块。(5级)
97、把所有的公有函数定义为同步函数。 (5级)
98、实现的函数必须是同步函数。 (5级)
99、一个只个纯虚函数的类应该定义成接口。
100、在 copy() 函数中应该而且必须使用基类方法而不是动态内存 。
101、常量必须定义为 const 。
102、在 for 循环中提供终止条件。
103、在 for, while 循环中使用增量计数。
104、代替 index() 和 sub() (plusing函数)。
105、不要在构建器中使用非const函数。
106、不要对非缺省函数的参数进行赋值操作。(5级)
107、不要通过名字比较两个对象的类,应该使用 class() 。
108、安全:尽量不要使用嵌套类。
109、安全:尽量不要使类可以克隆。
110、安全:尽量不要使接口可以序列化。
111、安全:尽量不要使用友好方法、属性和类。
112、复杂度:建议的最大规模:    

  • 继承层次 5层    
  • 类的行数 1000行(包含{}、:)    
  • 类的属性 10个    
  • 类的函数 20个    
  • 类友好函数 10个    
  • 类私有函数 15个    
  • 类保护函数 10个    
  • 类公有函数 10个    
  • 类调用函数 20个    
  • 函数参数 5个    
  • return语句 1个    
  • 函数行数 30行    
  • 函数代码 20行    
  • 注释比率 30%~50%
相关文章
|
4月前
|
C++
C++ 语言异常处理实战:在编程潮流中坚守稳定,开启代码可靠之旅
【8月更文挑战第22天】C++的异常处理机制是确保程序稳定的关键特性。它允许程序在遇到错误时优雅地响应而非直接崩溃。通过`throw`抛出异常,并用`catch`捕获处理,可使程序控制流跳转至错误处理代码。例如,在进行除法运算或文件读取时,若发生除数为零或文件无法打开等错误,则可通过抛出异常并在调用处捕获来妥善处理这些情况。恰当使用异常处理能显著提升程序的健壮性和维护性。
76 2
|
4月前
|
算法框架/工具 C++ Python
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
249 0
|
17天前
|
算法 安全 C++
提高C/C++代码的可读性
提高C/C++代码的可读性
36 4
|
2月前
|
Linux C语言 C++
vsCode远程执行c和c++代码并操控linux服务器完整教程
这篇文章提供了一个完整的教程,介绍如何在Visual Studio Code中配置和使用插件来远程执行C和C++代码,并操控Linux服务器,包括安装VSCode、安装插件、配置插件、配置编译工具、升级glibc和编写代码进行调试的步骤。
279 0
vsCode远程执行c和c++代码并操控linux服务器完整教程
|
3月前
|
C++
继续更新完善:C++ 结构体代码转MASM32代码
继续更新完善:C++ 结构体代码转MASM32代码
|
3月前
|
C++ Windows
HTML+JavaScript构建C++类代码一键转换MASM32代码平台
HTML+JavaScript构建C++类代码一键转换MASM32代码平台
|
3月前
|
C++
2合1,整合C++类(Class)代码转换为MASM32代码的平台
2合1,整合C++类(Class)代码转换为MASM32代码的平台
|
3月前
|
前端开发 C++ Windows
C++生成QML代码与QML里面集成QWidget
这篇文章介绍了如何在C++中生成QML代码,以及如何在QML中集成QWidget,包括使用Qt Widgets嵌入到QML界面中的技术示例。
|
4月前
|
程序员 C++ 开发者
C++命名空间揭秘:一招解决全局冲突,让你的代码模块化战斗值飙升!
【8月更文挑战第22天】在C++中,命名空间是解决命名冲突的关键机制,它帮助开发者组织代码并提升可维护性。本文通过一个图形库开发案例,展示了如何利用命名空间避免圆形和矩形类间的命名冲突。通过定义和实现这些类,并在主函数中使用命名空间创建对象及调用方法,我们不仅解决了冲突问题,还提高了代码的模块化程度和组织结构。这为实际项目开发提供了宝贵的参考经验。
66 2
|
4月前
|
C++
拥抱C++面向对象编程,解锁软件开发新境界!从混乱到有序,你的代码也能成为高效能战士!
【8月更文挑战第22天】C++凭借其强大的面向对象编程(OOP)能力,在构建复杂软件系统时不可或缺。OOP通过封装数据和操作这些数据的方法于对象中,提升了代码的模块化、重用性和可扩展性。非OOP方式(过程化编程)下,数据与处理逻辑分离,导致维护困难。而OOP将学生信息及其操作整合到`Student`类中,增强代码的可读性和可维护性。通过示例对比,可以看出OOP使C++代码结构更清晰,特别是在大型项目中,能有效提高开发效率和软件质量。
34 1

推荐镜像

更多