
# 智能化生成代码修复建议
执行代码检查任务后，对于检查出的待处理问题，可以通过智能化生成（支持批量或单个两种方式）代码修复建议来辅助快速修复代码问题，从而显著提升问题识别和修复建议的精准度，以及代码问题修复效率，更有效地保障了产品代码质量。
#### 约束与限制
智能化生成代码修复建议的功能目前仅支持JAVA、C/C++语言的部分规则，具体请参见下表：
- [表 支持智能化生成代码修复建议的规则：JAVA语言的部分规则表]
- [表 支持智能化生成代码修复建议的规则：C语言的部分规则表]
- [表 支持智能化生成代码修复建议的规则：C++语言的部分规则表]
 
#### 前提条件
- 请确认当前环境已支持智能化（导航栏中可以找到![](https://support.huaweicloud.com/usermanual-codecheck/zh-cn_image_0000002453296289.png)图标）。如果未支持，请[提交工单](https://support.huaweicloud.com/usermanual-ticket/zh-cn_topic_0127038618.html)联系技术支持工程师。
- 请租户管理员通过"租户设置 \> 通用设置 \> 服务级访问权限管理"页面为用户开启"盘古助手"权限。
- 旧版本升级改造为智能化版本后，存量代码检查任务需要重新执行完成后才可支持批量生成代码修复建议功能。
 
#### 批量生成代码修复建议
1. [访问CodeArts Check服务首页](https://support.huaweicloud.com/usermanual-codecheck/devcloud_hlp_00101.html#devcloud_hlp_00101__section125631532175013)。
2. 在任务列表中单击任务名称，进入"代码检查详情"页面。
3. 选择"代码问题"页签，进入代码问题详情页面。
4. 单击页面右上角"批量生成代码修复建议"（智能化生成代码修复建议的功能目前仅支持JAVA、C/C++语言的部分规则，详见[支持智能化生成代码修复建议的规则]），可以对该任务检查出的支持AI修复建议的待处理问题批量生成代码修复建议。
   
   进度条显示"生成中"，可实时单击按钮查看已生成的代码修复建议。
   
   
5. 在"批量生成代码修复建议"对话框，可执行以下操作： 
   - 选择"建议修复"页签，可查看建议修复的问题列表。 在问题列表中单击"操作"列![](https://support.huaweicloud.com/usermanual-codecheck/zh-cn_image_0000002419657388.png "点击放大")，跳转至"问题上下文"页面，可查看问题信息详情。
     在"问题上下文"区域的"AI修复建议"框中，可查看具体的原因、修复方案、结论以及修复前后的具体内容对比，如下图所示。
     图1问题上下文   
     ![](https://support.huaweicloud.com/usermanual-codecheck/zh-cn_image_0000002453216181.png "点击放大")
     - 单击右上角的"左右"或"上下"，可设置代码修复前后内容对比的显示方式为左右排列或上下排列。
     
     - 单击左下角"提交到已有分支"，在弹框中单击"提交代码"，可将修复的代码提交到已有分支。
     
     - 单击左下角"复制修复后代码"，可快速复制修复后的代码内容。
      
   
   - 选择"建议屏蔽"页签，可查看建议屏蔽的问题列表。 在问题列表中单击"操作"列![](https://support.huaweicloud.com/usermanual-codecheck/zh-cn_image_0000002453296293.png "点击放大")，跳转至"问题上下文"页面，可查看问题详情信息。
     在"问题上下文"区域的"AI修复建议"框中，可查看具体的原因和结论。
     
   
   
   
   
 
#### 生成单个AI修复建议
1. [访问CodeArts Check服务首页](https://support.huaweicloud.com/usermanual-codecheck/devcloud_hlp_00101.html#devcloud_hlp_00101__section125631532175013)。
2. 在任务列表中单击任务名称，进入"代码检查详情"页面。
3. 选择"代码问题"页签，进入代码问题详情页面。
4. 在单个问题区域单击"AI修复建议"（智能化生成代码修复建议的功能目前仅支持JAVA、C/C++语言的部分规则，详见[支持智能化生成代码修复建议的规则]），可查看具体修复建议。
   
   - 结论为"有风险"的问题修复建议如下图所示。
     图2有风险   
     ![](https://support.huaweicloud.com/usermanual-codecheck/zh-cn_image_0000002477730408.png "点击放大")
     - 单击右上角的"左右"或"上下"，可设置代码修复前后内容对比的显示方式为左右排列或上下排列。
     
     - 单击左下角"提交到已有分支"，在弹框中单击"提交代码"，可将修复的代码提交到已有分支。
     
     - 单击左下角"复制修复后代码"，可快速复制修复后的代码内容。
      
   
   - 结论为"无风险"的问题（建议屏蔽）修复建议如下图所示。
     图3无风险   
     ![](https://support.huaweicloud.com/usermanual-codecheck/zh-cn_image_0000002419817284.png "点击放大")
     
     
   
   
   
   
 
 #### 支持智能化生成代码修复建议的规则
 表1支持智能化生成代码修复建议的规则：JAVA语言的部分规则表 
| 规则名称                                                                                                        | 引擎                | 语言   |
|:---|:---|:---|
| G.FMT.17 应用于类、方法、类属性的每个注解独占一行                                                                               | fixbotengine-java | JAVA |
| G.TYP.09 字符与字节的互相转换操作，要指明正确的编码方式                                                                            | fixbotengine-java | JAVA |
| G.PRM.02 使用System.arraycopy()或Arrays.copyOf()进行数组复制                                                         | fixbotengine-java | JAVA |
| G.FMT.07 应该避免空块，必须使用空块时，应采用统一的大括号换行风格                                                                       | fixbotengine-java | JAVA |
| G.ERR.02 不要直接捕获异常的基类Throwable、Exception、RuntimeException                                                    | fixbotengine-java | JAVA |
| G.NAM.08 布尔型变量建议以表达是非意义的动词开头                                                                                | fixbotengine-java | JAVA |
| G.NAM.07 避免使用具有否定含义布尔变量名                                                                                    | fixbotengine-java | JAVA |
| G.FMT.06 对于非空块状结构，左大括号应该放在行尾，右大括号应该另起一行                                                                     | fixbotengine-java | JAVA |
| G.OTH.03 不用的代码段包括import，直接删除，不要注释掉--不用的代码段，直接删除，不要注释掉                                                       | fixbotengine-java | JAVA |
| G.MET.05 对于返回数组或者容器的方法，应返回长度为0的数组或者容器，代替返回null                                                              | fixbotengine-java | JAVA |
| G.FMT.18 块注释的缩进级别应与上下文代码相同                                                                                  | fixbotengine-java | JAVA |
| G.CMT.06 注释与代码之间应该有空行或空格，注释符与注释内容之间应该有空格                                                                    | fixbotengine-java | JAVA |
| G.TYP.06 禁止尝试与NaN进行比较运算，相等操作使用Double或Float的isNaN()方法                                                        | fixbotengine-java | JAVA |
| G.TYP.12 明确地进行类型转换，避免依赖隐式类型转换                                                                               | fixbotengine-java | JAVA |
| G.CTL.01 不要在控制性条件表达式中执行赋值操作或执行复杂的条件判断                                                                       | fixbotengine-java | JAVA |
| G.NAM.05 常量名采用全大写单词，单词间以下划线分隔                                                                               | fixbotengine-java | JAVA |
| G.OBJ.02 不要在父类的构造方法中调用可能被子类覆写的方法                                                                            | fixbotengine-java | JAVA |
| G.LOG.01 记录日志应该使用Facade模式的日志框架                                                                              | fixbotengine-java | JAVA |
| G.CON.06 使用新并发工具代替wait()和notify()                                                                           | fixbotengine-java | JAVA |
| G.CTL.02 含else if分支的条件判断应在最后加一个else分支                                                                       | fixbotengine-java | JAVA |
| G.ERR.01 不要通过一个空的catch块忽略异常                                                                                 | fixbotengine-java | JAVA |
| G.FMT.15 枚举常量间用逗号隔开，换行可选                                                                                    | fixbotengine-java | JAVA |
| G.OBJ.06 覆写equals方法时，要同时覆写hashCode方法                                                                        | fixbotengine-java | JAVA |
| G.EXP.04 表达式的比较，应该遵循左侧倾向于变化、右侧倾向于不变的原则--表达式比较左变右不变                                                          | fixbotengine-java | JAVA |
| G.FMT.16 case语句块结束时如果不加break，需要有注释说明（fall-through）                                                          | fixbotengine-java | JAVA |
| G.OBJ.01 应避免定义public且非final的类属性                                                                             | fixbotengine-java | JAVA |
| G.TYP.07 不要在代码中硬编码用于表示换行、文件路径分隔的字符--不要在代码中硬编码用于表示文件路径分隔的字符                                                  | fixbotengine-java | JAVA |
| G.ERR.08 不要使用return、break、continue或抛出异常使finally块非正常结束                                                       | fixbotengine-java | JAVA |
| G.MET.04 谨慎使用可变数量参数                                                                                         | fixbotengine-java | JAVA |
| G.TYP.05 浮点型数据判断相等不要直接使用==，浮点型包装类型不要用equals()或者flt.compareTo(another)==0作相等的比较                              | fixbotengine-java | JAVA |
| G.COL.04 不要在foreach循环中通过remove()/add()方法更改集合                                                                | fixbotengine-java | JAVA |
| G.ERR.11 对于GeneralSecurityException及其子类异常应记录日志                                                              | fixbotengine-java | JAVA |
| G.COL.03 声明一个泛型类通过限定符限制可用的泛型类型                                                                              | fixbotengine-java | JAVA |
| G.COL.02 优先使用泛型集合，而不是数组                                                                                     | fixbotengine-java | JAVA |
| G.OBJ.04 避免在无关的变量或无关的概念之间重用名字，避免隐藏（hide）、遮蔽（shadow）和遮掩（obscure）                                             | fixbotengine-java | JAVA |
| G.FMT.14 不应插入多余空格使代码垂直对齐                                                                                    | fixbotengine-java | JAVA |
| G.NAM.01 标识符应由不超过64字符的字母、数字和下划线组成                                                                           | fixbotengine-java | JAVA |
| G.CMT.03 方法的Javadoc中应该包含功能说明，根据实际需要按顺序使用@param、@return、@throws标签对参数、返回值、异常进行注释                              | fixbotengine-java | JAVA |
| G.CMT.01 public或protected修饰的元素应添加Javadoc注释                                                                  | fixbotengine-java | JAVA |
| G.TYP.08 字符串大小写转换、数字格式化为西方数字时，必须加上Locale.ROOT或Locale.ENGLISH                                                | fixbotengine-java | JAVA |
| G.LOG.03 日志必须分等级                                                                                            | fixbotengine-java | JAVA |
| G.LOG.02 日志工具Logger类的实例必须声明为private static final或者private final                                             | fixbotengine-java | JAVA |
| G.LOG.04 非仅限于中文区销售产品禁止用中文打印日志                                                                               | fixbotengine-java | JAVA |
| G.CTL.05 避免在循环体中修改循环控制变量                                                                                    | fixbotengine-java | JAVA |
| G.TYP.03 禁止使用浮点数作为循环计数器                                                                                     | fixbotengine-java | JAVA |
| G.PRM.08 禁止使用主动GC（除非在密码、RMI等方面），尤其是在频繁/周期性的逻辑中                                                              | fixbotengine-java | JAVA |
| G.NAM.04 方法名应采用小驼峰命名                                                                                        | fixbotengine-java | JAVA |
| G.MET.01 方法要简短--方法的参数不应超过5个                                                                                 | fixbotengine-java | JAVA |
| G.EXP.01 不要在单个表达式中对相同的变量赋值超过一次                                                                              | fixbotengine-java | JAVA |
| G.DCL.01 每行声明一个变量                                                                                           | fixbotengine-java | JAVA |
| G.DCL.05 禁止将mutable对象定义为常量                                                                                  | fixbotengine-java | JAVA |
| G.FMT.05 在条件语句和循环块中应该使用大括号                                                                                  | fixbotengine-java | JAVA |
| G.DCL.03 禁止C风格的数组声明                                                                                         | fixbotengine-java | JAVA |
| G.NAM.06 变量采用小驼峰命名                                                                                          | fixbotengine-java | JAVA |
| G.FMT.09 每行不超过一个语句                                                                                          | fixbotengine-java | JAVA |
| G.EXP.03 条件表达式?:的第2和第3个操作数应使用相同的类型                                                                          | fixbotengine-java | JAVA |
| G.MET.06 使用Optional代替null作为返回值或者可能的缺失值；禁止对Optional对象赋值为null                                                 | fixbotengine-java | JAVA |
| G.DCL.04 避免枚举常量序号的产生依赖于ordinal()方法                                                                          | fixbotengine-java | JAVA |
| G.NAM.02 包名中的字母应小写，包名以点号分隔层级                                                                                | fixbotengine-java | JAVA |
| G.MET.03 不应把方法的参数当做临时变量                                                                                     | fixbotengine-java | JAVA |
| G.EXP.02 用括号明确表达式的操作顺序，避免过分依赖默认优先级                                                                          | fixbotengine-java | JAVA |
| G.FMT.12 减少不必要的空行，保持代码紧凑                                                                                    | fixbotengine-java | JAVA |
| G.OBJ.10 接口定义中去掉多余的修饰词                                                                                      | fixbotengine-java | JAVA |
| G.PRM.07 进行IO类操作时，必须在try-with-resource或finally里关闭资源                                                         | fixbotengine-java | JAVA |
| G.PRM.10 不要创建临时变量作为return语句的返回值                                                                             | fixbotengine-java | JAVA |
| G.OBJ.03 构造方法如果有多个，尽量重用                                                                                     | fixbotengine-java | JAVA |
| G.ERR.03 不要直接捕获可通过预检查进行处理的RuntimeException，如NullPointerException、IndexOutOfBoundsException等                 | fixbotengine-java | JAVA |
| G.SER.02 实现Serializable接口的可序列化类应该显式声明serialVersionUID                                                       | fixbotengine-java | JAVA |
| G.SER.04 禁止直接序列化指向系统资源的信息                                                                                   | fixbotengine-java | JAVA |
| G.EXP.04 表达式的比较，应该遵循左侧倾向于变化、右侧倾向于不变的原则--使用equals方法进行字符串比较                                                   | fixbotengine-java | JAVA |
| G.ERR.10 尽量消除非受检的异常，不应该在整个类上使用SuppressWarning                                                               | fixbotengine-java | JAVA |
| G.CTL.03 switch语句要有default分支                                                                                | fixbotengine-java | JAVA |
| G.CON.12 避免不加控制地创建新线程，应该使用线程池来管控资源                                                                          | fixbotengine-java | JAVA |
| G.CON.08 使用Thread对象的setUncaughtExceptionHandler方法注册未捕获异常处理者                                                 | fixbotengine-java | JAVA |
| G.CON.07 创建新线程时必须指定线程名                                                                                      | fixbotengine-java | JAVA |
| G.ERR.07 一个方法不应抛出超过5个异常，并在Javadoc的@throws标签中记录每个抛出的异常及其条件                                                   | fixbotengine-java | JAVA |
| G.PRM.01 将集合转为数组时使用Collection\<T\>.toArray(T\[\])方法；Java 11后使用Collection\<T\>.toArray(IntFunction\<T\[\]\>) | fixbotengine-java | JAVA |
| G.CMT.07 正式交付给客户的代码不应包含TODO/FIXME注释                                                                         | fixbotengine-java | JAVA |
| G.TYP.13 在引用类型向下转换前用instanceof进行判断                                                                          | fixbotengine-java | JAVA |
| G.NAM.03 类、枚举和接口名应采用大驼峰命名                                                                                   | fixbotengine-java | JAVA |
| G.PRM.05 禁止创建不必要的对象                                                                                         | fixbotengine-java | JAVA |
| G.OBJ.08 正确实现单例模式                                                                                           | fixbotengine-java | JAVA |
| G.OTH.03 不用的代码段包括import，直接删除，不要注释掉--不用的import语句，直接删除，不要注释掉                                                  | fixbotengine-java | JAVA |
| G.FMT.20 数字字面量应该设置合适的后缀，long类型应该使用L作为后缀                                                                     | fixbotengine-java | JAVA |
| G.TYP.11 基本类型优于包装类型，注意合理使用包装类型                                                                              | fixbotengine-java | JAVA |
| G.CMT.02 顶层public类的Javadoc应该包含功能说明和创建日期/版本信息                                                                | fixbotengine-java | JAVA |
| G.CMT.04 不写空有格式的方法头注释                                                                                       | fixbotengine-java | JAVA |
| G.CMT.05 文件头注释应该包含版权许可信息                                                                                    | fixbotengine-java | JAVA |
| G.ERR.04 防止通过异常泄露敏感信息                                                                                       | codemars          | JAVA |
| G.ERR.05 方法抛出的异常，应该与本身的抽象层次相对应                                                                              | fixbotengine-java | JAVA |
| G.ERR.06 在catch块中抛出新异常时，避免丢失原始异常信息                                                                          | secbrella         | JAVA |
| G.EXP.06 代码中不应使用断言（assert）                                                                                  | codemars          | JAVA |
| G.FIO.01 使用外部数据构造的文件路径前必须进行校验，校验前必须对文件路径进行规范化处理                                                             | codemars          | JAVA |
| G.FMT.13 用空格突出关键字和重要信息                                                                                      | fixbotengine-java | JAVA |
| G.FMT.19 类和成员修饰符（如果存在）按Java语言规范建议的顺序显示                                                                      | fixbotengine-java | JAVA |
| G.OTH.05 删除无效或永不执行的代码                                                                                       | secbrella         | JAVA |
| G.PRM.04 不要对正则表达式进行频繁重复预编译                                                                                  | fixbotengine-java | JAVA |
| G.PRM.09 禁止使用Finalizer机制                                                                                    | fixbotengine-java | JAVA |
| G.SEC.04 使用安全管理器来保护敏感操作                                                                                     | codemars          | JAVA |
| G.SER.05 禁止序列化非静态的内部类                                                                                       | codemars          | JAVA |
| G.CON.05 禁止使用非线程安全的方法来覆写线程安全的方法                                                                             | secbrella         | JAVA |
| G.CON.10 线程中断由业务代码来协作完成，慎用Thread.interrupt方法                                                                | fixbotengine-java | JAVA |
| G.ERR.08 不要使用return、break、continue或抛出异常使finally块非正常结束--在finally块中使用throw语句                                  | codemars          | JAVA |
| G.ERR.09 不要调用System.exit()终止JVM                                                                             | codemars          | JAVA |
| G.MET.07 不要忽略方法的返回值                                                                                         | secbrella         | JAVA |
   
 表2支持智能化生成代码修复建议的规则：C语言的部分规则表 
| 规则名称                                                 | 引擎               | 语言 |
|:---|:---|:---|
| G.AST.03 禁止用断言检测程序在运行期间可能导致的错误，可能发生的错误要用错误处理代码来处理【C】 | codemars         | C  |
| G.PRE.04 禁止把带副作用的表达式作为参数传递给函数式宏【C】                   | clangtidy        | C  |
| G.CMT.02 代码注释置于对应代码的上方或右边【C】                         | fixbotengine-cxx | C  |
| G.OTH.01 删除无效或永不执行的代码【C】                             | fixbotengine-cxx | C  |
| G.CMT.01 注释符与注释内容间要有1空格【C】                           | fixbotengine-cxx | C  |
| G.PRE.03 包含多条语句的函数式宏的实现语句必须放在 do-while(0) 中【C】       | fixbotengine-cxx | C  |
| G.EXP.04 用括号明确表达式的操作顺序，避免过分依赖默认优先级【C】                | fixbotengine-cxx | C  |
| G.PRE.09 宏定义不以分号结尾【C】                                | fixbotengine-cxx | C  |
| G.FMT.04 一行只有一条语句【C】                                 | fixbotengine-cxx | C  |
| P.04 对所有外部数据进行合法性检查【C】                               | codemars         | C  |
| G.FIL.03 不要在共享目录中创建临时文件【C】                           | codemars         | C  |
| G.INT.03 确保除法和余数运算不会导致除零错误(被零除)【C】                   | codemars         | C  |
| G.FUU.08 禁用abort函数【C】                                | codemars         | C  |
| G.FUU.07 除main函数以外的其他函数，禁止使用exit、ExitProcess函数退出【C】  | codemars         | C  |
| G.FUU.10 禁止使用alloca()函数申请栈上内存【C】                     | codemars         | C  |
| G.FUU.09 禁止使用realloc()函数【C】                          | codemars         | C  |
| G.FUU.04 禁用atexit函数【C】                               | codemars         | C  |
| G.OTH.05 禁止代码中包含公网地址【C】                              | codemars         | C  |
| G.FMT.11 用空格突出关键字和重要信息--三元条件表达式【C】                   | clangtidy        | C  |
| G.EXP.02 表达式的比较，应当遵循左侧倾向于变化、右侧倾向于不变的原则【C】            | clangtidy        | C  |
| G.CTL.07 switch语句要有default分支--default不是最后一个分支【C】     | clangtidy        | C  |
| G.FUD.09 避免修改函数参数的值【C】                               | clangtidy        | C  |
| G.VAR.02 不要在子作用域中重用变量名【C】                            | clangtidy        | C  |
| G.CNS.01 禁止使用小写字母"l"作为数值型常量后缀【C】                     | clangtidy        | C  |
| G.PRE.02 定义宏时，要使用完备的括号【C】                            | clangtidy        | C  |
| G.FMT.11 用空格突出关键字和重要信息--函数名【C】                       | clangtidy        | C  |
| G.FMT.11 用空格突出关键字和重要信息--一元表达式【C】                     | clangtidy        | C  |
| G.FUU.21 禁止使用内存操作类不安全函数【C】                           | codemars         | C  |
| G.FUU.11 必须检查安全函数返回值，并进行正确的处理【C】                     | codemars         | C  |
| G.FUU.12 正确设置安全函数中的destMax参数--检查destMax参数是否设置正确【C】   | codemars         | C  |
| G.FUU.12 正确设置安全函数中的destMax参数--检查destMax和count参数【C】   | codemars         | C  |
| G.FIL.02 使用文件路径前必须进行规范化并校验【C】                        | secbrella:hcs    | C  |
| G.INT.03 确保除法和余数运算不会导致除零错误(被零除)【C】                   | secbrella:hcs    | C  |
| G.EXP.01 执行算术运算或比较操作的两个操作数要求具有相同的基本类型【C】             | secbrella:hcs    | C  |
| G.OTH.04 禁止在发布版本中输出对象或函数的地址【C】                       | secbrella:hcs    | C  |
| G.FUU.11 必须检查安全函数返回值，并进行正确的处理【C】                     | secbrella:hcs    | C  |
| G.VAR.03 避免大量栈分配【C】                                  | secbrella:hcs    | C  |
| G.FUU.22 避免使用atoi、atol、atoll、atof函数【C】               | secbrella:hcs    | C  |
| G.FUU.17 禁止外部可控数据作为dlopen/LoadLibrary等模块加载函数的参数【C】   | secbrella:hcs    | C  |
| G.VAR.05 指向资源句柄或描述符的变量，在资源释放后立即赋予新值【C】               | codemars         | C  |
| G.MEM.01 内存申请前，必须对申请内存大小进行合法性校验【C】                   | codemars         | C  |
| G.OTH.03 禁用rand函数产生用于安全用途的伪随机数【C】                    | codemars         | C  |
| G.AST.01 断言必须使用宏定义，且只能在调试版本中生效【C】                    | codemars         | C  |
| G.AST.02 避免在代码中直接使用assert()【C】                       | codemars         | C  |
| G.TYP.04 避免隐式有损算术转换【C】                               | secbrella:hcs    | C  |
| G.ARR.06 不要使用变长数组类型【C】                               | secbrella:hcs    | C  |
   
 表3支持智能化生成代码修复建议的规则：C++语言的部分规则表 
| 规则名称                                                             | 引擎               | 语言  |
|:---|:---|:---|
| G.AST.03 禁止用断言检测程序在运行期间可能导致的错误，可能发生的错误要用错误处理代码来处理                | codemars         | C++ |
| G.PRE.04 禁止把带副作用的表达式作为参数传递给函数式宏                                  | clangtidy        | C++ |
| G.EXP.43-CPP 不用的代码段直接删除，不要注释掉                                    | fixbotengine-cxx | C++ |
| G.OTH.01 删除无效或永不执行的代码                                            | fixbotengine-cxx | C++ |
| G.CMT.01-CPP 注释符与注释内容间留有1个空格                                     | fixbotengine-cxx | C++ |
| G.CMT.02-CPP 代码注释置于对应代码的上方或右边                                    | fixbotengine-cxx | C++ |
| G.PRE.03 包含多条语句的函数式宏的实现语句必须放在 do-while(0) 中                      | fixbotengine-cxx | C++ |
| G.EXP.30-CPP 用括号明确表达式的操作顺序，避免过分依赖默认优先级                           | fixbotengine-cxx | C++ |
| G.PRE.09 宏定义不以分号结尾                                               | fixbotengine-cxx | C++ |
| G.FMT.04-CPP 每个变量单独一行进行声明或赋值                                     | fixbotengine-cxx | C++ |
| G.STD.15-CPP 禁止外部可控数据作为进程启动函数的参数或者作为dlopen/LoadLibrary等模块加载函数的参数 | codemars         | C++ |
| G.FMT.14-CPP 指针类型"\*"和引用类型"\&"只跟随类型或变量名--引用类型                    | fixbotengine-cxx | C++ |
| G.FMT.09-CPP 构造函数初始化列表放在同一行或按4空格缩进并排多行                           | fixbotengine-cxx | C++ |
| G.RES.10-CPP 使用std::make_shared 而不是new 创建std::shared_ptr         | fixbotengine-cxx | C++ |
| G.RES.09-CPP 使用std::make_unique 而不是new 创建std::unique_ptr         | fixbotengine-cxx | C++ |
| G.FIL.03 不要在共享目录中创建临时文件                                          | codemars         | C++ |
| G.EXP.22-CPP 确保除法和余数运算不会导致除零错误(被零除)                              | codemars         | C++ |
| G.FUU.10 禁止使用alloca()函数申请栈上内存                                    | codemars         | C++ |
| G.FUU.09 禁止使用realloc()函数                                         | codemars         | C++ |
| G.STD.16-CPP 禁用程序与线程的退出函数和atexit函数                               | codemars         | C++ |
| G.OTH.05 禁止代码中包含公网地址                                             | codemars         | C++ |
| G.FMT.16-CPP 用空格突出关键字和重要信息--三元条件表达式                              | clangtidy        | C++ |
| G.EXP.28-CPP bool类型比较应避免多余的==或!=                                 | clangtidy        | C++ |
| G.EXP.29-CPP 比较两个表达式时，左侧倾向于变化，右侧倾向于不变                            | clangtidy        | C++ |
| G.EXP.37-CPP switch语句要有default分支--default不是最后一个分支                | clangtidy        | C++ |
| G.CLS.03-CPP 单参数构造函数声明为explicit                                  | clangtidy        | C++ |
| G.EXP.10-CPP 不要在嵌套作用域中重用名称                                       | clangtidy        | C++ |
| G.CNS.01-CPP 禁止使用小写字母"l"作为数值型字面量后缀                               | clangtidy        | C++ |
| G.PRE.01-CPP 禁止使用宏来表示常量                                          | clangtidy        | C++ |
| G.PRE.02 定义宏时，要使用完备的括号                                           | clangtidy        | C++ |
| G.FMT.16-CPP 用空格突出关键字和重要信息--函数名                                  | clangtidy        | C++ |
| G.FMT.16-CPP 用空格突出关键字和重要信息--一元表达式                                | clangtidy        | C++ |
| G.INC.09-CPP 头文件中禁止向全局命名空间中导入符号或定义别名                             | clangtidy        | C++ |
| G.ENU.02-CPP 避免定义未命名的枚举                                          | clangtidy        | C++ |
| G.EXP.14-CPP 使用由C++提供的类型转换操作                                     | clangtidy        | C++ |
| G.FUN.03-CPP 禁止函数有未被使用的参数                                        | clangtidy        | C++ |
| G.FUN.06-CPP 函数参数需传入单个对象时应以引用取代指针                                | clangtidy        | C++ |
| G.EXP.34-CPP 编译期可确定的断言检查使用static_assert                          | clangtidy        | C++ |
| G.STD.01-CPP 使用新的标准头文件                                           | clangtidy        | C++ |
| G.CLS.12-CPP 在重写虚函数时应明确指定override或final                          | clangtidy        | C++ |
| G.FUU.21 禁止使用内存操作类不安全函数                                          | codemars         | C++ |
| G.FUU.11 必须检查安全函数返回值，并进行正确的处理                                    | codemars         | C++ |
| G.FUU.12 正确设置安全函数中的destMax参数--检查destMax参数是否设置正确                  | codemars         | C++ |
| G.FUU.12 正确设置安全函数中的destMax参数--检查destMax和count参数                  | codemars         | C++ |
| G.FIL.02 使用文件路径前必须进行规范化并校验                                       | secbrella:hcs    | C++ |
| G.RES.13-CPP 使用恰当的方式处理new操作符的内存分配错误                              | secbrella:hcs    | C++ |
| G.RES.14-CPP 避免出现delete this操作                                   | secbrella:hcs    | C++ |
| G.EXP.22-CPP 确保除法和余数运算不会导致除零错误(被零除)                              | secbrella:hcs    | C++ |
| G.EXP.25-CPP 表达式中不要混用有符号数和无符号数                                   | secbrella:hcs    | C++ |
| G.CLS.09-CPP 在移动构造函数和移动赋值操作符中必须将源对象的资源正确重置                       | secbrella:hcs    | C++ |
| G.OTH.04 禁止在发布版本中输出对象或函数的地址                                      | secbrella:hcs    | C++ |
| G.FUU.11 必须检查安全函数返回值，并进行正确的处理                                    | secbrella:hcs    | C++ |
| G.VAR.03 避免大量栈分配                                                 | secbrella:hcs    | C++ |
| G.STD.06-CPP 避免使用atoi、atol、atoll、atof函数                          | secbrella:hcs    | C++ |
| G.RES.07-CPP 指向资源句柄或描述符的变量，在资源释放后立即赋予新值                          | codemars         | C++ |
| G.RES.02-CPP 内存申请前，必须对申请内存大小进行合法性校验                              | codemars         | C++ |
| G.OTH.03 禁用rand函数产生用于安全用途的伪随机数                                   | codemars         | C++ |
| G.FMT.12-CPP 避免将if/else/else if写在同一行                             | fixbotengine-cxx | C++ |
| G.EXP.17-CPP 避免隐式有损算数转换                                          | secbrella:hcs    | C++ |
   
