在编译时比较类型的大小

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在编译时比较类型的大小相关的知识,希望对你有一定的参考价值。

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

我知道我不能在预处理器宏中使用sizeof()所以我看了比较两者的最大值,但是在Arduino框架中FLT_MAXDBL_MAX似乎没有被定义?

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

答案

这适用于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内容是否合适。

以上是关于在编译时比较类型的大小的主要内容,如果未能解决你的问题,请参考以下文章

定义表示不透明 C 结构的 Rust 类型的交叉编译安全方法,其大小在编译时已知

隐式类型转换

java 数组类比较编译报错问题

Android 逆向Android 逆向通用工具开发 ( Android 平台运行的 cmd 程序类型 | Android 平台运行的 cmd 程序编译选项 | 编译 cmd 可执行程序 )(代码片段

编译时泛型类型大小检查

13 个非常有用的 Python 代码片段