比较编译时类型的大小
Compare size of types at compile time
我正在处理一些需要64位浮点计算的代码,但是在某些部署的平台上,没有64位浮点类型。
我有一个使用软件模拟64位类型的代码版本,但是我希望能够将硬件和软版本组合为单个,包括硬件和软件浮点之间的开关类型定义。
浮点和双都可以使用,但是在一个平台上,它们的大小为4个字节,另一个是4个字节。
我知道我不能在预处理器宏中使用sizeof()
,因此我考虑比较两者的最大值,但是在Arduino Framework中,FLT_MAX
和DBL_MAX
似乎没有定义?
如何在编译时间执行此支票?
这是针对C的,但也可能适用于C 。
这个想法是针对其DBL_*
弟兄测试一个或多个FLT_*
宏。如果它们是相同的,那么您可能会在无法区分float32和float64的系统上。那
#include <float.h> /* or <cfloat>? */
#if FLT_MANT_DIG == DBL_MANT_DIG
/* Funny system */
#else
/* Sane system */
#endif
检查您的float.h内容是否合适。
相关文章:
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 使用简单类型列表实现的指数编译时间.为什么
- 编译标准库类型
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 非类型指针和引用模板参数,以及在编译时如何/为什么解析它们.c++
- 使用 make 编译 MPI,几个命名空间错误,例如"错误:未知类型名称'使用'?
- C++ 编译错误:意外的类型名称"字符串":预期的表达式
- 为什么 std::make_shared 无法编译带有已删除运算符 new 的类型?
- 标量类型的特征模板无法编译固定大小的子矩阵操作
- 在其他容器中使用 boost::container::static_vector 时,GCC 编译错误"将'const s'绑定到类型's&'的引用丢弃限定符"
- 由于类型从 C 转换为 C++,无法编译错误 C2440
- 通过编译时值推断整数的类型
- 基于派生类型的编译时行为分支
- C++ 编译错误:gnu_printf是无法识别的格式函数类型
- 将函数类型作为模板参数传递不会编译
- 枚举类的基础类型别名为整型类型(编译错误)
- 无法将类型转换为类型*-C++编译错误
- 返回仅移动类型编译,即使复制构造函数不可用
- 如何根据模板中的类型编译函数
- 无法使用模板化类型编译 va_arg() 调用,因为模板参数中的逗号