问题描述
一些例子。下面的所有编译器都是符合标准的实现(__STDC__
被定义为 1
)。但是:
-
gcc 不支持
#pragma STDC FENV_ACCESS
并发出warning: ignoring ‘#pragma STDC FENV_ACCESS’ [-WunkNown-pragmas]
。但是,fenv.h 是标准头文件,标准要求支持#pragma STDC FENV_ACCESS ON
,因为ON
是 on-off-switch 中的选择之一:{ {1}}。 -
msvc 不支持
ON OFF DEFAULT
,而是支持它自己的版本#pragma STDC FP_CONTRACT
。但是,标准版本是#pragma fp_contract ( { on | off } )
。 -
Cygwin 上的 gcc:sscanf doesn't handle hexadecimal floating-point input。而 libc 是标准的一部分。
问题:是否允许实现故意提供有限的功能(或此类功能的自己版本),同时仍然符合实现?
问题的原因:更好地理解 #pragma STDC FP_CONTRACT { ON | OFF | DEFAULT }
的定义以及围绕现有符合性实现的事态。
注意:这里感兴趣的领域仅符合托管实施。但是,该问题也适用于符合独立实施的情况。
更新。再次强调:conforming implementation
表示可能符合实施而不是符合实施。与标准的任何差异都会自动使此类实现成为“将 __STDC__ is defined to 1
定义为 1 的不合格实现”。
解决方法
如果一个标准有一个规则,一个实现做 X,一个实现不做 X,那么它就是不符合。