问题标签 [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.
c - 米斯拉违规 12.6
如何在以下声明中摆脱 MISRA 违规
逻辑运算!运算符不是“有效布尔”表达式。MISRA-C:2004 规则 12.6;参考 - ISO:C90-6.3.3.3 一元算术运算符
c - 避免 MISRA 警告,从嵌入式编码器生成自动化代码
我想知道在使用嵌入式代码从 Simulink 模型生成代码后是否可以避免 MISRA 警告 10.1、13.2 和 12.6(或者是否可以通过其他方式生成代码?)。
例如(生成的代码)
在 if(A) 语句中存在 MISRA 违规。
是否可以使用嵌入式编码器生成代码,例如
standards - “死代码”和“无法访问的代码”有什么区别?
我认为这些术语是同义词,但 MISRA 中关于死代码的注释表明这是错误的?有什么不同?一个是另一个的子集吗?
c++ - 开关盒标签上的 PC-lint:违反 MISRA C++ 2008 所需规则 5-0-12
//定义了一些静态常量变量
//一些开关盒
// 现在 PC-lint 投诉此“注释 1960:违反 MISRA C++ 2008 要求的规则 5-0-12,不允许在案例标签中使用非数字值”
所以问题是为什么 PC-lint 不将静态 const 成员视为数值?
显式键入强制转换案例标签(应该解决这个问题)是个好主意吗?
案例标签需要类型转换为什么类型?会uint8_t
做吗?
其他一些方法可以免除这个 Lint 问题?
misra - QA-C 不会对一个项目中的多个返回语句发出警告,但在另一个项目中会发出警告吗?
在我的工作地点,我们刚刚开始了一个新项目,而且这个项目还需要 MISRA-C 检查。我们正在使用 QA-C 来执行这些操作。
我们的第一个项目是使用 m2cm 消息个性,没有任何改变。
其中一个打开的消息是每个函数没有多个返回语句。
我们刚刚开始了一个新项目,不同的编译器/芯片,但相同的 m2cm 消息个性,由于某种原因,新项目中不再出现此警告。它仍然在另一个项目中,使用相同的.p_s
文件。
这让我们大吃一惊,为什么会发生这种情况?
消息 2889 被禁止的任何地方都没有禁止标志。
c++ - 指针类型“gpointer”的对象转换为不相关类型“string*”
我正在尝试对 MISRA 进行一些代码投诉,并且我有以下代码:
其中 DBusCallback 是 call_DBus 的回调:
//最后一个婴儿车是回调中的user_data
它编译并运行正常,但在从 gpointer 进行字符串转换时出现以下 MISRA 警告:MISRA.CAST.PTR.UNRELATED:指针类型“gpointer”的对象转换为不相关类型“string*”
规则是: MISRA-C++ 规则 5-2-7(必需):具有指针类型的对象不应直接或间接转换为不相关的指针类型。[未指定 5.2.10(7)] 基本原理 从指针转换为不相关类型的结果未指定。
有什么想法可以避免这个警告吗?
c++ - 不应使用 c++ Digraphs (MISRA C++ 2-5-1)
根据MISRA C++ 2-5-1
我们通常应该避免弄乱有向图。虽然,我不明白为什么我们还应该避免使用易读的单词and
,or
等not
来定义常见的运算符&&
, ||
, ...
该问题甚至被强调为 Sonar/MISRA的“主要”问题:
该规则是否还包括人类可读??=
的二合字母(与神秘的,完全不同??/
),或者该规则过于笼统?我没有发现使用它们有任何特别的风险或副作用,我错了吗?
加起来
这个 MISRA 规则是否有功能原因也包括人类可读的二合字母?我应该避免它们只是为了盲目地满足代码合规性规则还是隐藏一些真正棘手的原因?
c - 带有数组初始化程序的 misra 19.10
MISRA 19.10:
在类函数宏的定义中,参数的每个实例都应括在括号中,除非它用作# 或## 的操作数。
我有一个这样定义的结构:
然后我做:
问题是 __ coeff_list __ 参数不能有括号,因为它然后扩展为 ({...}) (一个数组初始化器),gcc 抱怨:
是否有一种聪明的方法来保持 MISRA 19.10 检查并在 SMK_ANALOG_FLOAT_FILTER_HANDLE 宏中有一个数组初始化程序?
c - 为什么 redlib 将 INT8_MIN 定义为 (-0x80) 而不是 (-0x7F) 或 (-INT8_MAX - 1)
正如标题所说,REDLIB 将 INT8_MIN 定义为 (-0x80)。这在使用 QAC 检查 MISRA-C 兼容性时发出警告:(INT16 和 INT32 也是如此,分别为 -0x8000 和 -0x80000000)
c - 禁止 lint 消息 9007
根据 MISRA 规则 13.5,逻辑 && 或 || 的右手操作数 运算符不应包含持久的副作用。我们的代码使用 PC-Lint 检查,消息 9007 ( http://gimpel-online.com/MsgRef.html#9007 )。
我们有表格的代码
if((GET_SIGNAL1() < CONST_1) || (GET_SIGNAL2() == CONST_2) )
{
dostuff();
}
GET_x 是宏,好吧,通过一些错误处理来获取信号 x,后者会导致预期的副作用。给出了对 MISRA 13.5 的规则偏差,现在的问题是如何抑制相应的消息。
到目前为止的努力:由于这是自动生成的代码,我不能直接放入 lint 注释,通过生成器放入注释虽然并且主要是难以追踪的。
宏定义中的 --e{(9007))} 可以工作,但我们也有类似的代码
foo = GET_SIGNAL1();
会导致函数范围的停用。
也考虑过 -ecall,但它只是检查调用本身,而不是宏的上下文(如我所愿)。
编辑:
我不能影响模型和工具链。只有我能影响的部分是 lint 配置或“胶水代码”,如宏定义