【发布时间】:2021-12-03 02:27:54
【问题描述】:
上下文:
/Za, /Ze (Disable Language Extensions):
...C 编译器严格遵守 C89/C90 标准
/permissive- (Standards conformance):
... 并设置 /Zc 编译器选项以实现严格一致性
C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2019:
... /permissive 可以指定关闭编译器中的严格一致性模式。
第二个选项是为了禁用严格的一致性模式...
请注意,这并不严格符合 ISO C99 ...
Walkthrough: Compile a C program on the command line:
MSVC 与 ANSI C89 和 ISO C99 标准兼容,但并不严格遵守。
问题:“严格符合”的定义是什么?是微软发明的吗?
注意:C (n2596.pdf) 和 C++ (n4849.pdf) 标准都没有使用术语“严格符合”/“严格符合”应用于实现。实现要么符合,要么不符合。无渐变。
UPD。我的猜测:在“严格一致性”(w.r.t. to implementation)下,微软的意思是“不支持任何扩展的一致性实现”。
【问题讨论】:
-
一致性可以有不同的程度。严格符合,或严格符合意味着无任何例外地符合。你不会在标准中找到这个,这就是英语的工作原理。
-
permissive- 突出的另一个问题是模板中的依赖名称。没有许可——MSVC 对要求“typename”模板参数限定非常宽松。
-
@NathanOliver C 标准(例如)定义了以下术语:“严格符合程序”、“符合程序”、“符合执行”。它没有定义“严格符合的实现”。因此,最终用户在“严格符合模式”、“严格符合 ISO C99”等下应该理解什么?也许微软的意思是“严格的一致性”(应用于实现)==“不支持任何扩展的一致性实现”?
-
我认为这在 MSFT 方面可能被认为是模棱两可的语言。 C 标准确实将“严格符合”定义为与程序有关。 MSFT 可能打算使用“严格符合模式”来表示编译器要求程序严格符合,而不是编译器严格符合标准(这不是一回事)。
标签: c++ c visual-c++ terminology standards-compliance