问题标签 [misra]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
116 浏览

c - c中将语句组合为参数的语法是什么

我有一种暗示,有一种旧的讨厌的方法可以让函数在计算参数时运行,但是我不知道它叫什么,我无法搜索出规则。

一个例子

这个想法是“()”将在执行 prep_dstr 函数后返回地址 dstr。

我知道这很丑陋,我之前可以在线上做 - 但它很复杂......

#

好的 - 回应请求不要这样做。

我实际上正在对一些现有代码进行 MISRA 清理(不是我的,不要拍我),目前“prep_dstr”函数需要一个缓冲区来修改它(不考虑缓冲区的长度)并返回它传递的指针一个参数。

我喜欢迈出一小步——测试然后再迈出一小步。

所以 - 比返回一个不知道它的持久性的指针稍微不那么讨厌的方法是停止函数返回一个指针并使用逗号运算符(在确保它不会从缓冲区的末尾跳出之后)。

这会使 MISRA 错误倒计时,当它仍然有效并且 MISRA 错误消失时,我将尝试优雅地解决 - 也许是后年:)。

0 投票
4 回答
1348 浏览

c++ - 从原始内存中读取值(符合 MISRA)

我正在尝试读取以前在 NVM 闪存上写入的变量的值。

我的代码是:

问题是 MISRA 中不允许从 uintptr_t 转换为指针。有谁知道访问此内存的方法?

我违反了 MISRA 的一项重要规则。使用动态内存(闪存的内容是动态的,因此数据的地址是可变的)。只有当您考虑声明一个指向闪存地址的 const 指针并在写入数据后访问它时才会导致。

如果不打破它们,规则是什么?:)

0 投票
1 回答
1295 浏览

c++ - Static function template and MISRA C++

The following function template with specializations should be used within the same .cpp file only, so I’d like to make it static. The following code compiles (without warnings) using both MS Visual C++ 2008 and GCC 4.8.1 and works as intended. (Adding static to the beginning of lines 5 and 11 would cause GCC to issue an error but not MSVC.)

However, MISRA C++ checker complains:

  • (MISRA2008.3-3-2) Apply the static keyword to declaration of 'foo' (1)
  • (MISRA2008.3-3-2) Apply the static keyword to declaration of 'foo' (5)
  • (MISRA2008.2-10-5-b) Identifier 'foo' is being reused (5)
  • (MISRA2008.3-3-2) Apply the static keyword to declaration of 'foo' (11)
  • (MISRA2008.2-10-5-b) Identifier 'foo' is being reused (11)

I tried to find out what’s wrong and found a hint in a C++ standard quote:

For a function call that depends on a template parameter, if the function name is an unqualified-id but not a template-id, the candidate functions are found using the usual lookup rules (3.4.1, 3.4.2) except that:

  • For the part of the lookup using unqualified name lookup (3.4.1), only function declarations with external linkage from the template definition context are found.

Does it mean that the compilers discard the static specification and there is no way to actually make static function templates in C++03?

0 投票
1 回答
1284 浏览

c - 在 C 中使用带有位运算符的小整数

与上一个问题有关,我无法理解 MISRA C 2004 的一些规则。

ISO C99 草案 2007中,第 6.5 节第 4 节:

某些运算符(一元运算符 ~ 和二元运算符 <<、>>、&、^ 和 |,统称为按位运算符)需要具有整数类型的操作数。这些运算符产生的值取决于整数的内部表示,并且具有符号类型的实现定义和未定义方面。

好的,使用带按位运算符的有符号整数会产生未定义的行为(并且没有意义)。

一个好的解决方案是使用显式转换为更广泛的无符号整数类型以绕过整数提升,然后不要将有符号值与位运算符一起使用(请参阅我上一个问题的相关答案)。

但在 MISRA C 2004 中,可以使用带有位运算符的小型无符号整数(例如规则 10.5)。为什么,如果积分提升导致使用按位运算符的有符号值?我想我不明白一些事情。

0 投票
2 回答
2518 浏览

c - MISRA 错误:字段类型应为 int、unsigned int 或 signed int

我在我的程序中使用了以下代码,在运行 PC-Lint 时会引发以下错误:此行的多个标记 - (lint:46) 字段类型应为 int、unsigned int 或 signed int [MISRA 2004 Rule 6.4,必需] - (lint:960) 违反 MISRA 2004 要求的规则 6.4,位字段必须显式签名 int 或 unsigned int

有人可以告诉我如何解决这个问题吗?

0 投票
8 回答
3211 浏览

c - 为什么 MISRA C 声明指针的副本会导致内存异常?

MISRA C 2012 指令 4.12 是“不应使用动态内存分配”。

例如,该文档提供了以下代码示例:

该文件指出:

尽管调用 free 后存储在指针中的值没有改变,但在某些目标上,它指向的内存可能不再存在,并且复制该指针的行为 可能会导致内存异常

除了结尾之外,我几乎对所有句子都满意。由于 p 和 q 都在堆栈上分配,指针的副本如何导致内存异常?

0 投票
2 回答
748 浏览

c - 动态内存分配的流行用法

我一直在阅读 C 中的编码标准,其中大多数不鼓励使用动态内存分配。但在流行的使用中动态内存分配导致。这有什么充分的理由。我问它使用的原因,尽管它具有缺点?这些是我的参考 JPL 标准:http ://lars-lab.jpl.nasa.gov/JPL_Coding_Standard_C.pdf 10 的幂:http: //spinroot.com/gerard/pdf/P10.pdf

0 投票
1 回答
1648 浏览

c - 为什么 MISRA-C:2004 会在这里抛出错误?

我似乎不断收到 MISRA-C:2004 规则 10.1 和 10.3 错误,用于以下代码段中的 lShift 分配,并且无法真正看到可以做些什么来满足要求......为什么我仍然得到一个错误?

0 投票
2 回答
2814 浏览

c - 使用 Doxygen 记录 MISRA/QA-C 消息抑制

我目前正在开展一个项目,该项目必须符合 MISRA 2012。但在嵌入式世界中,您无法满足所有 MISRA 规则。所以我必须抑制 QA-C 生成的一些消息。他最好的解决方案是什么?

我正在考虑在每个模块头文件中制作一个表,其中包含对相关代码行、描述等的引用(\ref 和 \anchor)。第一个问题是:我不能使用 Doxygen 降价表功能,因为那时描述必须在一行中,因为 Doxygen 表不支持换行。所以我想用一个简单的逐字表,你怎么看?

或者有没有办法自动生成这样的表?

问候 m0nKey

0 投票
2 回答
1349 浏览

c - 规则 10.1,复整数表达式的隐式转换

-> 它抛出以下错误:

  1. 违反 MISRA 2004 要求的规则 12.8,移位运算符右侧的值超出范围
  2. 违反 MISRA 2004 要求的规则 10.1,复杂整数表达式的隐式转换

如何解决这个问题?