不受支持的标准功能是否会影响一致性?
Do unsupported standard features affect conformance?
上下文:C 编译器在符合实现的同时故意不支持某些功能。可以吗?
一些例子。下面的所有编译器都是符合标准的实现(__STDC__
被定义为 1
)。然而:
gcc 不支持 #pragma STDC FENV_ACCESS
并发布 warning: ignoring ‘#pragma STDC FENV_ACCESS’ [-Wunknown-pragmas]
。但是,fenv.h是一个标准的header,支持#pragma STDC FENV_ACCESS ON
是标准要求的,因为ON
是on-off-switch[=中的选择之一49=]: ON OFF DEFAULT
.
msvc 不支持 #pragma STDC FP_CONTRACT
,而是支持它自己的版本 #pragma fp_contract ( { on | off } )
。不过,标准版是#pragma STDC FP_CONTRACT { ON | OFF | DEFAULT }
.
Cygwin 上的 gcc:sscanf doesn't handle hexadecimal floating-point input。而 libc 是标准的一部分。
问题:是否允许实施故意提供有限的功能(或此类功能的自身版本),同时仍然是符合规范的实施?
问题原因:更好地理解 conforming implementation
的定义和现有符合规范的实现的现状。
注意:此处感兴趣的领域仅符合托管实施。但是,该问题也适用于符合要求的独立实现。
更新。再次说明:__STDC__ is defined to 1
意味着 可能符合实施方式 而不是 符合实施方式 。与标准的任何差异都会自动使此类实现成为“将 __STDC__
定义为 1 的不合格实现”。
如果一个标准有一个规则,一个实现做 X,而一个实现不做 X,那么它是不符合的。
上下文:C 编译器在符合实现的同时故意不支持某些功能。可以吗?
一些例子。下面的所有编译器都是符合标准的实现(__STDC__
被定义为 1
)。然而:
gcc 不支持
#pragma STDC FENV_ACCESS
并发布warning: ignoring ‘#pragma STDC FENV_ACCESS’ [-Wunknown-pragmas]
。但是,fenv.h是一个标准的header,支持#pragma STDC FENV_ACCESS ON
是标准要求的,因为ON
是on-off-switch[=中的选择之一49=]:ON OFF DEFAULT
.msvc 不支持
#pragma STDC FP_CONTRACT
,而是支持它自己的版本#pragma fp_contract ( { on | off } )
。不过,标准版是#pragma STDC FP_CONTRACT { ON | OFF | DEFAULT }
.Cygwin 上的 gcc:sscanf doesn't handle hexadecimal floating-point input。而 libc 是标准的一部分。
问题:是否允许实施故意提供有限的功能(或此类功能的自身版本),同时仍然是符合规范的实施?
问题原因:更好地理解 conforming implementation
的定义和现有符合规范的实现的现状。
注意:此处感兴趣的领域仅符合托管实施。但是,该问题也适用于符合要求的独立实现。
更新。再次说明:__STDC__ is defined to 1
意味着 可能符合实施方式 而不是 符合实施方式 。与标准的任何差异都会自动使此类实现成为“将 __STDC__
定义为 1 的不合格实现”。
如果一个标准有一个规则,一个实现做 X,而一个实现不做 X,那么它是不符合的。