我正在编写一个小项目,必须考虑从C89到C11的所有标准C版本,试图确保不同版本之间的某种程度的兼容性。在这样做时,我发现标准标题<float.h>
在C89中与C99相比具有非常不同的规格。
在C89中,除<float.h>
之外,FLT_RADIX
中的几乎所有宏都不一定是常量表达式。但是,在C99中,除<float.h>
之外的FLT_ROUNDS
中的所有宏都是常量表达式(例如,它们可用于static
初始值设定项)。
我的猜测是,即使在古老的C89中,给定符合实现的预期行为是<float.h>
中的所有宏(除了FLT_ROUNDS
)在程序执行时必须是不可修改的值,甚至当它们不能被语法地视为常量表达式时。
另一方面,C89标准文件说(C89 draft, 2.2.4.2):
对于除FLT_ROUNDS之外的所有值,浮动模型表示提供。
此处“所有值”指的是<float.h>
中声明的宏列表。
我的问题:在C89中,提供一词是什么意思?是否正确解释实现为程序执行不可修改的宏提供值?而且:它们是目标执行环境的不可修改的值吗?
提前致谢。