- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在此规则中,您必须转到 ISO/IEC 9899:1990 附录 G 并研究每个实现定义行为的案例以记录它们。
确定要在代码中执行哪些手动检查是一项艰巨的任务。
是否有某种类型的手动检查列表需要根据此规则执行?
最佳答案
MISRA-C 主要关注避免 C 语言中的不可预测行为,即所有 C 开发人员都应该意识到的“陷阱和隐患”(例如未定义和未指定的行为),编译器不会总是警告您。这包括实现定义的行为,其中 C 标准指定某些构造在编译后的行为可能会有所不同。从安全的角度来看,这些往往不太重要,前提是编译器文档按照标准要求描述了其预期行为。
也就是说,对于每个特定的编译器,行为都是明确定义的,但要确保开发人员已经验证了这一点,包括记录语言扩展、编译器(和构建链)中的已知错误和解决方法。
虽然可以完全手动检查 C 代码是否符合 MISRA-C 规范,但不建议这样做。这些指南是在考虑静态分析工具的情况下制定的。并非所有指南都可以通过工具进行全面检查,但是更好的 MISRA-C 工具(在评估时要小心,“好的”工具不多),至少可以帮助它自动识别代码依赖于特定实现的地方行为。这包括规则 3.1 中要求的所有检查,如果工具无法完全检查实现定义的行为,则需要进行人工审查。
此外,如果您要开始一个新的 MISRA-C 项目,我强烈建议您引用 MISRA-C:2012,即使您需要符合 MISRA-C:2004。拥有 MISRA-C:2012 会有所帮助,因为它阐明了许多指南,包括额外的基本原理、解释和示例。该标准(可在 misra-c.com 获得)列出了 C90 和 C99 实现定义的行为,这些行为被认为有可能导致意外行为。这可能会或可能不会与解决 MISRA-C 特别关注的实现定义行为的指南重叠。
关于c - misra c 2004 "Implementation-defined behavior documented"规则 3.1 涵盖的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32436981/
我无法解决此行中的 Misra 规则 11.6 警告: uint32_t * delay = (uint32_t *)0x40086D0C ; [仅供引用: typedef long unsigned
MISRA 标准不允许在宏定义中使用字符串化运算符在不使用 # 运算符的情况下实现相同概念的替代方法是什么? 最佳答案 实际上并没有任何直接的替代方案——只有变通办法。此建议规则与建议不要使用类似函数
MISRA 标准不允许在宏定义中使用字符串化运算符在不使用 # 运算符的情况下实现相同概念的替代方法是什么? 最佳答案 实际上并没有任何直接的替代方案——只有变通办法。此建议规则与建议不要使用类似函数
我对misra和按位运算有一些理解问题。 我有以下操作: ((in >> bit) & 1u) 这里in有类型 unsigned short和 bit有类型 int . 1u应该是 unsigned
根据 MISRA 规则,我遇到此错误:不能对有符号整数执行按位运算。 typedef unsigned __int8 gUBYTE; typedef gUBYTE gBORDER;
C标准要求,在表达式中使用时,排名低于“int”且其值在“int”范围内的无符号类型的值总是提升为“signed int”。因此,假设如下: uint8_t a,b; if ((a-b) > (uin
我有这个功能: void InitS(unsigned int &numS){ // this function returns a container for unsigned int
我需要一些关于 C++ 内存管理和 MISRA 指南的说明.. 我必须实现一个与 MISRA 兼容的程序,所以我必须遵守一条重要规则:不可能使用"new"运算符(动态内存堆)。 在这种情况下,对于任何
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 6 年前。
我了解 MISRA-C 标准适用于嵌入式固件。当嵌入式 Linux 是您的产品平台时,您的嵌入式应用程序能否/应该开发为符合 MISRA-C 标准?有没有人考虑过这样的练习? 我的一般感觉是,您必
我写了下面一段 MISRA 不喜欢的代码: UartPtr->C &= ((uint8_t)(~SIO_C2_SBK)); 与 #define SIO_C2_SBK ((uint8_t)0x01u)
MISRA 中的规则 2.2 规定“源代码应仅使用 /* ... */ 样式注释”。有谁知道这条规则的基本原理是什么? //出了什么问题风格评论? 最佳答案 MISRA 1998 和 2004 仅支持
类函数宏是 #define ARRAYSIZE(_Array) ((sizeof(_Array)) / (sizeof(_Array[0]))) 显示的错误是: Error[Pm154]: in t
是否可以禁用外部库的 MISRA 检查?我已经尝试过这个,但它似乎不起作用(此 header 使用 C++ 风格的注释和不兼容的 @ 标签)。 #pragma ghs startnomisra #in
我创建了一个函数来添加数组中的下一个数字。代码很简单,如下 int math(int *address, int size) { int sum = 0; for (int i = 0
我遇到了有关环绕错误的 MISRA 标准问题。我试图通过查看互联网上可用的选项来解决它,但仍然无法解决它,因为仍然无法找到一些可行的解决方案。 我提供一个简单的例子来解释我的情况。 由于 MISRA
我正在尝试读取之前写入 NVM 闪存的变量的值。 我的代码是: uintptr_t address = getAddress(); //[MISRA C++ Rule 5-2-8] cast from
MISRA C++ 规则:5_0_3 尝试使用一种符合 MISRA 标准的静态工具分析器,但无法解决。 #include #include using namespace std; int main(
我有以下行(减少到最低限度地展示问题): char version_text[64U] = {'\0'}; 此行生成以下 MISRA 错误: Error[Pm023]: missing element
我有一个读/写一些内存映射寄存器的裸机程序(驱动程序)。例如: void foo_read(uint64_t reg_base, uint32_t *out_value) { *out = R
我是一名优秀的程序员,十分优秀!