在少数系统中,double与long double相同。 如何在编译时检测long double是否为扩展精度而不是double,并将其用于条件编译。
我发现libgcc中存在预定义的宏 SIZEOF_DOUBLE 和 SIZEOF_LONG_DOUBLE 但是不同的工具链都没有便携式。
有C方法可以做到这一点吗?
答案 0 :(得分:5)
您可以从DBL_MANT_DIG
比较LDBL_MANT_DIG
和float.h
。
答案 1 :(得分:1)
你可以测试一下。
#if DBL_MANT_DIG < LDBL_MANT_DIG
或float.h中定义的类似值
答案 2 :(得分:0)
此问题的“正确”解决方案(由许多项目使用)是创建配置脚本。
configure脚本运行各种测试,包括编译和运行小程序以确定编译器和系统属性。然后,该脚本将其结果写为头文件或makefile,或两者兼而有之。当然,你可以做任何你喜欢的事情。
有一些工具可以半自动地完成这类工作,但它们可能对你来说太过分了。如果你想看看名称是 autoconf 和 automake 。要注意,它们不是很容易学习,但它们生成的配置脚本和makefile几乎可以在任何平台上运行,只要它有一个unix风格的shell和GNU make。