VS2013中C99支持的官方状态是啥?

Posted

技术标签:

【中文标题】VS2013中C99支持的官方状态是啥?【英文标题】:What is the official status of C99 support in VS2013?VS2013中C99支持的官方状态是什么? 【发布时间】:2015-03-05 18:11:34 【问题描述】:

我看到VS2013增加了对C99的大量主要核心语言特性的支持。现在它支持复合文字、指定初始化器、可变参数宏、交错声明和语句,仅举几例。

这表明 VS 开发人员在 Visual Studio 中朝着 C99 支持迈出了重要的一步。然而,其中一些特性并不是 C++ 语言的一部分,这似乎与之前宣布的开发策略有明显的偏差(例如,“VS C 编译器将只支持那些也是 C++ 一部分的 C99 特性”)。

那么,关于发生了什么,是否有任何官方或半官方的消息?我似乎无法在网上找到任何确定的东西。这些 C99 功能是正式宣布的吗?是否有任何承诺继续在 VS 中支持 C99?或者这只是某种“流氓”的非官方开发?

【问题讨论】:

Herb Sutter 提到他们添加的内容足以在 VS2013 上编译 ffmpeg,不知道他们是如何提出这个要求的。 msdn.microsoft.com/en-us/library/hh409293.aspx 我链接到他们最近的 C99 here 他们在前端为 C++1xyz 合规性做了大量工作。触摸设计为使用 256KB 内存运行的古老位。毫无疑问,这开辟了一些新的机会:) 【参考方案1】:

Microsoft 开发人员对此进行了一些公开的官方讨论,C++ Conformance Roadmap 表示:

Herb 还宣布,应客户要求,RTM 版本还将包括一些战术 C99 语言扩展,当 编译 C 代码,以便一些流行的社区库(包括 FFmpeg) 现在可以使用 Visual C++ 2013 进行编译。

因此,这有官方支持,但具有战略意义,从以下文章中我可以看出,更多支持将不得不与其他优先事项竞争。

我们有C++11/14 STL Features, Fixes, And Breaking Changes In VS 2013 Blog entry by STL:

此外,一些 C99 核心语言功能将在 2013 年 RTM:

C99 _Bool

C99 复合文字

C99 指定初始化器

C99 变量声明

和C99 library support in Visual Studio 2013 blog entry by Pat Brenner 打开:

在这篇博文中,我想分享一些关于 C99 的信息 添加到 Visual Studio 2013 中的 C 运行时库的支持。

并以:

结尾

我们知道这不是对 C99 库的完全支持 职能。据我们所知,缺失的部分是 这些:

tgmath.h 标头丢失。此头文件需要 C 编译器支持。 请注意,添加了 ctgmath 标头 — 这是可能的,因为该标头不需要 tgmath.h 标头 — 只有 ccomplex 和 cmath 标头。 uchar.h 标头丢失。这是来自 C Unicode TR。 尚不支持 printf 系列中的几个格式说明符。 stdio.h 和 wchar.h 中缺少 snprintf 和 snwprintf 函数。

这有点更有趣,因为 STL 积极地将 cmets 发送到博客并且它们很难总结,但我们可以看到未来的添加将取决于竞争的优先级。

感谢 cremno 指出另一篇博文 C Runtime (CRT) Features, Fixes, and Breaking Changes in Visual Studio 14 CTP1,其中写道:

在 Visual Studio“14”CTP 中,我们完全实现了 C99 标准库,但任何库功能除外 依赖于 Visual C++ 尚不支持的编译器功能 编译器(值得注意的是,<tgmath.h> 未实现)。有 毫无疑问,还有一些剩余的一致性问题——我们知道一些, 包括缺少 _Exit 和 wcstok 的签名错误, 我们正在努力解决这些问题。如果您发现错误或缺失 功能,请务必在 Microsoft Connect 上报告。如果您报告错误 现在,我们很有可能能够在之前修复它们 RTM。

并且有很多细节无法简单概括。

【讨论】:

顺便说一句,在VS2015中<uchar.h>snprintf()是可用的。还有其他与 C99 相关的更改。请参阅 this 较早的博客文章。 @cremno 谢谢!我曾多次研究过这个关于 VLA 的旧答案,但错过了那个。

以上是关于VS2013中C99支持的官方状态是啥?的主要内容,如果未能解决你的问题,请参考以下文章

用VS2013编译FFMPEG232

尝试在 VS2013 中启动 ASP.NET 项目时出现“当前状态下的操作不合法”错误?

Visual Studio 2017 是不是完全支持 C99?

Intel(R) Extreme Tuning Utility是啥软件

在 Android 中,对接状态是啥意思

有状态 Vs 无状态