首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >微软C/C++:w.r.t.的定义是什么?执行?

微软C/C++:w.r.t.的定义是什么?执行?
EN

Stack Overflow用户
提问于 2021-10-14 17:55:30
回答 2查看 820关注 0票数 4

上下文:

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

..。C编译器严格遵守C89/C90标准

/允许性-(符合标准)

..。并设置严格一致性的/Zc编译器选项。

VisualStudio2019中的C++一致性改进、行为更改和bug修复

可以指定/permissive来关闭编译器中的严格一致性模式。 第二个选项是禁用严格的一致性模式..。

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

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

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

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

注:C (n2596.pdf)和C++ (n4849.pdf)标准均不使用术语“严格一致”/“严格一致”用于实现。实现要么符合,要么不符合。W/o级。

UPD。我猜:在“严格遵守”(w.r.t。Microsoft的意思是“对任何扩展提供一致的实现w/o支持”。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-14 18:30:24

C11标准在第4节第5至7段中定义了严格一致的方案和实施如下:

5严格符合标准的程序只应使用本国际标准中规定的语言和库的特征。它不应产生依赖于任何未指定的、未定义的或实现定义的行为的输出,并且不应超过任何最低实现限制。 6协调实施的两种形式是托管和独立的。合格的托管实现应接受任何严格符合的程序。符合规范的独立实现应接受任何严格符合的程序,其中对库子句(第7条)中指定的特性的使用仅限于标准标头、、、、、、、和的内容。符合规范的实现可能有扩展(包括附加的库函数),只要它们不改变任何严格符合的程序的行为。 一个符合的程序是一个符合的实现可以接受的程序。

虽然此处没有出现严格符合实现和严格一致性的术语,但它们可以理解为指只接受严格一致的程序(或者更准确地说,不支持标准中未指定的特性的实现)的实现(在给定模式下)。

票数 1
EN

Stack Overflow用户

发布于 2021-10-14 20:44:34

您混淆的一个关键部分是,/Za和/Ze已经过时了,已经很久没有更新了。它是为ANSI 98推出的,从那以后就没有改变过。不要使用这些开关,而忽略文档中对它们的任何引用。

现代的VisualC++“一致性”开关是/permissive-和各种/Zc开关,与/std相结合。

目前的“最符合”选项是:

  • C++20是:/std:c++20
  • C++17是:/std:c++17 /permissive- /Zc:preprocessor
  • C++14是:/std:c++14 /permissive- /Zc:preprocessor
  • C11是:/std:c11
  • C17是:/std:c17

https://devblogs.microsoft.com/cppblog/msvc-cpp20-and-the-std-cpp20-switch/

VisualC++的部分一致性问题与预处理程序有关。

https://devblogs.microsoft.com/cppblog/announcing-full-support-for-a-c-c-conformant-preprocessor-in-msvc/

https://devblogs.microsoft.com/cppblog/c11-and-c17-standard-support-arriving-in-msvc/

有关按功能细分的特性,请参见Microsoft

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69575307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档