告诉VX-Tasking在boolean中“bool”?

时间:2012-10-23 10:05:58

标签: c eclipse misra

我正在使用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 definitionstdbool.h定义为:

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

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

注意:如果我转换了作业,则会删除错误:

 bool myFlag = (bool)false;

但是(恕我直言)正在掩盖这个问题,而不是解决它,而且我真的不想抛出每一项任务。

LINT等工具允许你指定bool类型来阻止这类误报......我需要Eclipse / Tasking的等价物


所以我的问题是:

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

有吗?

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

3 个答案:

答案 0 :(得分:1)

MISRA规则10.1说

  

(规则10.1)如果出现以下情况,整数类型表达式的值不得隐式转换为不同的基础类型:

     

a)它不是转换为相同签名的更宽整数类型,或

     

b)表达式很复杂,或者

     

c)表达式不是常量,是函数参数,或

     

d)表达式不是常量,是一个返回表达式

#include <stdbool.h>

bool myFlag = false;

与:

相同
_Bool myFlag = 0;

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

请注意,如果您使用的是MISRA-C:2004(我认为MISRA-C:2012尚未发布),则在发布时仅考虑C90并且_Bool是C99的补充。正如我在评论中所写,你可以使用这样的演员来消除警告:

bool myFlag = (bool) false;

这是MISRA的美丽。

答案 1 :(得分:0)

似乎无法解决这个问题,但你可以自己定义bool:

typedef enum _bool { false = 0, true = 1 } bool;
bool x = false;

这应该通过严格的检查。

答案 2 :(得分:0)

您可以在#undef之后true false#include <stdbool.h>将其定义为使MISRA成为满意的新值。

C99和C11允许这种做法作为过时功能。