不支持的标准特性会影响一致性吗?

问题描述

上下文:C 编译器在符合实现时故意不支持某些功能。可以吗?

一些例子。下面的所有编译器都是符合标准的实现(__STDC__ 被定义为 1)。但是:

  • gcc 不支持 #pragma STDC FENV_ACCESS 并发出 warning: ignoring ‘#pragma STDC FENV_ACCESS’ [-WunkNown-pragmas]。但是,fenv.h 是标准头文件,标准要求支持 #pragma STDC FENV_ACCESS ON,因为 ONon-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,那么它就是不符合。