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

AnT*_*AnT 20 c c99 visual-studio

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

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

那么,有什么官方或半官方的话说明发生了什么?我似乎无法在网上找到任何确定的内容.这些C99功能是否正式公布?是否有任何承诺继续在VS中支持C99?或者这只是某种"流氓"的非官方发展?

Sha*_*our 10

微软开发人员对此进行了一些公开的官方讨论,C++一致性路线图说:

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

所以这有官方的支持,但具有战略意义,从以下文章可以看出,更多的支持必须与其他优先事项竞争.

我们在STL的VS 2013博客条目中C++ 11/14 STL功能,修复和重大变化:

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

  • C99 _Bool

  • C99复合文字

  • C99指定的初始化器

  • C99变量声明

C99库支持在Visual Studio 2013年帕特布伦纳博客条目与打开:

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

并结束于:

我们知道这不完全支持C99库函数.据我们所知,缺少的部分是这些:

  • 缺少tgmath.h标头.此标头需要C编译器支持.请注意,添加了ctgmath标头 - 这是可能的,因为该标头不需要tgmath.h标头 - 仅ccomplex和cmath标头.
  • 缺少uchar.h标头.这是来自C Unicode TR.目前还不支持printf系列中的几个格式说明符.
  • stdio.h和wchar.h中缺少snprintf和snwprintf函数.

这更有趣,因为STL积极地对博客发表评论并且很难总结,但我们可以看到未来的增加将取决于相互竞争的优先级.

感谢cremno指出另一篇博客文章C Runtime(CRT)功能,修复和Visual Studio 14 CTP1中的重大变化,其中说:

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

并且有很多不容易总结的细节.

  • 顺便说一句,在VS2015中,`<uchar.h>`和`snprintf()`可用.还有其他C99相关的变化.见[this](http://blogs.msdn.com/b/vcblog/archive/2014/06/18/crt-features-fixes-and-breaking-changes-in-visual-studio-14-ctp1.aspx )较旧的博文. (2认同)