gpt4 book ai didi

c - 用 bool 值告诉 VX-Tasking "bool"?

转载 作者:太空宇宙 更新时间:2023-11-03 23:53:57 25 4
gpt4 key购买 nike

我正在使用 Tasking VX 工具集(建立在 Eclipse 上)并且有一个相当基本但基本的问题我无法解决......我已经 RTFMed 但仍然完全不聪明。

想象一下简单的代码片段:

#include <stdbool.h>

bool myFlag = false;

如果我启用 MISRA-C 检查,我会得到以下信息:

MISRA-C rule 10.1 violation: [R] restrict the use of implicit conversions for integer types

Eclipse 被设置为 C99 实现,并且根据 standard library definition , stdbool.h 定义为:

#define bool  _Bool
#define true 1
#define false 0

我假设这个错误是因为 #define false 0 并且该工具正在隐式转换为 bool?

注意:如果我进行赋值,那么错误就被移除了:

 bool myFlag = (bool)false;

但是(恕我直言)这掩盖了问题,而不是解决问题,我真的不想投下每一个任务。

诸如 LINT 之类的工具允许您指定 bool 类型以阻止此类误报...我需要 Eclipse/Tasking 的等价物


所以我的问题是:

我怀疑某处有一个工具选项可以告诉 TASKING bool 是 bool 类型,因此 falsetrue 可以使用吗?

有吗?

{请不要[在此线程]讨论 MISRA 的优点(或其他方面)

最佳答案

MISRA 规则 10.1 说

(Rule 10.1) The value of an expression of integer type shall not be implicitly converting to a different underlying type if:

a) it is not a conversion to a wider integer type of the same signedness, or

b) the expression is complex, or

c) the expression is not constant and is a function argument, or

d) the expression is not constant and is a return expression

#include <stdbool.h>

bool myFlag = false;

等同于:

_Bool myFlag = 0;

0int 类型,它是有符号整数类型,而 _Bool 是无符号整数类型。您正在将有符号类型的值隐式转换为无符号类型的值,因此您违反了 MISRA 规则 10.1 中的 a)

请注意,如果您使用的是 MISRA-C:2004(我认为 MISRA-C:2012 尚未发布),在发布时仅考虑了 C90,_Bool 是C99 添加。正如我在评论中所写,您可以使用这样的强制转换来消除警告:

bool myFlag = (bool) false;

这就是 MISRA 的美妙之处。

关于c - 用 bool 值告诉 VX-Tasking "bool"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13028048/

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