在编译时比较类型的大小

时间:2018-02-14 20:11:30

标签: c++ arduino c-preprocessor

我正在研究一些需要64位浮点计算的代码,但是在部署它的某些平台上,不存在64位浮点类型。
我有一个使用软件模拟64位类型的代码版本,但我希望能够将硬件和软件版本合并为一个包括硬件和软件浮动之间的开关类型定义。
float和double都可用,但在一个平台上,它们的大小都是4个字节,另一个是4和8。

我知道我无法在预处理器宏中使用sizeof()所以我查看了比较两者的最大值,但是在Arduino框架中FLT_MAXDBL_MAX don&# 39;似乎被定义了?

如何在编译时执行此检查?

1 个答案:

答案 0 :(得分:0)

这适用于C,但也可能适用于C ++。

这个想法是针对他们的FLT_*弟兄们测试一个或多个DBL_*宏。如果它们相同,则您可能在不区分float32和float64的系统上。

怎么样?
#include <float.h> /* or <cfloat>?  */

#if FLT_MANT_DIG == DBL_MANT_DIG
  /* Funny system */
#else
  /* Sane system */
#endif

检查你的float.h内容是否合适。