gpt4 book ai didi

c - 关于 AUTOSAR bool 值的 MISRA 10.3 问题

转载 作者:行者123 更新时间:2023-12-03 13:32:29 31 4
gpt4 key购买 nike

在我公司的项目中,AUTOSAR 平台定义了这样的 bool 值

typedef unsigned char boolean;
#ifndef TRUE 
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
这是不可修改的。然后我们得到 MISRA 10.3 错误 分配给更窄或不同的基本类型的表达式 [MISRA 2012 规则 10.3,必需] 在以下两个作业中(当然替换了真实代码!)
boolean mybool = (boolean)FALSE;
if(some_condition)
{
mybool = (boolean)TRUE;
}
我们已经尝试使用 (uint8)FALSE 进行其他转换或 (unsigned char)FALSE甚至没有转换 mybool = TRUE;没有解决问题。我们很乐意避免为偏差辩护。
有没有人知道会发生什么以及如何治愈它?

@Fredrik 感谢您的第一个回答。我把它放在一个虚拟标题中,将它包含在“罪魁祸首”中 .c并在 native 上运行 PC-Lint/MISRA
#define testTRUE 1U
boolean x = testTRUE;
boolean y = (uint8)testTRUE;
boolean z = (boolean)testTRUE;

#define testTRUE_2 1
boolean x_2 = testTRUE_2;
boolean y_2 = (uint8)testTRUE_2;
boolean z_2 = (boolean)testTRUE_2;

unsigned char x_3 = (boolean)1;
unsigned char y_3 = (boolean)testTRUE;
unsigned char z_3 = (boolean)testTRUE_2;
并在前 6 个作业中遇到同样的问题。对于最后 3 个分配,错误没有出现,但可能被替换为这个错误: 在 typedef [MISRA 2012 指令 4.6,建议] 之外使用修饰符或类型“无符号”

最佳答案

MISRA-C 和 bool 值的问题在于 MISRA 鼓励我们“假装”语言中存在 bool 类型,并将例如关系运算符和相等运算符的结果视为“本质上是 bool 值”。
也就是说,像 C++ 一样对待 bool 类型。 C 确实在 C99 中引入了 bool 值,但上述运算符的结果仍然是 int ,不是 bool就像在 C++ 中一样。但是 MISRA 想让我们“假装”它们是 bool 值,以确保代码正确。此外,MISRA-C 还涵盖了没有标准的 C90 bool/true/false被拥有。
因此,为了让 bool 值像 MISRA 想要的那样工作,您需要一种方法来告诉您的静态分析器 boolean , TRUEFALSE是你的 bool 类型。否则该工具会将它们视为 int然后您会收到各种隐式转换警告。我不知道如何在 PC-Lint 上执行此操作,但错误是工具配置问题。
至于贴出的代码,boolean mybool = FALSE;是 MISRA 兼容的,因为这是“本质上是 bool 型”类型。没必要投。如果您没有配置该工具,则没有任何类型转换可以拯救您。通常,除非您知道为什么要这样做,否则永远不要使用 C 进行转换。

关于c - 关于 AUTOSAR bool 值的 MISRA 10.3 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65010779/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com