我看到VS2013增加了对C99的大量主要核心语言功能的支持。现在它支持复合文字,指定初始化器,可变参数宏,交错声明和语句,仅举几例。
这表明VS开发人员在Visual Studio中采取了认真的C99支持措施。然而,其中一些功能不是C ++语言的一部分,这似乎与先前宣布的开发策略有明显的偏差(例如“VS C编译器仅支持那些也是C ++一部分的C99功能”)。 p>
那么,有什么官方或半官方的消息说明发生了什么?我似乎无法在网上找到任何确定的内容。这些C99功能是否正式公布?是否有任何承诺继续在VS中支持C99?或者这只是某种“流氓”的非官方发展?
答案 0 :(得分:10)
微软开发人员对此进行了一些公开的官方讨论,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运行时库。
并以:
结束由于STL积极地对博客发表评论并且很难总结,但是我们可以看到未来的增加将取决于相互竞争的优先级。我们知道这不是对C99库的完全支持 功能。据我们所知,缺失的部分是 这些:
- 缺少tgmath.h标头。此标头需要C编译器支持。 请注意,添加了ctgmath标头 - 这是可能的,因为该标头不需要tgmath.h标头 - 仅 ccomplex和cmath标题。
- 缺少uchar.h标头。这是来自C Unicode TR。 目前还不支持printf系列中的几个格式说明符。
- stdio.h和wchar.h中缺少snprintf和snwprintf函数。
感谢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。
并且有很多细节无法轻易归纳。