在<float.h>(在C89中)中“提供”的宏是否应该表现为常量值?

时间:2017-09-03 01:05:08

标签: c macros c99 c11 c89

我正在编写一个小项目,必须考虑从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中,提供一词是什么意思?是否正确解释实现为程序执行不可修改的宏提供值?而且:它们是目标执行环境的不可修改的值吗?

提前致谢。

0 个答案:

没有答案