【发布时间】:2018-02-14 20:11:30
【问题描述】:
我正在编写一些需要 64 位浮点计算的代码,但在一些部署它的平台上没有 64 位浮点类型。
我有一个使用软件模拟 64 位类型的代码版本,但我希望能够将硬版本和软版本组合为一个单独的版本,包括硬件和软件浮点之间的开关类型定义。
float 和 double 都可用,但在一个平台上它们都是 4 字节大小,而在另一个平台上它们是 4 和 8 字节。
我知道我不能在预处理器宏中使用 sizeof(),所以我比较了两者的最大值,但在 Arduino 框架中 FLT_MAX 和 DBL_MAX 似乎没有定义?
如何在编译时执行此检查?
【问题讨论】:
-
sizeof(TYPE)在编译时进行评估。与它一起使用静态断言。 stackoverflow.com/questions/3385515/static-assert-in-c -
为什么不能在宏中使用
sizeof?为什么这是一个问题?只是不要使用宏 -
既然你标记了C++,你可以使用
if constexpr,或者模板特化,或者标签调度,或者别的什么。 -
它是什么版本?如果您使用的是 10 年前的编译器,则无论如何都应该考虑升级
-
静态断言会导致编译失败,它不会让我退回到软浮点类型
标签: c++ arduino c-preprocessor