0

背景:C 编译器故意不支持某些功能,同时符合实现。可以吗?

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

  • gcc 不支持#pragma STDC FENV_ACCESS和问题warning: ignoring ‘#pragma STDC FENV_ACCESS’ [-Wunknown-pragmas]。但是, fenv.h 是标准头文件,标准#pragma STDC FENV_ACCESS ON要求支持 of,因为它是on-off-switch :ON中的选择之一。ON OFF DEFAULT

  • msvc 不支持#pragma STDC FP_CONTRACT,而是支持它自己的版本#pragma fp_contract ( { on | off } )。但是,标准版本是#pragma STDC FP_CONTRACT { ON | OFF | DEFAULT }.

  • Cygwin 上的 gcc:sscanf 不处理十六进制浮点输入。libc 是标准的一部分。

问题:是否允许实现故意提供有限的功能(或其自己的此类功能版本),同时仍然符合实现?

问题的原因:更好地理解conforming implementation现有一致性实现的定义和状态。

注意:这里感兴趣的领域只是符合托管实现。但是,该问题也适用于符合独立实施的要求。

UPD。再次:__STDC__ is defined to 1意味着可能符合实施而不是符合实施。与标准的任何差异都会自动使此类实现成为“定义__STDC__为 1 的不合格实现”。

4

1 回答 1

5

如果一个标准有一个实现做 X 的规则,而一个实现不做 X,那么它就是不符合的。

于 2021-07-16T11:57:51.297 回答