如何在编译时检测long double是否具有扩展精度

时间:2012-01-05 22:56:08

标签: c gcc compiler-construction compilation conditional-compilation

在少数系统中,double与long double相同。 如何在编译时检测long double是否为扩展精度而不是double,并将其用于条件编译。

我发现libgcc中存在预定义的宏 SIZEOF_DOUBLE SIZEOF_LONG_DOUBLE 但是不同的工具链都没有便携式。

有C方法可以做到这一点吗?

3 个答案:

答案 0 :(得分:5)

您可以从DBL_MANT_DIG比较LDBL_MANT_DIGfloat.h

答案 1 :(得分:1)

你可以测试一下。

#if DBL_MANT_DIG < LDBL_MANT_DIG

或float.h中定义的类似值

答案 2 :(得分:0)

此问题的“正确”解决方案(由许多项目使用)是创建配置脚本。

configure脚本运行各种测试,包括编译和运行小程序以确定编译器和系统属性。然后,该脚本将其结果写为头文件或makefile,或两者兼而有之。当然,你可以做任何你喜欢的事情。

有一些工具可以半自动地完成这类工作,但它们可能对你来说太过分了。如果你想看看名称是 autoconf automake 。要注意,它们不是很容易学习,但它们生成的配置脚本和makefile几乎可以在任何平台上运行,只要它有一个unix风格的shell和GNU make。