此版本包括以下增强功能:

发布日期:2023 年 12 月 13 日

增强 Automotive Compliance Pack

此版本引入了对最新发布的 MISRA C++:2023 编码指南的完整支持。

新增 MISRA C++2023 测试配置以支持 MISRA C++:2023 编码指南。

该配置实现“Guidelines for the use of C++17 in critical systems”编码标准的完整执行。MISRA C++:2023 测试配置取代了之前可用的 MISRA C++ 202X 测试配置,其中包含“Public Review Draft of MISRA C++ 202X”中的指南。

2023.2.1 更新:

已更正 MISRA C++:2023 rule 21.2.2 的标识符。之前的标签为 18.2.2(MISRACPP2023-18_2_2-a),现在标签为 21.2.2(MISRACPP2023-21_2_2-a)。

对于 MISRA C++:2023 合规报告,建议使用 C/C++test 2023.2.1、DTP 2023.2.2 和 Automotive Compliance Pack 2023.2.2 的更新版本。

增强静态分析

  • 添加新的代码分析规则,增加合规标准的覆盖率。有关新增规则和更新规则的列表,请参阅新增规则更新规则
  • 普遍增强静态分析规则的准确性和性能。
  • 扩展代码内抑制的语法。现在可以抑制下一行中的任务。请参阅下一行抑制

增强覆盖率分析

增加了对收集“constexpr”函数代码覆盖率的支持。请参阅 C++ 常量表达式支持-constexpr -coverage

编译器支持

现已支持以下编译器:

编译器名称编译器标识符

Clang C/C++ Compiler v 15.0 (x86_64)

clang_15_0-x86_64

Clang C/C++ Compiler v 16.0 (aarch32)

clang_16_0-aarch32

Clang C/C++ Compiler v 16.0 (aarch64)

clang_16_0-aarch64

Clang C/C++ Compiler v 16.0 (x86_64)clang_16_0-x86_64
GNU GCC 13.x (aarch64)gcc_13-aarch64

GNU GCC 13.x (x86_64)

gcc_13-64

Hexagon Clang Compiler v. 8.7.x

hexagon-clang_8_7

IAR BXARM v. 9.20x

iccarm_9_20

Smartcode for TriCore C/C++ Compiler 10.1

smartcode_10_1-tricore

请参阅编译器

IDE 支持

现已支持以下 IDE:

  • Visual Studio 2022

现在有两个安装包可用,具体取决于 Visual Studio 的版本:

  • C/C++test for Visual Studio x86_64 (64-bit) - 适用于 Visual Studio 2022 或更高版本
  • C/C++test for Visual Studio x86 (32-bit) - 适用于 Visual Studio 2019 或更低版本

新增和更新的测试配置

添加了以下测试配置:

  • MISRA C++ 2023

以下测试配置已根据新规则进行了更新:

  • AUTOSAR C++14 编码指南
  • CWE Top 25 + On the Cusp 2019
  • CWE Top 25 + On the Cusp 2022
  • CWE Top 25 2019
  • CWE Top 25 2022
  • Flow Analysis Aggressive
  • Flow Analysis Standard
  • Global Analysis
  • High Integrity C++
  • MISRA C 1998
  • MISRA C 2023 (MISRA C 2012)
  • Modern C++ (11, 14 and 17)
  • Recommended Rules for FDA (C)
  • Recommended Rules for FDA (C++)
  • Security Rules
  • SEI CERT C Guidelines
  • SEI CERT C Rules
  • SEI CERT C++ Rules

其他更新

现在,您可以为单次分析运行同时生成不同格式的多个报告。

  • 可以在 .properties 文件中使用 report.format 设置来配置报告格式。详细信息请参阅配置设置。 
  • 删除 report.generate_htmls 配置设置。应使用 report.format 设置生成 HTML 报告。
  • 已更改以下支持格式的默认报告文件名:
报告格式之前现在

HTML (C/C++test 的单元测试详情)

report.html

report_ut_details.html

SARIF for Azure DevOps

report.sarifreport_azure.sarif

SAST v14 for GitLab

report.sastreport_v14.sast

XML SATE (静态分析工具说明)

report_report.xmlreport_sate.xml

XSL 自定义

report.htmlreport_custom.html

cppUnit

report_report.xmlreport_cppunit.xml
xUnitreport_report.xmlreport_xunit.xml
  • 如有需要,可相应更新您的工作流程。
  • 有关报告文件名的详细信息,请参阅报告文件名

已知问题和局限性

  • 对于 Visual Studio 2022,在 C/C++test 的配置文件(.properties)中指定文件路径时,强烈建议使用绝对路径而非相对路径。要想共享配置文件,您可以使用变量(作为此类文件路径的一部分)实现,例如:cpptest.custom.rules.dir=${env_var:HOME}/custom/rules

弃用和删除的支持

删除的测试配置

已删除以下测试配置:

  • MISRA C++ 202X

即将弃用的编译器

在未来的版本中,将不再支持以下编译器:

  • GNU GCC 5.x
  • GNU GCC 5.x (x86_64)
  • GNU GCC 6.x
  • GNU GCC 6.x (x86_64)
  • IAR Compiler for ARM v. 7.4x
  • IAR Compiler for ARM v. 7.8x
  • IAR Compiler for M16C & R8C v. 3.5x

已弃用的编译器

已弃用以下编译器的支持,并将在以后的版本中删除:

  • Clang C/C++ Compiler v 6.0
  • FR Family Softune C/C++ Compiler V6
  • Green Hills Software Compiler for ARM64 v. 2014.1.x
  • Green Hills Software Compiler for PPC v. 4.2.x

  • Green Hills Software Compiler for PPC v. 5.0.x
  • Green Hills Software Compiler for V850 v. 2014.1.x
  • Microsoft Visual C++ 14.0
  • Microsoft Visual C++ 14.0 (x64)
  • SH Series C/C++ Compiler V.9.04.xx
  • TI MSP430 C/C++ Compiler GNU GCC 6.x
  • TI TMS320C2000 C/C++ Compiler v16.9
  • Vx-toolset for TriCore C/C++ Compiler 6.2
  • Wind River GCC 4.8.x

删除的编译器支持

不再支持以下编译器:

  • C compiler for 80C196 v. 6.0 r1
  • Clang C/C++ Compiler v 5.0
  • Freescale C/C++ Compiler v. 5.1 for Embedded ARM
  • Freescale CodeWarrior ANSI-C/cC++ Compiler 5.0.x for HC12
  • FreeScale CodeWarrior ColdFire v 6.0
  • GCC for Tricore 4.9.x
  • Green Hills Software Compiler for ARM v. 2014.1.x
  • Green Hills Software Compiler for PPC v. 4.0.x
  • Green Hills Software Compiler for V850 v. 2013.5.x
  • IAR Compiler for RX v. 2.5x
  • IAR Compiler for RX v. 2.6x
  • IAR Compiler for STM8 v. 1.4x
  • TI MSP430 C/C++ Compiler v4.0
  • TI TMS320C6x C/C++ Compiler v7.4
  • Wind River Diab 5.7.x
  • Wind River Diab 5.8.x
  • Wind River GCC 3.3.x
  • Wind River GCC 3.4.x
  • Wind River GCC 4.1.x
  • Wind River GCC 4.3.x

解决的 Bug 和 FR

2023.2.1

Bug/FR ID

说明

CPP-54999

[static] MISRA2004-13_7_n (MISRA2008-0_1_2_t) 针对 static_assert 内的比较误报

CPP-55017

[static] CODSTA-CPP-58 (MISRA2008-0_1_7) 针对 static_assert 内的函数调用误报

CPP-55126

[static] CODSTA-CPP-58 (AUTOSAR-A0_1_2-a) 和 MISRA2004-16_10 (AUTOSAR-M0_3_2-a) 在调用 decltype 和 static_assert 中的函数时误报

CPP-55135

[rulewizard] 为 Rule Wizard 添加对 static_assert 的支持

CPP-55281

[engine] 插桩错误 - CTAD 的使用不适用于 constexpr 函数

CPP-55361

[static] GLOBAL-TEMPLNOINST (MISRA2008-14_7_1) - 不报告显式实例化类中函数的违规

CPP-55756

[engine] VS.2019 编译错误: "xlocnum" header: error C2668: std::num_put<...>::do_put': ambiguous call to overloaded function

CPP-56001

[static] GLOBAL-ONEDEFRULE (MISRA2008-3_2_2) 和 GLOBAL-ONEEXTERNDEF (MISRA2008-3_2_4) 针对内联变量的定义误报

CPP-56006

[static] MISRA2004-14_10 (MISRA2008-6_4_2) 在 'if constexpr' 条件为 true 时误报

CPP-56008

[static] MISRA2004-9_2_c (MISRA2008-8_5_2_c) 在结构具有静态和 NSDMI 初始化变量时误报

CPP-56013

[static] OPT-05 (MISRA2008-0_1_3_c) 在私有成员用于泛型 lambda时误报

CPP-56176

[static] AUTOSAR-M0_1_2-d 误报

CPP-56181

[rulewizard] 未在变量初始化器中检测 Decltype 及其参数

CPP-56195

[rulewizard] 在 'decltype' 中查找表达式的新属性

CPP-56229

[static] TEMPL-12 (MISRA2008-14_6_1) 在使用依赖名称的模板消歧器时误报

CPP-56230

[static] CODSTA-MCPP-23 (AUTOSAR-A12_4_2-a) 针对模板转发类声明误报

CPP-56246

[ide] Visual Studio 测试用例调试导致链接器错误(缺少外部符号__imp_CppTest_addBreakpoint_vc)

CPP-56256

[static] MISRACPP2023-11_6_1-a (INIT-101):针对基于范围的 'for' 迭代器变量误报

CPP-56268

[engine] 覆盖率插桩后内联函数未解析

CPP-56304

[static] TEMPL-09 (AUTOSAR-A14_8_2-a) 针对模板特化误报

CPP-56460

[static] MISRA2008-0_1_7 在 static_assert 中调用 constexpr 函数时误报

CPP-56517

[static] MISRACPP2023-11_6_1-a 针对基于范围的循环误报

CPP-56522

[static] MISRACPP2023-8_20_1-a (PB-73) 内存消耗大

CPP-56535

[static] MISRACPP2023-7_0_2-a (CODSTA-CPP-212) 误报

CPP-56573

[static] MISRACPP2023-7_0_2-a (CODSTA-CPP-212) 针对模板中的布尔表达式误报

CPP-56574

[static] MISRA C++ 2023 Rule 21.2.2 被错误标记为 Rule 18.2.2

CPP-56600

[static] CODSTA-CPP-58 (MISRACPP2023-0_1_2-a) 针对模板参数中使用的函数的调用误报

CPP-56622

[engine] SCA 在 librulefileengine.so, LogicClient::allAccept(NodeProvider*) 中因信号 11 崩溃

2023.2.0

Bug/FR ID

说明

CPP-45027

[cli] 需要一种在每次运行时生成多个报告的方法(C/C++test Professional)

CPP-46135

[static] 优化 CERT-C INT13 的映射

CPP-47079

[static] 优化 AUTOSAR-A9_3_1 的映射

CPP-47353

[static] 拆分 COMMENT-14 和 COMMENT-14_b 规则,分别报告函数声明和定义

CPP-47435

[cli] 在 C/C++test Professional 中通过一次测试运行生成多种报告格式

CPP-47603

[static] 添加一种在代码内抑制下一行违规的方法

CPP-47674

[engine] 增加对收集 constexpr 函数代码覆盖率的支持(在非 consteval 上下文中使用时)

CPP-47796

[static] CODSTA-CPP-53 和 CODSTA-CPP-43 应扩展用于检查模板实例

CPP-48590

[static] 优化 CERT C ERR07-C 的映射

CPP-49654

[ide] 优化命令行中 \" 序列的处理

CPP-50307

[static] 扩展 AUTOSAR A0-1-4 的映射

CPP-50659

[IDE ]C/C++test Professional - 支持 Visual Studio 2022 IDE

CPP-51362

[static] 优化 AUTOSAR A9-6-1 的映射

CPP-51442

[engine] 错误:模板参数“Tuple”的参数太少

CPP-51639

[static] 在 AUTOSAR A7-2-5 中添加例外

CPP-52200

[engine] 错误:没有构造函数“tuple”的实例与参数列表匹配

CPP-52204

[static] 扩展 AUTOSAR A27-0-4 的映射

CPP-52327

[static] MISRAC2012-RULE_5_4-c/MISRAC2012-RULE_5_4-d:性能优化

CPP-52363

[compiler] 支持 IAR BXARM 9.20.3

CPP-52532

[complier] 支持 clang 16 (aarch32)

CPP-52566

[static] 优化 CERT-CPP-DCL60 的映射 [全局]

CPP-52600

[static] 优化 MISRA C 2012 Rule 12.1 的映射

CPP-52661

[static] 实现新的规则检测派生类中成员名称是否被重复使用

CPP-52704

[static] PFO-01 (MISRA2008-3_1_1) 应允许在头文件中使用内联变量

CPP-52826

[static] 针对 Lambda 表达式优化 CODSTA-CPP-53 (MISRA2008-7_1_1)

CPP-52973

[static] 在 MISRA2008-3_4_1 中为常量变量添加例外

CPP-52983

[static] OPT-05 在复杂类型的 constexpr 变量用作模板参数时误报

CPP-53009

[docs] 文档 cpptestcli-quiet 选项(C/C++test Standard)

CPP-53672

[static] GLOBAL-UNUSEDFUNC (MISRA2008-0_1_10) 针对泛型 lambda 中的 operator() 误报

CPP-53673

[static] OPT-01 (MISRA2008-3_4_1_a) 在 if 语句条件内声明局部变量时误报

CPP-53711

[static] EXCEPT-12 (MISRA2008-15_1_2) 在标准库中的 NULL 用作 throw 的参数时漏报

CPP-53713

[rulewizard] 扩展 'IsInline' 属性检查变量是否已声明为 inline

CPP-53717

[static] MISRA-071_b (MISRAC2012-RULE_17_3-a) 在函数调用和原型在同一个宏定义中时误报

CPP-53757

[complier] 支持 TriCore 的 Tasking SmartCode 10.1

CPP-53760

[engine] 错误:后接“::”的名称必须是类或命名空间名称

CPP-53765

[static] MISRA2004-13_7_s (AUTOSAR-M0_1_2-e) 在条件中使用具有负值的枚举时误报

CPP-53766

[static] OPT-30 (AUTOSAR-A0_1_3-a):针对模板类中友元的定义误报

CPP-53767

[static] CODSTA-CPP-43 (AUTOSAR-A8_4_9-a):针对模板类中友元函数的参数误报

CPP-53777

[complier] 支持 Hexagon 8.7(Linux,扩展,完整版)

CPP-53818

[engine] errno在追踪某些 exec 函数时未正确设置

CPP-54754

[engine] 从其他模板函数调用(非专用)模板函数的桩函数

CPP-54756

[ide] C/C++test Standard:能够在 Visual Studio IDE 中将分析结果导入 CMake 项目

CPP-54761

[engine] 优化 clang 8 和更低版本的编译器配置 - 类型名称“std::align_val_t”(overaligned_allocation_enabled=false) 的重新声明无效

CPP-54765

[static] GLOBAL-UNUSEDTYPE / INTERNAL-GLOBAL-UNUSEDTYPE_2: TypeError: argument of type 'NoneType' is not iterable

CPP-54766

[engine]错误:静态断言失败 - std::is_trivially_copyable_v 行为不正确

CPP-54774

[engine] 程序在以下位置接收信号 11:栈追踪:/lib64/libc.so.6 中的 0# 0x00007F07709136B0

CPP-54776

[engine] 模板类的友元无代码覆盖率

CPP-54779

[engine] CWC:EDG 失败错误 83

CPP-54784

[static] MISRA-084:在宏与 'return' 用在同一行时误报违规

CPP-54806

[static] PREPROC-19:运行规则时出错 - SyntaxError:无效的令牌

CPP-54838

[engine] 内部错误:断言失败: "il_to_str.c", line 3749

CPP-54839

[static] GLOBAL-ONEUSEVAR (MISRA2008-0_1_4) 针对 lambda 中捕获的变量误报

CPP-54884

[vscode] 将 Parasoft 静态分析违规严重度映射到 VSCode 消息严重度

CPP-54933

[engine] C/C++test·插桩无法编译带有标志符的大括号数组初始化器

CPP-54946

[engine] 解析错误:不允许使用抽象类类型的参数

CPP-54947

[static] 更改 AUTOSAR-M0_1_3 的映射(删除 AUTOSAR-M0_1_3-b)

CPP-54949

[cli]“cpptest.fail.setup.problems”应允许根据设置问题级别选择性地使 cpptestcli 运行失败

CPP-54957

[ci] 针对 GitLab 集成代码覆盖率报告

CPP-54961

[engine] 致命错误 C++test:结构绑定的 lambda 捕获(32716)

CPP-55008

[engine] 不正确的插桩生成“错误:在顶层使用无效”

CPP-55011

[static] PB-20 (CERT_CPP-OOP51-a) 无法正确检查切片问题

CPP-55016

[static] CERT_C-ERR33-b 应从 CERT ERR33 的映射中删除

CPP-55022

[static] CODSTA-CPP-85 针对两个不相关的模板类生成违规。

CPP-55055

[ide] /std:c++20 标记在 VS 插件中被过滤掉

CPP-55083

[static] FORMAT-47_b (AUTOSAR-A7_1_3-a) 在 'const' 限定符放在 'time_t' 类型的右侧时误报

CPP-55124

[static] CODSTA-CPP-58 (AUTOSAR-A0_1_2-a) 在 'new' 操作数中调用函数时误报

CPP-55125

[static] CODSTA-224 (AUTOSAR-A5_16_1-a) 在模板函数中单独使用条件运算符时误报

CPP-55128

[static] CODSTA-MCPP-14 (AUTOSAR-A13_3_1-a) 针对用 enable_if 定义的转发构造函数误报

CPP-55129

[static] CODSTA-CPP-78 (AUTOSAR-M9_3_3-a) 在成员函数使用匿名联合体的成员时误报

CPP-55132

[engine] CTOR 桩函数的行为类似于自动桩函数

CPP-55134

[engine] 覆盖率构建 "TYPED_TEST" 与 "ASSERT_NO_THROW"/"EXPECT_NO_THROW" 组合使用时失败

CPP-55217

[engine] 错误:未在此作用域中声明 EventTypeT

CPP-55233

[complier] Hexagon Clang 8.6 无法展开响应文件

CPP-55272

[engine] 解析错误:没有合适的用户定义转换

CPP-55274

[engine] 嵌套在模板函数中的 Lambda 应该在覆盖率报告中报告一次(以泛型模板为父级)

CPP-55276

[static]AUTOSAR-A13_2_3-a 和 std::enable_if

CPP-55508

[engine] 错误:{ 之前要求有 : 符号,插桩失败

CPP-55576

[engine] fix(tcov):修复 template-coverage 中添加的 'else' 子句的位置

CPP-55610

[ide] 在 Eclipse 项目中使用虚拟文件夹时,在不正确的文件夹中创建数据源

CPP-55640

[static] 优化 HICPP-6_1_3 要求的映射

CPP-55641

[static] CODSTA-CPP-84 (HICPP-3_1_1-d) 在使用作用域枚举器时误报

CPP-55740

[static] HICPP-8_3_4-a 针对左值引用误报

CPP-55745

[static] 优化 HIC++ 8.1.1 要求的映射

CPP-55751

[ide] 优化 Renesas HEW-4 的导入器,从而更好地处理编译器选项

CPP-55753

[static] TEMPL-10 (HICPP-14_2_1-a) 针对模板特化的定义误报

CPP-55762

[ide] 无法通过测试用例编辑器创建以“std::vector<>”为参数的函数的测试用例

FA-9413

模拟未考虑从 new 操作到 catch 的路径(std::bad_alloc)

FA-9457

BD-PB-VOVR 在变量未初始化时误报

FA-9471

BD-RES-STACKLIM 错误计算了声明为数组类型的函数参数的大小

FA-9479

BD-PB-OVERFNZT 针对从字符串字面量初始化的数组误报

FA-9522

BD-PB-CC 针对 memcpy 函数覆盖的数组元素值误报

FA-9555

BD-PB-VOVR 针对 constexpr / static_assert 上下文中使用的变量误报

FA-9599

优化 BD-PB-CC 规则,使其在后处理违规时不会抛出描述的异常

FA-9605

BD-CO-ITMOD 针对 erase 函数误报

FA-9607

BD-PB-ARRAY 针对通过引用传递的多维数组误报

FA-9614

BD-PB-ARRAY 针对通过引用传递的参数误报违规

FA-9618

BD-PB-ZERO 在对 a 和 b 进行相应的不相等检查后仍针对 (a - b) 分母误报

FA-9624

BD-PB-SUBSEQMOVE 在 moved-from 对象的地址用作 placement-new 的参数时误报

FA-9625

BD-PB-NOTINIT 在使用大括号列表初始化大小未知的数组时误报

FA-9642

基于对变量进行的复杂算术运算(例如 2 * x - x - x)的事实推导不准确

FA-9665

BD-PB-CC 误报

规则更新

新增规则

2023.2.1

规则 ID

标题

MISRACPP2023-21_2_2-a

不得使用 <cstring>、<cstdlib>、<cwchar> 和 <cinttypes> 中的字符串处理函数

2023.2.0

规则 ID

标题

AUTOSAR-A18_9_2-b

应使用 'std::move' 函数转发右值引用

AUTOSAR-A27_0_4-e

不要对字符串对象使用 'c_str()' 和 'data()' 函数

AUTOSAR-M3_2_4-b

具有外部链接的标识符应有外部定义

BD-PB-LIFETIME

不要使用生命周期已结束的对象

BD-PB-NAUNF

不要读取非活动 union 字段的值

CERT_C-MSC14-b

在预处理器指令中进行常量无符号整数表达式求值不应导致回绕

CERT_C-MSC15-b

在预处理器指令中进行常量无符号整数表达式求值不应导致回绕

CODSTA-124_c

不得在函数指针和任何其他类型之间进行强制转换

CODSTA-185_c

不应使用 'localeconv'、'getenv'、'setlocale' 或 'strerror' 函数的地址

CODSTA-223_c

不应使用标准有符号整型和标准无符号整型的名称

CODSTA-233

位字段的类型应具有已定义的大小

CODSTA-234

不要使用 'asm' 声明

CODSTA-235

不应使用库函数 'rewind'、'setbuf' 和 'ctime'

CODSTA-236

不应使用内置的一元 + 运算符

CODSTA-237

不得使用 <cctype> 和 <cwctype> 中的字符处理函数

CODSTA-238

不应使用 <cstring> 中的 C++ 标准库函数 'memcpy'、'memmove' 和 'memcmp'

CODSTA-239

字面值 0 是唯一能够赋给 errno 的值

CODSTA-240

强制转换不应将指针类型转换为 'intptr_t' 和 'uintptr_t' 类型

CODSTA-241

所有 'if...else-if' 构造均应以 'else' 子句结束

CODSTA-242

不得使用 <cstring>、<cstdlib>、<cwchar> 和 <cinttypes> 中的字符串处理函数

CODSTA-243

'switch' 语句不应包含除 'case' 和 'default' 以外的标签

CODSTA-304

位域应具有合适的类型

CODSTA-305

所有枚举值都应能在位域的宽度范围内表示

CODSTA-306

应适当使用 volatile 限定符

CODSTA-307

位运算符和补码运算符的操作数应为 unsigned 类型

CODSTA-308

移位运算符的操作数应为 unsigned 类型

CODSTA-309

只能在合适的上下文中执行从函数类型到函数指针类型的转换

CODSTA-310

整型提升和常规的算术转换不得改变操作数的符号性或类型类别

CODSTA-311

不得将具有自动存储期的对象的地址赋值给生命周期更长的对象

CODSTA-312

数值类型之间的赋值必须合适

CODSTA-313

不得使用无固定基础类型的非作用域枚举的数值

CODSTA-314

'assert' 宏不得与常量表达式一起使用

CODSTA-315

遗留的 'for' 语句应简单明了

CODSTA-61_b

除非测试了所有枚举值,否则 switch 语句的第一个或最后一个标签应为 'default' 标签

CODSTA-63_b

只在无符号操作数上使用位操作符

CODSTA-64_b

每个 switch 分支都应无条件终止

CODSTA-65_b

枚举类型的对象不得转换为指针类型的对象

CODSTA-67_b

同一实体的所有声明应使用相同的类型别名

CODSTA-CPP-110

派生类中的成员变量名不应该与基类中的成员变量名称相同

CODSTA-CPP-111

不应使用 'NULL' 标识符

CODSTA-CPP-112

应使用 std::remove、std::remove_if、std::unique 和 empty 的结果

CODSTA-CPP-113

不应使用 'std::locale::global' 函数

CODSTA-CPP-201

非静态数据成员应全部为 private 或全部为 public

CODSTA-CPP-202

定义枚举应使用显式的基础类型

CODSTA-CPP-203

显式或隐式枚举值不得为收缩转换的结果

CODSTA-CPP-204

typeid 的操作数不得为多态类类型的表达式

CODSTA-CPP-205

用户提供的类的复制成员函数和移动成员函数应有正确的签名

CODSTA-CPP-206

成员函数若返回对其对象的引用,则应正确对其作 ref 限定

CODSTA-CPP-207

通过省略号传递的参数应有正确的类型

CODSTA-CPP-208

不支持异常处理的函数应为 noexcept

CODSTA-CPP-209

用作非 constexpr 非局部变量初始值设定项的函数应为 noexcept

CODSTA-CPP-210

重写虚函数中的参数不得指定不同的默认参数

CODSTA-CPP-211

不得从 bool 类型转换为其他类型

CODSTA-CPP-212

不得从其他类型转换为 bool 类型

CODSTA-CPP-95_b 

不要在标准库命名空间中声明实体: posix、std 和 stdN

CODSTA-MCPP-101

一个 for-range-initializer 应最多包含一个函数调用

CODSTA-MCPP-103

应在非瞬态 lambda 中显式捕获变量

CODSTA-MCPP-104

非瞬态 lambda 不应隐式捕获

CODSTA-MCPP-105

应适当提供特殊成员函数

CODSTA-MCPP-13_c

'std::forward' 函数只能用于转发转发引用

CODSTA-MCPP-13_d

应使用 'std::move' 函数转发右值引用

CODSTA-MCPP-47_b

当 initializer-list 构造函数是唯一的构造函数时,类只能定义一个构造函数

CODSTA-MCPP-57

不应使用 'std::shared_ptr' 和 'std::unique_ptr' 的原始指针构造函数

CODSTA-MCPP-58

不能包含 C++17 标准中已弃用的头文件

CODSTA-MCPP-59

不应使用 C++17 标准中已弃用的 'uncaught_exception' 函数

CODSTA-MCPP-60

'switch' 语句的条件前面只能加上可选的简单声明

CODSTA-MCPP-61

使用对 const 右值引用类型的参数定义 =delete 函数

COMMENT-14_c

每个函数声明都应该有适当的文档

CWE-190-i

在预处理器指令中进行常量无符号整数表达式求值不应导致回绕

EXCEPT-27

'try-block' 中的 'try' 语句应包含可能抛出异常的语句

FORMAT-50

使用括号来表示表达式中运算符的优先级

GLOBAL-NOEXTERNDEF

具有外部链接的标识符应有外部定义

GLOBAL-PREDICATENOSE

谓词不得具有持续的副作用

HICPP-17_3_2-b

'std::forward' 函数只能用于转发转发引用

HICPP-17_3_2-c

应使用 'std::move' 函数转发右值引用

INIT-101

所有具有自动存储期的非类变量都应显式初始化

INIT-19

非 aggregate 类的所有直接非 static 数据成员都应在构造函数主体的顶部进行初始化

INIT-20

aggregate 类的所有直接非 static 数据成员都应在对象创建后立即进行初始化

JSF-203_b

在预处理器指令中进行常量无符号整数表达式求值不应导致回绕

MISRA-051_b

在预处理器指令中进行常量无符号整数表达式求值不应导致回绕

MISRA-102

不应使用两层以上的指针间接引用

MISRA2008-3_2_4_b

具有外部链接的标识符应该只有一个外部定义

MISRA2012-RULE-8_6_b

具有外部链接的标识符应该只有一个外部定义

MISRAC2012-RULE_8_6-b

具有外部链接的标识符应有外部定义

MISRACPP2023-0_0_1-a

在 "else" 语句块中不应存在无法访问的代码

MISRACPP2023-0_0_1-b

在 'return'、'break'、'continue'、'goto'、'throw' 语句之后,以及在对带有 'noreturn' 属性的函数的调用之后不得有无法访问的代码

MISRACPP2023-0_0_1-c

在 "if/else/while/for" 语句块中不应存在无法执行的代码

MISRACPP2023-0_0_1-d

在 switch 语句中不应存在无法执行的代码

MISRACPP2023-0_0_1-e

在 'for' 循环中不应存在无法执行的代码

MISRACPP2023-0_0_1-f

在 'if' 或 'switch' 语句后不应存在不可访问的代码

MISRACPP2023-0_0_1-g

在 while/for/do...while 循环内的 "if" 或 "switch" 语句后不应存在无法执行的代码

MISRACPP2023-0_0_1-h

如果在单个 try-catch 语句或 function-try-block 中为派生类及其部分或全部基类提供了多个处理程序,则处理程序应按最派生类到基类排序

MISRACPP2023-0_0_1-i

如果在 'try-catch' 语句或 'function-try-block' 中提供了多个处理程序,那么任何省略 (catch-all) 处理程序都应该是最后一个

MISRACPP2023-0_0_1-j

'try-block' 中的 'try' 语句应包含可能抛出异常的语句

MISRACPP2023-0_0_2-a

避免始终计算为相同值的条件

MISRACPP2023-0_1_1-a

避免未使用的值

MISRACPP2023-0_1_2-a

应始终使用具有不是重载运算符的非 void 返回类型的函数返回值

MISRACPP2023-0_2_1-a

避免未使用的局部变量

MISRACPP2023-0_2_1-b

项目不应包含具有内部链接的未使用变量

MISRACPP2023-0_2_2-a

消除未使用的参数

MISRACPP2023-0_2_2-b

在虚函数中不应有未使用的命名参数

MISRACPP2023-0_2_3-a

在未命名的命名空间作用域中声明的类型应至少使用一次

MISRACPP2023-0_2_3-b

在块作用域中声明的类型应至少使用一次

MISRACPP2023-0_2_4-a

避免无法到达的方法

MISRACPP2023-0_3_1-a

不要使用对象表示形式来比较浮点值

MISRACPP2023-0_3_1-b

浮点数表达式不应显式(语法上)进行等于(==)或不等于(!=)的测试

MISRACPP2023-0_3_1-c

不得使用浮点变量作为循环计数器

MISRACPP2023-0_3_1-d

不要使用可能导致 NaN 和无穷大值的浮点表达式

MISRACPP2023-0_3_2-a

不要传递不正确的值给库函数

MISRACPP2023-10_0_1-a

每个变量都应该在单独的声明语句中声明

MISRACPP2023-10_1_1-a

如果函数参数中指针参数在函数中不用来修改地址对象,则应声明为常量类型

MISRACPP2023-10_1_1-b

如果指针不用于修改指向地址的对象则声明参数的类型为 typedef 的 const 指针

MISRACPP2023-10_1_1-c

尽可能将引用参数声明为 const 引用

MISRACPP2023-10_1_2-a

应适当使用 volatile 限定符

MISRACPP2023-10_2_1-a

定义枚举应使用显式的基础类型

MISRACPP2023-10_2_1-b

显式或隐式枚举值不得为收缩转换的结果

MISRACPP2023-10_2_2-a

使用作用域枚举类型

MISRACPP2023-10_2_3-a

不得使用无固定基础类型的非作用域枚举的数值

MISRACPP2023-10_3_1-a

头文件中不应有未命名的名称空间

MISRACPP2023-10_4_1-a

不要使用 'asm' 声明

MISRACPP2023-11_3_1-a

不得使用 C 样式数组

MISRACPP2023-11_3_2-a

对象的声明应该包含不超过 2 级指针间接引用

MISRACPP2023-11_6_1-a

所有具有自动存储期的非类变量都应显式初始化

MISRACPP2023-11_6_2-a

避免在初始化之前使用

MISRACPP2023-11_6_3-a

在枚举器列表中,隐式指定枚举常量的值必须是唯一的

MISRACPP2023-12_2_1-a

不要将成员变量声明为位域

MISRACPP2023-12_2_2-a

位域应具有合适的类型

MISRACPP2023-12_2_2-b

所有枚举值都应能在位域的宽度范围内表示

MISRACPP2023-12_2_3-a

由 signed 整型命名的位域应该有超过一位的长度

MISRACPP2023-12_3_1-a

不得使用联合体关键字

MISRACPP2023-13_1_1-a

类不应从虚基类派生

MISRACPP2023-13_1_2-a

在同一层次结构中,基类不能同时具有虚拟及非虚拟的属性

MISRACPP2023-13_3_1-a

每个重写虚函数都应使用 override 或 final 说明符声明

MISRACPP2023-13_3_1-b

在成员函数声明中,只能指定 virtual、override 或 final 中的一个

MISRACPP2023-13_3_2-a

重写虚函数中的参数不得指定不同的默认参数

MISRACPP2023-13_3_3-a

禁止函数声明中使用的标识符与实际定义中的标识符不一致

MISRACPP2023-13_3_3-b

函数所有重写中的参数都应未命名或具有相同的名称

MISRACPP2023-13_3_4-a

指向成员虚函数的指针应只测试是否与空指针常量相等

MISRACPP2023-14_1_1-a

非静态数据成员应全部为 private 或全部为 public

MISRACPP2023-15_0_1-a

应适当提供特殊成员函数

MISRACPP2023-15_0_1-b

析构函数应有一个非空主体

MISRACPP2023-15_0_2-a

用户提供的类的复制成员函数和移动成员函数应有正确的签名

MISRACPP2023-15_1_1-a

不要使用正在构建的对象的动态类型

MISRACPP2023-15_1_1-b

不要使用正在销毁的对象的动态类型

MISRACPP2023-15_1_2-a

一个类的所有构造函数应该显式地为它的所有直接基类和所有虚拟基类调用一个构造函数

MISRACPP2023-15_1_3-a

允许转换的构造函数应该使用 explicit 修饰

MISRACPP2023-15_1_3-b

用户转换强制转换运算符应该使用 explicit 修饰

MISRACPP2023-15_1_4-a

非 aggregate 类的所有直接非 static 数据成员都应在构造函数主体的顶部进行初始化

MISRACPP2023-15_1_4-b

aggregate 类的所有直接非 static 数据成员都应在对象创建后立即进行初始化

MISRACPP2023-15_1_5-a

当 initializer-list 构造函数是唯一的构造函数时,类只能定义一个构造函数

MISRACPP2023-15_8_1-a

用户提供的复制赋值运算符应处理自赋值

MISRACPP2023-16_5_1-a

避免重载逻辑操作符 AND、OR (&&, ||)

MISRACPP2023-16_5_2-a

不得重载一元 & 运算符

MISRACPP2023-16_6_1-a

如果想支持混合模式的运算,运算符应该使用非成员函数

MISRACPP2023-17_8_1-a

不得显式特化函数模板

MISRACPP2023-18_1_1-a

异常对象不应具有指针类型

MISRACPP2023-18_1_2-a

空 throw 应只在 catch 处理程序的复合语句中使用

MISRACPP2023-18_2_2-a

不得使用 <cstring>、<cstdlib>、<cwchar> 和 <cinttypes> 中的字符串处理函数

MISRACPP2023-18_3_1-a

至少应有一个异常处理程序用于捕获所有未处理的异常

MISRACPP2023-18_3_2-a

一个类的类型异常应始终通过引用捕获

MISRACPP2023-18_3_3-a

以 function-try-block 实现的类构造函数或析构函数的处理程序不应引用该类或其基类的非静态成员

MISRACPP2023-18_4_1-a

不支持异常处理的函数应为 noexcept

MISRACPP2023-18_4_1-b

用作非 constexpr 非局部变量初始值设定项的函数应为 noexcept

MISRACPP2023-18_5_1-a

避免从声明不抛出异常的函数中抛出异常

MISRACPP2023-18_5_2-a

不得使用 'stdlib.h' 或 'cstdlib' 库中的 'abort()' 函数

MISRACPP2023-18_5_2-b

不得使用 'stdlib.h' 或 'cstdlib' 库中的 'exit()' 函数

MISRACPP2023-18_5_2-c

不得使用 'stdlib.h' 或 'cstdlib' 库中的 'quick_exit()' 和'_Exit()' 函数

MISRACPP2023-19_0_1-a

预处理指令应在语法上有意义,即使被预处理程序排除的情况下也是如此

MISRACPP2023-19_0_2-a

不得定义类函数宏

MISRACPP2023-19_0_3-a

文件中的 #include 语句前面只能有其他预处理器指令或注释

MISRACPP2023-19_0_4-a

#undef 应仅用于同一文件中先前定义的宏

MISRACPP2023-19_1_1-a

定义的预处理器运算符只能使用两种标准形式中的一种

MISRACPP2023-19_1_2-a

在同一个文件中 #else、#elif 和 #endif 必须对应有 #if 或 #ifdef 预处理指令

MISRACPP2023-19_1_3-a

不要使用在编译单元中未定义的预编译器指令 #if 和 #elif 宏

MISRACPP2023-19_2_1-a

使用多个包含保护

MISRACPP2023-19_2_2-a

#include 指令后面应当添加 <filename> 或是 "filename"

MISRACPP2023-19_2_3-a

非标准字符不应该用于 #include 指令的头文件名称中

MISRACPP2023-19_3_1-a

不应使用预处理器运算符 # 和 ##

MISRACPP2023-19_3_2-a

紧跟 # 运算符之后的宏参数,其后不得紧跟 ## 运算符

MISRACPP2023-19_3_3-a

作为 # 或 ## 操作符的操作对象使用的宏参数,本身要进行进一步的宏替换,所以只能作为这些操作符的操作对象使用

MISRACPP2023-19_3_4-a

在类函数宏指令的定义中,参数的每个实例都应该用圆括号括起来,除非它用作 # 或者 ## 的运算对象

MISRACPP2023-19_3_5-a

传递给类函数宏的实参不得包括看起来像预处理指令的符号

MISRACPP2023-19_6_1-a

不应使用 #pragma 指令

MISRACPP2023-19_6_1-b

不应使用 '_Pragma' 运算符

MISRACPP2023-21_10_1-a

不应使用标识符 va_list、va_arg、va_start、va_end、va_copy

MISRACPP2023-21_10_2-a

不应使用 <setjmp.h> 提供的工具

MISRACPP2023-21_10_2-b

不应使用标准头文件 <setjmp.h> 或 <csetjmp>

MISRACPP2023-21_10_3-a

不得使用 <signal.h> 的信号处理功能

MISRACPP2023-21_2_1-a

不应使用 'stdlib.h' 库中的 'atof'、'atoi'、'atol' 和 'atoll' 库函数

MISRACPP2023-21_2_3-a

不应使用 'stdlib.h' 或 'cstdlib' 库中的 'system()' 函数

MISRACPP2023-21_2_4-a

不应该使用 stddef.h 库文件中的 offsetof 宏

MISRACPP2023-21_6_1-a

不应使用动态堆内存分配

MISRACPP2023-21_6_2-a

不应使用动态堆内存分配

MISRACPP2023-21_6_2-b

不应使用命名空间 'std' 括起来的名为 'allocate' 或 'deallocate' 的成员函数

MISRACPP2023-21_6_2-c

不应使用 'std::unique_ptr::release' 函数

MISRACPP2023-21_6_3-a

不应手动调用析构函数

MISRACPP2023-21_6_3-b

不要声明 'new' 和 'delete' 运算符

MISRACPP2023-21_6_3-c

不应使用 <new> 和 <memory> 头文件中的内存管理函数

MISRACPP2023-21_6_3-d

不应使用高级内存管理运算符 'new' 和 'delete'

MISRACPP2023-21_6_4-a

定义操作符 delete 的分级版本和未分级版本

MISRACPP2023-21_6_5-a

不要在删除点上时删除类不完整的对象

MISRACPP2023-22_3_1-a

'assert' 宏不得与常量表达式一起使用

MISRACPP2023-22_4_1-a

字面值 0 是唯一能够赋给 errno 的值

MISRACPP2023-23_11_1-a

不应使用 'std::shared_ptr' 和 'std::unique_ptr' 的原始指针构造函数

MISRACPP2023-24_5_1-a

不得使用 <cctype> 和 <cwctype> 中的字符处理函数

MISRACPP2023-24_5_2-a

不应使用 <cstring> 中的 C++ 标准库函数 'memcpy'、'memmove' 和 'memcmp'

MISRACPP2023-25_5_1-a

不应使用 'setlocale' 函数

MISRACPP2023-25_5_1-b

不应使用 'std::locale::global' 函数

MISRACPP2023-25_5_2-a

标准库函数 'localeconv'、'getenv'、'setlocale' 或 'strerror' 返回的指针仅当它们具有指向 const 限定类型的指针时使用

MISRACPP2023-25_5_2-b

由结构体 'lconv' 的成员指向的字符串不应被修改

MISRACPP2023-25_5_2-c

不应使用 'localeconv'、'getenv'、'setlocale' 或 'strerror' 函数的地址

MISRACPP2023-25_5_3-a

某些标准库函数返回的指针不应在对相同或相关函数的后续调用之后使用

MISRACPP2023-26_3_1-a

避免使用 vector<bool>

MISRACPP2023-28_3_1-a

谓词不得具有持续的副作用

MISRACPP2023-28_6_1-a

不要在以 const 或 const&type 声明的对象上使用 std :: move

MISRACPP2023-28_6_2-a

应使用 'std::forward' 函数来转发转发引用

MISRACPP2023-28_6_2-b

'std::forward' 函数只能用于转发转发引用

MISRACPP2023-28_6_3-a

以后不要将参数用于 std::forward

MISRACPP2023-28_6_3-b

不要依赖于从对象移动来的值

MISRACPP2023-28_6_4-a

应使用 std::remove、std::remove_if、std::unique 和 empty 的结果

MISRACPP2023-30_0_1-a

禁止使用库文件 stdio.h 中的输入/输出函数

MISRACPP2023-30_0_1-b

不应使用 'cstdio' 和 'cwchar' 库中的输入/输出函数

MISRACPP2023-30_0_2-a

不要从一个流中交替地输入和输出,却没有间隔刷新或定位调用

MISRACPP2023-4_1_2-a

不能包含 C++17 标准中已弃用的头文件

MISRACPP2023-4_1_2-b

不应使用 C++17 标准中已弃用的 'uncaught_exception' 函数

MISRACPP2023-4_1_2-c

不使用 throw 异常规范

MISRACPP2023-4_1_2-d

不应在类定义之外声明 constexpr 静态数据成员

MISRACPP2023-4_1_3-a

避免不正确的位移操作

MISRACPP2023-4_1_3-b

避免有符号整数溢出

MISRACPP2023-4_1_3-c

避免空指针引用

MISRACPP2023-4_1_3-d

避免除零错误

MISRACPP2023-4_6_1-a

表达式的值应该在任何标准允许的赋值顺序下是一样的

MISRACPP2023-4_6_1-b

不要编写依赖于函数参数求值顺序的代码

MISRACPP2023-4_6_1-c

不要编写依赖于函数标志符和函数参数的求值顺序的代码

MISRACPP2023-4_6_1-d

涉及一个函数调用时,不要编写依赖表达式求值顺序的代码

MISRACPP2023-4_6_1-e

在序列点之间,对象的存储值最多只能通过表达式的评估来修改一次

MISRACPP2023-4_6_1-f

不要在两个相邻的序列点之间使用多个 volatile

MISRACPP2023-4_6_1-g

不要编写依赖于函数调用求值顺序的代码

MISRACPP2023-5_0_1-a

不得使用三联符

MISRACPP2023-5_10_1-a

不要在标准库命名空间中声明实体: posix、std 和 stdN

MISRACPP2023-5_10_1-b

标识符的名字不能以一个下划线 (`_') 或两个下划线 (`__') 开头

MISRACPP2023-5_10_1-c

标识符不得包含双下划线 '__'

MISRACPP2023-5_10_1-d

用户定义的文字操作符的后缀应该以下划线和一个或多个字母开头

MISRACPP2023-5_10_1-e

用户定义的字面量后缀前应直接为字面量运算符

MISRACPP2023-5_10_1-f

宏标识符应具有正确的形式

MISRACPP2023-5_10_1-g

不要声明标准库中保留了名称的标识符

MISRACPP2023-5_13_1-a

应仅使用 ISO/IEC 14882:2014 中定义的转义序列

MISRACPP2023-5_13_2-a

应结束八进制和十六进制转义序列

MISRACPP2023-5_13_3-a

不得使用八进制字面量(除了零)

MISRACPP2023-5_13_4-a

'U' 后缀应用于所有无符号类型的常量

MISRACPP2023-5_13_5-a

使用大写字母 'L' 而不是小写字母 'l' 来表示 long

MISRACPP2023-5_13_6-a

long long 类型的整型字面量不得在任何后缀中使用单个 'L' 或 'l'

MISRACPP2023-5_13_7-a

不应连接具有不同编码前缀的字符串文字

MISRACPP2023-5_13_7-b

带编码前缀和不带编码前缀的字符串字面量不应连接在一起

MISRACPP2023-5_7_1-a

不得在 C 语言风格的注释中使用 /* 字符序列

MISRACPP2023-5_7_2-a

代码段不应该被 "注释掉"

MISRACPP2023-5_7_3-a

不得在 // 注释中使用行合并

MISRACPP2023-6_0_1-a

始终在文件的范围内声明函数

MISRACPP2023-6_0_1-b

函数声明中的参数名不应该用括号括起来

MISRACPP2023-6_0_1-c

变量声明中的局部变量名不应该用括号括起来

MISRACPP2023-6_0_2-a

带有外部链接的数组,其大小应该显式地声明或者在初始化时隐性地定义

MISRACPP2023-6_0_3-a

全局命名空间应只能包含 main() 和命名空间的声明

MISRACPP2023-6_0_4-a

main 标识符不能用于全局函数 main 以外的函数

MISRACPP2023-6_2_1-a

不应违反单个定义规则

MISRACPP2023-6_2_2-a

所有对象或函数的声明应有匹配的类型

MISRACPP2023-6_2_2-b

如果函数声明时有异常规范,那么所有相同函数的声明 (在其他编译单元中) 都应使用相同的 type-id 集合声明

MISRACPP2023-6_2_3-a

具有外部链接的标识符应只有不超过一个外部定义

MISRACPP2023-6_2_3-b

在多个编译单元中使用的类型应只在一个文件中定义

MISRACPP2023-6_2_3-c

在多个编译单元中使用的内联函数应只在一个文件中定义

MISRACPP2023-6_2_3-d

模板专门化应声明在与主模板或用户定义类型相同的文件中,为其声明专门化

MISRACPP2023-6_2_4-a

头文件不得包含非内联和有外部链接的函数或对象的定义

MISRACPP2023-6_4_1-a

在局部或者函数原型体范围内声明的标识符不应该隐藏一个在全局或者命名空间范围内声明的标识符

MISRACPP2023-6_4_1-b

在内层的局部范围内声明的标识符不应该隐藏在外层的局部范围内声明的标识符

MISRACPP2023-6_4_1-c

在一个局部范围内声明的标识符不应该隐藏在一个类作用域中声明的标识符

MISRACPP2023-6_4_1-d

在类的作用域中声明的标识符不应该隐藏在全局或命名空间范围内声明的标识符

MISRACPP2023-6_4_1-e

在一个内部类作用域中声明的标识符不应该隐藏在外部类作用域中声明的标识符

MISRACPP2023-6_4_1-f

派生类中的成员变量名不应该与基类中的成员变量名称相同

MISRACPP2023-6_4_2-a

禁止对继承的非虚拟函数进行重定义

MISRACPP2023-6_4_2-b

派生类里声明的成员函数不应该隐藏基类中声明的函数

MISRACPP2023-6_4_3-a

在含有依赖基础的类模板中,任何可能在这个依赖类中被发现的名称都应该引用使用限定标识 (qualified-id) 或 ->

MISRACPP2023-6_5_1-a

应该在头文件中声明具有外部链接的对象或函数

MISRACPP2023-6_5_2-a

除非是在函数和类中,否则不要使用 static 关键字

MISRACPP2023-6_5_2-b

标识符在同一编译单元中不能同时具有内部和外部链接

MISRACPP2023-6_7_1-a

局部变量不应具有静态存储周期

MISRACPP2023-6_7_2-a

避免未封装的全局变量 (包括在命名空间中声明的变量和 public 静态成员)

MISRACPP2023-6_8_1-a

不要指向已被释放的包装对象

MISRACPP2023-6_8_1-b

不要读取非活动 union 字段的值

MISRACPP2023-6_8_1-c

不要使用生命周期已结束的对象

MISRACPP2023-6_8_2-a

不得从函数中返回具有自动存储的对象的地址

MISRACPP2023-6_8_2-b

永远不要返回通过引用捕获本地对象的 lambda

MISRACPP2023-6_8_3-a

不得将具有自动存储期的对象的地址赋值给生命周期更长的对象

MISRACPP2023-6_8_4-a

成员函数若返回对其对象的引用,则应正确对其作 ref 限定

MISRACPP2023-6_9_1-a

同一实体的所有声明应使用相同的类型别名

MISRACPP2023-6_9_2-a

不应使用标准有符号整型和标准无符号整型的名称

MISRACPP2023-7_0_1-a

不得从 bool 类型转换为其他类型

MISRACPP2023-7_0_2-a

不得从其他类型转换为 bool 类型

MISRACPP2023-7_0_3-a

普通字符 (plain char) 类型只能用于存储和使用字符值

MISRACPP2023-7_0_3-b

带符号的 char 和 不带符号的 char 类型只能用于存储和数值类型

MISRACPP2023-7_0_4-a

位运算符和补码运算符的操作数应为 unsigned 类型

MISRACPP2023-7_0_4-b

移位运算符的操作数应为 unsigned 类型

MISRACPP2023-7_0_5-a

整型提升和常规的算术转换不得改变操作数的符号性或类型类别

MISRACPP2023-7_0_6-a

数值类型之间的赋值必须合适

MISRACPP2023-7_11_1-a

首选 'nullptr' 而不是 'NULL' 或 '0' (零)

MISRACPP2023-7_11_1-b

不应使用 'NULL' 标识符

MISRACPP2023-7_11_2-a

不要将具有数组类型的表达式传递给一个具有指针或者数组类型参数的函数

MISRACPP2023-7_11_3-a

只能在合适的上下文中执行从函数类型到函数指针类型的转换

MISRACPP2023-8_0_1-a

'sizeof' 运算符的操作数应括在括号中

MISRACPP2023-8_0_1-b

使用括号来表示表达式中运算符的优先级

MISRACPP2023-8_14_1-a

逻辑 && 或 || 运算符的右操作数不得含有副作用

MISRACPP2023-8_18_1-a

不应将对象分配或复制到重叠的对象

MISRACPP2023-8_18_1-b

不应该将结构体自身的一个成员变量赋给另一个成员变量

MISRACPP2023-8_18_1-c

不应该将结构体自身的一个成员变量赋给另一个成员变量

MISRACPP2023-8_18_2-a

不得使用一个内置赋值运算符的结果

MISRACPP2023-8_19_1-a

不得使用逗号运算符

MISRACPP2023-8_1_1-a

非瞬态 lambda 不应隐式捕获

MISRACPP2023-8_1_2-a

应在非瞬态 lambda 中显式捕获变量

MISRACPP2023-8_20_1-a

对常量 unsigned 整数表达式求值不应导致回绕

MISRACPP2023-8_20_1-b

在预处理器指令中进行常量无符号整数表达式求值不应导致回绕

MISRACPP2023-8_2_1-a

指向虚拟基类的指针只能通过 dynamic_cast 转换为指向派生类的指针

MISRACPP2023-8_2_10-a

不要使用递归

MISRACPP2023-8_2_11-a

通过省略号传递的参数应有正确的类型

MISRACPP2023-8_2_2-a

不得使用 C 语言风格的强制类型转换(除 void 强制类型转换)和函数符号式强制类型转换(除了显式的构造函数调用)

MISRACPP2023-8_2_3-a

强制类型转换不应从指针或引用的类型中删除任何 'const' 或 'volatile' 限定

MISRACPP2023-8_2_4-a

不得在函数指针和任何其他类型之间进行强制转换

MISRACPP2023-8_2_5-a

避免使用强制类型转换符 reinterpret_cast

MISRACPP2023-8_2_6-a

具有整数类型的对象或指向 void 类型的指针不应转换为具有指针类型的对象

MISRACPP2023-8_2_6-b

枚举类型的对象不得转换为指针类型的对象

MISRACPP2023-8_2_7-a

不允许指针类型和整数类型之间进行类型转换

MISRACPP2023-8_2_7-b

强制转换不应将指针类型转换为 'intptr_t' 和 'uintptr_t' 类型

MISRACPP2023-8_2_8-a

不允许指针类型和整数类型之间进行类型转换

MISRACPP2023-8_2_9-a

typeid 的操作数不得为多态类类型的表达式

MISRACPP2023-8_3_1-a

一目减算符不适用于其原始类型是无符号型的表达式

MISRACPP2023-8_3_2-a

不应使用内置的一元 + 运算符

MISRACPP2023-8_7_1-a

避免访问数组越界

MISRACPP2023-8_7_1-b

一个指针操作数和使用这个操作数的指针算法所产生的任何指针都应该处理相同数组的元素

MISRACPP2023-8_7_1-c

避免读取缓冲区时导致的溢出

MISRACPP2023-8_7_1-d

避免写入缓冲区时导致的溢出

MISRACPP2023-8_7_1-e

避免由于读取非零终止字符串而导致的溢出

MISRACPP2023-8_7_2-a

不要减去两个不解决同一数组元素的指针

MISRACPP2023-8_9_1-a

不要比较两个不相关的指针

MISRACPP2023-9_2_1-a

表达式语句不能只显式调用临时对象的构造函数

MISRACPP2023-9_3_1-a

构成 'switch'、'while'、'do...while' 或 'for' 语句体的语句应该是一个复合语句

MISRACPP2023-9_3_1-b

'if' 和 'else' 后面应该跟一个复合语句

MISRACPP2023-9_4_1-a

所有 'if...else-if' 构造均应以 'else' 子句结束

MISRACPP2023-9_4_2-a

除非测试了所有枚举值,否则 switch 语句的第一个或最后一个标签应为 'default' 标签

MISRACPP2023-9_4_2-b

每个 switch 分支都应无条件终止

MISRACPP2023-9_4_2-c

只有当最紧密包围的复合语句是 switch 语句的主体时才能使用 switch 标签

MISRACPP2023-9_4_2-d

switch 语句应该只包含 switch 标签和 switch 子句,不能包含其他代码

MISRACPP2023-9_4_2-e

每一个 switch 语句应该含有至少两个 switch 子句

MISRACPP2023-9_4_2-f

'switch' 语句不应包含除 'case' 和 'default' 以外的标签

MISRACPP2023-9_4_2-g

'switch' 语句的条件前面只能加上可选的简单声明

MISRACPP2023-9_5_1-a

遗留的 'for' 语句应简单明了

MISRACPP2023-9_5_2-a

一个 for-range-initializer 应最多包含一个函数调用

MISRACPP2023-9_6_1-a

不应该使用 goto 语句

MISRACPP2023-9_6_2-a

任何 goto 语句引用的标签应该被声明在相同的块中,或在关闭 goto 语句的块中

MISRACPP2023-9_6_3-a

goto 语句应该跳转到同一个函数体中位于 goto 语句后面声明的标签

MISRACPP2023-9_6_4-a

不要从不应该返回值的函数中返回

MISRACPP2023-9_6_5-a

除 main() 外,具有非 void 返回类型的函数的所有退出路径都应具有带有表达式的显式 return 语句

MRM-59

不要声明 'new' 和 'delete' 运算符

MRM-60

不应使用 <new> 和 <memory> 头文件中的内存管理函数

MRM-61

不应使用高级内存管理运算符 'new' 和 'delete'

MRM-62_a

不应使用命名空间 'std' 括起来的名为 'allocate' 或 'deallocate' 的成员函数

MRM-62_b

不应使用 'std::unique_ptr::release' 函数

NAMING-33_b

标识符不得包含双下划线 '__'

NAMING-51_b

用户定义的字面量后缀前应直接为字面量运算符

NAMING-55

宏标识符应具有正确的形式

NAMING-56

不要声明标准库中保留了名称的标识符

NAMING-57

函数所有重写中的参数都应未命名或具有相同的名称

OPT-44

不应在类定义之外声明 constexpr 静态数据成员

OPT-45

具有内部链接的 non-const 对象,如果只能在单个函数中访问,则应在函数作用域中定义

OPT-46

在未命名的命名空间作用域中声明的类型应至少使用一次

OPT-47

在块作用域中声明的类型应至少使用一次

OPT-48

析构函数应有一个非空主体

PB-38_c

带编码前缀和不带编码前缀的字符串字面量不应连接在一起

PB-73_b

在预处理器指令中进行常量无符号整数表达式求值不应导致回绕

PORT-38

long long 类型的整型字面量不得在任何后缀中使用单个 'L' 或 'l'

PREPROC-23_b

不应使用 '_Pragma' 运算符

PREPROC-25_b

#undef 应仅用于同一文件中先前定义的宏

PREPROC-28

不得定义类函数宏

SECURITY-54

不要对字符串对象使用 'c_str()' 和 'data()' 函数

TEMPL-09_b

不得显式特化函数模板

更新规则

2023.2.1

类别 ID

规则 ID

AUTOSAR C++14 编码指南

AUTOSAR-A0_1_2-a, AUTOSAR-A12_4_2-a, AUTOSAR-A14_8_2-a, AUTOSAR-M0_1_2-d, AUTOSAR-M0_1_3-c, AUTOSAR-M0_3_2-a, AUTOSAR-M14_6_1-a, AUTOSAR-M3_2_2-a, AUTOSAR-M3_2_4-a, AUTOSAR-M3_2_4-b, AUTOSAR-M6_4_2-a, AUTOSAR-M8_5_2-c

C++ 编码规范

CODSTA-CPP-212, CODSTA-CPP-58

Modern C++ 编码规范

CODSTA-MCPP-23

编码规范

CODSTA-122_a, CODSTA-242

常见缺陷列表

CWE-190-g

全局静态分析

GLOBAL-NOEXTERNDEF, GLOBAL-ONEDEFRULE, GLOBAL-ONEEXTERNDEF, GLOBAL-TEMPLNOINST

High Integrity C++

HICPP-14_2_2-a, HICPP-6_1_2-a

初始化

INIT-101

联合攻击战斗机

JSF-105, JSF-115, JSF-115_a, JSF-203

MISRA C 1998

MISRA-051

MISRA C 2004

MISRA2004-13_7_n, MISRA2004-14_10, MISRA2004-16_10, MISRA2004-9_2_c

MISRA C 2012(遗留)

MISRA2012-RULE-15_7, MISRA2012-RULE-17_7_a, MISRA2012-RULE-8_6, MISRA2012-RULE-8_6_b

MISRA C 2023 (MISRA C 2012)

MISRAC2012-RULE_15_7-a, MISRAC2012-RULE_17_7-a, MISRAC2012-RULE_8_6-a, MISRAC2012-RULE_8_6-b

MISRA C++ 2008

MISRA2008-0_1_2_t, MISRA2008-0_1_3_c, MISRA2008-0_1_7, MISRA2008-0_3_2, MISRA2008-14_6_1, MISRA2008-14_7_1, MISRA2008-14_8_1, MISRA2008-3_2_2, MISRA2008-3_2_4, MISRA2008-3_2_4_b, MISRA2008-6_4_2, MISRA2008-8_5_2_c

MISRA C++ 2023

MISRACPP2023-0_1_2-a, MISRACPP2023-11_6_1-a, MISRACPP2023-6_2_1-a, MISRACPP2023-6_2_3-a, MISRACPP2023-6_4_3-a, MISRACPP2023-7_0_2-a, MISRACPP2023-8_20_1-a

最优化

OPT-05

潜在的缺陷

PB-73

SEI CERT C++

CERT_CPP-DCL60-a

SEI CERT C

CERT_C-EXP12-a, CERT_C-MSC01-a, CERT_C-MSC14-a, CERT_C-MSC15-a

模板

TEMPL-09, TEMPL-12

2023.2.0

类别 ID

规则 ID

AUTOSAR C++14 编码指南

AUTOSAR-A0_1_1-a, AUTOSAR-A0_1_2-a, AUTOSAR-A0_1_3-a, AUTOSAR-A0_1_4-a, AUTOSAR-A0_1_6-a, AUTOSAR-A12_8_3-a, AUTOSAR-A13_2_3-a, AUTOSAR-A13_3_1-a, AUTOSAR-A15_4_2-a, AUTOSAR-A18_0_3-b, AUTOSAR-A18_9_2-a, AUTOSAR-A23_0_2-a, AUTOSAR-A27_0_2-a, AUTOSAR-A27_0_2-b, AUTOSAR-A27_0_3-a, AUTOSAR-A2_10_1-d, AUTOSAR-A3_1_1-a, AUTOSAR-A3_3_1-b, AUTOSAR-A4_10_1-b, AUTOSAR-A5_0_3-a, AUTOSAR-A5_16_1-a, AUTOSAR-A5_1_4-a, AUTOSAR-A5_2_5-a, AUTOSAR-A5_2_5-c, AUTOSAR-A5_6_1-a, AUTOSAR-A7_1_1-a, AUTOSAR-A7_1_1-b, AUTOSAR-A7_1_3-a, AUTOSAR-A7_2_5-a, AUTOSAR-A7_4_1-a, AUTOSAR-A8_4_2-a, AUTOSAR-A8_4_3-b, AUTOSAR-A8_4_9-a, AUTOSAR-A8_5_0-a, AUTOSAR-A8_5_4-a, AUTOSAR-A9_3_1-a, AUTOSAR-A9_3_1-b, AUTOSAR-A9_6_1-a, AUTOSAR-M0_1_1-b, AUTOSAR-M0_1_10-a, AUTOSAR-M0_1_10-b, AUTOSAR-M0_1_2-ac, AUTOSAR-M0_1_2-b, AUTOSAR-M0_1_2-e, AUTOSAR-M0_1_2-f, AUTOSAR-M0_1_2-g, AUTOSAR-M0_1_3-c, AUTOSAR-M0_1_4-a, AUTOSAR-M0_3_1-a, AUTOSAR-M0_3_1-b, AUTOSAR-M0_3_1-c, AUTOSAR-M0_3_1-d, AUTOSAR-M0_3_1-e, AUTOSAR-M0_3_1-g, AUTOSAR-M15_1_2-a, AUTOSAR-M16_1_1-a, AUTOSAR-M3_4_1-a, AUTOSAR-M3_4_1-b, AUTOSAR-M5_0_16-a, AUTOSAR-M5_0_16-b, AUTOSAR-M5_0_17-a, AUTOSAR-M5_0_18-a, AUTOSAR-M5_2_8-a, AUTOSAR-M7_1_2-c, AUTOSAR-M9_3_3-a

C++ 编码规范

CODSTA-CPP-101, CODSTA-CPP-43, CODSTA-CPP-50, CODSTA-CPP-53, CODSTA-CPP-53_b, CODSTA-CPP-58, CODSTA-CPP-78, CODSTA-CPP-84

Modern C++ 编码规范

CODSTA-MCPP-04, CODSTA-MCPP-13_b, CODSTA-MCPP-14, CODSTA-MCPP-17, CODSTA-MCPP-47

Coding Conventions for Modern C

CODSTA-MC-101

编码规范

CODSTA-04, CODSTA-122_a, CODSTA-185_a, CODSTA-185_b, CODSTA-224, CODSTA-227, CODSTA-301, CODSTA-302, CODSTA-55, CODSTA-65, CODSTA-89

常见缺陷列表

CWE-119-a, CWE-119-e, CWE-125-a, CWE-190-g, CWE-787-a, CWE-787-d

DISA ASD STIG

APSC_DV-002590-b, APSC_DV-002590-d

异常

EXCEPT-12

流分析

BD-CO-ITMOD, BD-PB-ARRAY, BD-PB-BYTEORD, BD-PB-CC, BD-PB-NOEXCEPT, BD-PB-NOTINIT, BD-PB-OVERFNZT, BD-PB-OVERFWR, BD-PB-OVERLAP, BD-PB-POVR, BD-PB-PTRARR, BD-PB-PTRCMP, BD-PB-PTRSUB, BD-PB-STREAMINOUT, BD-PB-SUBSEQFWRD, BD-PB-SUBSEQMOVE, BD-PB-VOVR, BD-PB-ZERO

代码格式

FORMAT-47_b

全局静态分析

GLOBAL-ONEUSEVAR , GLOBAL-UNUSEDFUNC, GLOBAL-UNUSEDTYPE

High Integrity C++

HICPP-13_1_2-a, HICPP-13_2_2-a, HICPP-14_2_1-a, HICPP-15_3_2-c, HICPP-17_3_2-a, HICPP-1_2_1-b, HICPP-1_2_1-i, HICPP-2_5_3-a, HICPP-3_1_1-d, HICPP-3_5_1-c, HICPP-3_5_1-d, HICPP-5_2_1-a, HICPP-5_5_1-a, HICPP-5_8_1-a, HICPP-6_1_3-a, HICPP-6_3_2-a, HICPP-6_4_1-a, HICPP-7_1_2-a, HICPP-7_1_2-b, HICPP-7_4_1-a, HICPP-8_1_1-a, HICPP-8_4_1-a, HICPP-9_1_1-a, HICPP-9_1_4-a

联合攻击战斗机

JSF-019, JSF-039_a, JSF-070.1_b, JSF-104, JSF-114, JSF-115_a, JSF-117.1, JSF-135_d, JSF-136_b, JSF-148, JSF-170, JSF-171, JSF-186_b, JSF-186_h, JSF-203

内存和资源管理

MRM-31_b

MISRA C 1998

MISRA-051, MISRA-071_a, MISRA-071_b, MISRA-084, MISRA-121_a

MISRA C 2004

MISRA2004-13_7_s, MISRA2004-13_7_t, MISRA2004-13_7_u, MISRA2004-13_7_v, MISRA2004-14_1_b, MISRA2004-16_8, MISRA2004-16_8_b, MISRA2004-17_5, MISRA2004-19_14, MISRA2004-8_1_a, MISRA2004-8_1_b

MISRA C 2012(遗留)

MISRA2012-DIR-4_1_a, MISRA2012-DIR-4_1_c, MISRA2012-DIR-4_1_e, MISRA2012-DIR-4_1_h, MISRA2012-DIR-4_1_i, MISRA2012-DIR-4_1_j, MISRA2012-RULE-11_8, MISRA2012-RULE-12_1_a, MISRA2012-RULE-12_2_b, MISRA2012-RULE-14_3_zc, MISRA2012-RULE-17_3, MISRA2012-RULE-17_4, MISRA2012-RULE-17_4_b, MISRA2012-RULE-17_7_a, MISRA2012-RULE-18_1_a, MISRA2012-RULE-18_1_c, MISRA2012-RULE-18_2, MISRA2012-RULE-18_3, MISRA2012-RULE-18_5, MISRA2012-RULE-19_1_c, MISRA2012-RULE-1_3_a, MISRA2012-RULE-1_3_b, MISRA2012-RULE-1_3_e, MISRA2012-RULE-20_11, MISRA2012-RULE-20_8, MISRA2012-RULE-21_17_a, MISRA2012-RULE-21_17_b, MISRA2012-RULE-21_19_a, MISRA2012-RULE-21_19_b, MISRA2012-RULE-22_13, MISRA2012-RULE-2_1_b, MISRA2012-RULE-2_2_b, MISRA2012-RULE-9_1

MISRA C 2023 (MISRA C 2012)

MISRAC2012-DIR_4_1-a, MISRAC2012-DIR_4_1-c, MISRAC2012-DIR_4_1-e, MISRAC2012-DIR_4_1-h, MISRAC2012-DIR_4_1-i, MISRAC2012-DIR_4_1-j, MISRAC2012-RULE_11_8-a, MISRAC2012-RULE_12_1-a, MISRAC2012-RULE_12_2-b, MISRAC2012-RULE_14_3-ac, MISRAC2012-RULE_17_3-a, MISRAC2012-RULE_17_4-a, MISRAC2012-RULE_17_4-b, MISRAC2012-RULE_17_7-a, MISRAC2012-RULE_18_1-a, MISRAC2012-RULE_18_1-c, MISRAC2012-RULE_18_2-a, MISRAC2012-RULE_18_3-a, MISRAC2012-RULE_18_5-a, MISRAC2012-RULE_19_1-c, MISRAC2012-RULE_1_3-a, MISRAC2012-RULE_1_3-b, MISRAC2012-RULE_1_3-e, MISRAC2012-RULE_20_11-a, MISRAC2012-RULE_20_8-a, MISRAC2012-RULE_21_17-a, MISRAC2012-RULE_21_17-b, MISRAC2012-RULE_21_19-a, MISRAC2012-RULE_21_19-b, MISRAC2012-RULE_22_13-a, MISRAC2012-RULE_2_1-b, MISRAC2012-RULE_2_2-b, MISRAC2012-RULE_9_1-a

MISRA C++ 2008

MISRA2008-0_1_10, MISRA2008-0_1_10_b, MISRA2008-0_1_1_b, MISRA2008-0_1_2_aa, MISRA2008-0_1_2_sz, MISRA2008-0_1_2_u, MISRA2008-0_1_2_v, MISRA2008-0_1_2_w, MISRA2008-0_1_3_c, MISRA2008-0_1_4, MISRA2008-0_1_5, MISRA2008-0_1_6, MISRA2008-0_1_7, MISRA2008-0_3_1_a, MISRA2008-0_3_1_c, MISRA2008-0_3_1_e, MISRA2008-0_3_1_h, MISRA2008-0_3_1_i, MISRA2008-0_3_1_j, MISRA2008-14_7_3, MISRA2008-15_1_2, MISRA2008-15_5_2_b, MISRA2008-15_5_3_l, MISRA2008-16_1_1, MISRA2008-3_1_1, MISRA2008-3_4_1_a, MISRA2008-3_4_1_b, MISRA2008-5_0_16_a, MISRA2008-5_0_16_b, MISRA2008-5_0_17, MISRA2008-5_0_18, MISRA2008-5_0_19, MISRA2008-5_2_8, MISRA2008-7_1_1, MISRA2008-7_1_1_b, MISRA2008-7_1_2_b, MISRA2008-8_4_3, MISRA2008-9_3_2_a, MISRA2008-9_3_2_b, MISRA2008-9_3_3

面向对象

OOP-12, OOP-36

最优化

OPT-01, OPT-03, OPT-05, OPT-30

OWASP API 10 项安全风险 (2019)

OWASP2019-API3-b, OWASP2019-API3-e, OWASP2019-API3-g

物理文件组织

PFO-01

潜在的缺陷

PB-20, PB-73

预处理

PREPROC-16, PREPROC-19

安全性

SECURITY-09

SEI CERT C++

CERT_CPP-CTR51-a, CERT_CPP-CTR54-b, CERT_CPP-CTR54-c, CERT_CPP-DCL60-a, CERT_CPP-ERR50-m, CERT_CPP-EXP53-a, CERT_CPP-EXP61-a, CERT_CPP-EXP63-a, CERT_CPP-FIO50-a, CERT_CPP-MSC52-a, CERT_CPP-OOP51-a, CERT_CPP-STR50-b, CERT_CPP-STR50-c

SEI CERT C

CERT_C-API01-a, CERT_C-ARR30-a, CERT_C-ARR36-a, CERT_C-ARR36-b, CERT_C-ARR38-b, CERT_C-ARR38-d, CERT_C-ARR39-a, CERT_C-DCL00-a, CERT_C-DCL00-b, CERT_C-DCL19-a, CERT_C-DCL22-a, CERT_C-ENV01-c, CERT_C-ENV30-a, CERT_C-ERR07-b, CERT_C-EXP08-b, CERT_C-EXP12-a, CERT_C-EXP33-a, CERT_C-EXP37-d, CERT_C-FIO37-a, CERT_C-FIO39-a, CERT_C-FLP03-a, CERT_C-INT13-a, CERT_C-INT33-a, CERT_C-MSC07-b, CERT_C-MSC12-b, CERT_C-MSC12-j, CERT_C-MSC14-a, CERT_C-MSC15-a, CERT_C-MSC19-a, CERT_C-MSC37-a, CERT_C-POS30-a, CERT_C-POS39-a, CERT_C-POS54-a, CERT_C-STR03-a, CERT_C-STR31-a, CERT_C-STR31-b, CERT_C-STR32-a

模板

TEMPL-10

删除的规则

2023.2.1

规则 ID

注意

MISRACPP2023-18_2_2-a

应改用 MISRACPP2023-21_2_2-a

2023.2.0

规则 ID

注意

AUTOSAR-M0_1_3-b

从 AUTOSAR C++ 14 配置中删除。对于其他配置,可以使用 OPT-06 作为替代。

CERT_C-ERR33-b

从 CERT C 配置中删除。对于其他配置,可以使用 CODSTA-122_b 作为替代。

JSF-117_a

从 JSF 配置中删除。对于其他配置,可以使用 PB-20 作为替代。

MISRA2008-0_1_3_b

从 MISRA C++ 2008 配置中删除。对于其他配置,可以使用 OPT-06 作为替代。

MISRA2012-RULE-12_1_b

从 MISRA C 2012 (遗留) 配置中删除。对于其他配置,可以使用 MISRA2004-12_5 作为替代。

MISRAC2012-RULE_12_1-b

从 MISRA C 2023 (MISRA C 2012) 配置中删除。对于其他配置,可以使用 MISRA2004-12_5 作为替代。

MISRACPP202X(所有规则)

应改用 MISRA C++ 2023 规则。

  • No labels