如何为C90和MISRA C2012兼容的浮动提供typedef?

时间:2018-04-12 14:00:25

标签: floating-point c89 misra

我正在为嵌入式系统编写代码,需要用C90和Misra C 2012编写。因此,我不允许使用基本的C数值类型。

我知道对于32位系统,以下代码有效。

typedef      float float32_t;
typedef      double double64_t;
typedef long double double128_t;

但我想知道我们是否可以编写if的便携版本。对于C99,我们在FLT_EVAL_METHOD中有一个宏math.h,它告诉我们floatdoublelong double的大小。

我想知道如何在C90兼容系统可移植的同时实现这一点。

1 个答案:

答案 0 :(得分:0)

MISRA C:2012指令4.6建议使用表示大小和签名的typedef ......

  • 对于C99,它建议使用stdint.h
  • 对于C90,您需要自己动手

注意:stdint.h没有为浮动类型定义“表示大小和签名的typedef”,尽管该示例建议您应该定义它们。

就个人而言,虽然我理解整数类型的基本原理,但我没有看到float32_t / float64_t / float128_t优于float / double / etc的好处,因为浮点的详细内容都是实现定义的,因此可移植性是神的问题!

[见免责声明简介]