Microsoft C/C++:关于实现的“严格一致性”的定义是什么?

Pav*_*kin 5 c c++ terminology standards-compliance visual-c++

语境:

/Za、/Ze(禁用语言扩展)

... C编译器严格符合C89/C90标准

/permissive-(标准一致性)

...并设置 /Zc 编译器选项以严格符合要求

Visual Studio 2019 中的 C++ 一致性改进、行为更改和错误修复

... 可以指定 /permissive 以关闭编译器中的严格一致性模式。

第二个选项旨在禁用严格一致性模式......

请注意,这并不严格符合 ISO C99 ...

演练:在命令行上编译 C 程序

MSVC 与 ANSI C89 和 ISO C99 标准兼容,但并不严格遵守。

问:“严格符合”的定义是什么?它是微软发明的吗?

注意:C (n2596.pdf) 和 C++ (n4849.pdf) 标准均未使用术语“严格符合”/“严格符合”应用于实现。实施要么符合,要么不符合。无渐变。

UPD。我的猜测:在“严格一致性”(关于实现)下,微软的意思是“不支持任何扩展的一致性实现”。

dbu*_*ush 1

C11标准在第4节第5-7段中定义了严格符合的程序和实施,如下:

\n
\n

5严格遵守的程序应仅使用本\n国际标准中指定的语言和库的功能。它不得产生依赖于任何未指定、未定义或实现定义的行为的输出,并且不得超过任何最低实现限制。

\n

6合规实施有两种形式:托管型和独立型。合格的托管实现应接受任何严格合格的程序。符合要求的独立实现应接受任何严格符合的程序,其中对库子句(子句 7)中指定的功能的使用仅限于标准标头的内容。 h>、<iso646.h>、<limits.h>、<stdalign.h>、<stdarg.h>、\n<stdbool.h>、<stddef.h>、<stdint.h> 和 <stdnoreturn .h>. 一致的实现可以具有扩展(包括附加库函数),只要它们不改变任何严格一致的程序的行为。

\n

7合格程序是合格实施可接受的程序。

\n
\n

虽然术语严格一致实现严格一致性没有出现在这里,但它们可以被理解为仅接受严格一致程序的实现(在给定模式下)(或者更准确地说,不支持功能的实现)标准中未规定)。

\n