工具/软件:TI C/C++编译器
我在6.0 中选择了MISRA 2004,当我建立项目时,出现了太多的警告;
_IQ (0.0)格式数据不符合 MISRA规则10.2 的条件;
#define _iQ24 (a) (长)(((a)*1677.7216万.0L)
如何修改以传递MISRA规则10.2 ?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:TI C/C++编译器
我在6.0 中选择了MISRA 2004,当我建立项目时,出现了太多的警告;
_IQ (0.0)格式数据不符合 MISRA规则10.2 的条件;
#define _iQ24 (a) (长)(((a)*1677.7216万.0L)
如何修改以传递MISRA规则10.2 ?
在这种特定情况下,您不应收到MISRA警告。 在宏中,大常量为long double类型。 MISRA的诊断错误地抱怨它被隐式地转换为一种不太精确的类型。 这不会发生。 相反,宏参数A被隐式转换为long double,然后发生乘法,然后该乘法的结果被显式转换为long。 我在 SDOWP系统中提交了CodeGen-3794以对此进行调查。 欢迎您使用我签名中下面的SDOWP链接进行关注。
我如何修改以传递MISRA规则10.2 ?[/QUOT]
一种解决方法是使用长双参数调用宏...
//常量上的L后缀表示类型为长双 变量=_iQ24(1.234L);
另一种解决方法是更改宏,使参数A的类型为long double ...
#define _iQ24 (A)(长)((长双精度)(A)* 1677.7216万.0L)
谢谢,此致,
-George
我如何修改以传递MISRA规则10.4 ?[/QUOT]
你不能。 下面是MISRA 10.4 的诊断...
"file.c",第6行:警告:(Misra-C:2004 10.4 /R)复数的值 浮点类型的表达式只能类型转换为浮点类型 较窄或大小相同的 返回(长)((长双)(arg)* 1677.7216万.0L); ^
宏_iQ24有意将长双精度表达式更改为长。 这违反了MISRA 10.4。 当宏的参数是常量时,您就会放弃它。 在这种情况下,在出现任何MISRA检查之前,将整个表达式计算为长常量。 当宏的参数为变量时,不会进行编译时间计算。 然后,MISRA检查就会进行,这是一种违规行为。
我怀疑IQmath代码无法更改为构建MISRA Clean。
谢谢,此致,
-George