首页 文章

Visual Studio支持新的C / C标准?

提问于
浏览
101

我一直在阅读关于C99和C 11以及所有这些非常甜蜜的东西,它们被添加到语言标准中,有朝一日可能会很好用 . 但是,我们目前在Visual Studio中编写C语言已经萎靡不振 .

标准中的任何新东西是否会被添加到visual studio中,或者微软是否更有兴趣添加新的C#变体来做到这一点?

编辑:除了接受的答案,我找到了Visual C团队博客:

http://blogs.msdn.com/vcblog/

具体来说,这篇文章在其中:

http://blogs.msdn.com/vcblog/archive/2008/02/22/tr1-slide-decks.aspx

很有用 . 谢谢!

12 回答

  • 37

    MS对此有一系列的公开回复,其中大多数都指责他们的用户 . 像这个:

    http://blogs.msdn.com/vcblog/archive/2007/11/05/iso-c-standard-update.aspx

    现在,Visual C编译器团队偶尔会收到关于我们为什么没有实现C99的问题 . 它真的基于我们用户的兴趣 . 在我们收到许多关于某些C99功能的请求的地方,我们已经尝试实现它们(或类似物) . 一些例子是可变参数宏,long long,__ pragma,__ FUNCTION__和__restrict . 如果您在工作中发现其他C99功能,请告诉我们!我们没有从C用户那里听到太多,所以大声说出来并让自己听到

    http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=345360

    嗨:不幸的是,我们从大多数用户那里得到的压倒性的反馈是他们更希望我们专注于C-0而不是C-99 . 我们已经“挑选”某些流行的C-99特征(可变宏,很长),但除此之外,我们不太可能在C-99空间做更多的事情(至少在短期内) . Jonathan Caves Visual C编译器团队 .

    这是一个非常悲伤的事态,但如果你怀疑MS想要锁定用户,这也是有道理的:它很难将现代的基于gcc的代码移植到MSVC中,至少我觉得非常痛苦 .

    但是存在一种解决方法:请注意,英特尔对此更为开明 . 英特尔C编译器可以处理C99代码甚至与gcc具有相同的标志,使得在平台之间移植代码变得更加容易 . 此外,英特尔编译器适用于visual studio . 因此,通过废弃MS COMPILER,您仍然可以使用您认为具有某种 Value 的MS IDE,并使用C99来表达您的内心 .

    一个更明智的方法是诚实地转移到Intel CC或gcc,并将Eclipse用于您的编程环境 . 跨Windows-Linux-Solaris-AIX-etc的代码的可移植性在我的经验中通常很重要,遗憾的是MS工具完全不支持 .

  • 7

    Herb Sutter是C标准化委员会的主席和非常活跃的成员,以及Visual Studio for Microsoft的软件架构师 .

    他是为C 0x标准化的新C内存模型的作者之一 . 例如,以下论文:

    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2669.htm
    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2197.pdf

    他的名字就在上面 . 所以我想只要H. Sutter留在微软,就可以确保在Windows上包含C 0x .

    至于部分包含在Visual Studio中的C99,我想这是一个优先级问题 .

    • 最有趣的C99功能已经存在于C(内联,变量声明,//注释等)中,并且可能已经在Visual Studio中的C中使用(如果只在C编译器中执行C代码) . 有关C中C99功能的更完整讨论,请参阅我的答案here .

    • C99通过添加已经存在于C中的功能来增加C和C之间的差异,但是以不兼容的方式(抱歉,C99中的布尔复杂实现是可笑的,充其量...有关详细信息,请参阅http://david.tribble.com/text/cdiffs.htm

    • Windows上的C社区似乎不存在或不够重要,无法被承认

    • Windows上的C社区似乎太重要了,不容忽视

    • .NET是微软希望人们在Windows上编程的方式 . 这意味着C#,VB.NET,也许是C / CLI .

    那么,我是否会成为微软,为什么我会在很多人已经使用的更多社区活跃语言中提供相同的功能时,实现很少有人会使用的功能?

    结论?

    C 0x将包含在VS 2008的扩展中,或者包含在Visual Studio的下一代(几代?)中 .

    未经实施的C99功能将不会在未来几年内出现,除非发生一些戏剧性的事情(一个充满C99开发者的国家突然出现?)

    编辑2011-04-14

    显然,"country full of C99 developers"已经存在:http://blogs.msdn.com/vcblog/archive/2007/11/05/iso-c-standard-update.aspx#6415401
    ^ _ ^

    不过,我猜最后评论:http://blogs.msdn.com/vcblog/archive/2007/11/05/iso-c-standard-update.aspx#6828778已经足够清楚了 .

    编辑2012-05-03

    草药萨特明确表示:

    我们的主要目标是支持“大部分C99 / C11,它是ISO C 98 / C 11的子集 . ”我们还出于历史原因发布了C90编译器,它接受(仅)C90而不是C我们不打算支持不属于C90或ISO C的ISO C功能 .

    博客文章为这些决定添加链接和进一步解释 .

    资料来源:http://herbsutter.com/2012/05/03/reader-qa-what-about-vc-and-c99/

  • 3

    VC2013 preview 1,C99开始,支持更多样化的C 11和一些新引入的C 14标准 . 查看官方博客了解更多详情:http://blogs.msdn.com/b/vcblog/archive/2013/06/27/what-s-new-for-visual-c-developers-in-vs2013-preview.aspx

    Update:

    来自https://news.ycombinator.com/item?id=9434483(Stephan T Lavavej又名:STL是STL @VC团队的维护者):

    具体来说,2015年我们的C99标准库实现已完成,但tgmath.h(在C中无关)和CX_LIMITED_RANGE / FP_CONTRACT pragma宏除外 .

    查看此帖子了解详情:http://blogs.msdn.com/b/vcblog/archive/2015/04/29/c-11-14-17-features-in-vs-2015-rc.aspx .

  • 4

    我参与了ISO C工作(2000-2005),微软对该语言做出了重要贡献 . 毫无疑问,他们将在C 0x上工作,但他们需要比英特尔更多的时间 . Micosoft必须处理通常使用其专有扩展的更大代码库 . 这简单地使得更长的测试时间 . 然而,他们最终会支持大部分的C 0x(导出仍然不被喜欢,或者我理解) .

    在ISO C方面,从事标准工作的人员并不代表微软市场 . 如果微软客户只是在寻找更好的C,那么他们可以使用C 98 . 那么为什么微软会在C99上花钱呢?当然,微软挑选了部分产品,但这是理智的业务 . 无论如何他们都需要那些C 0x,为什么要等?

  • 4

    遗憾的是,MSVC对C的支持非常缺乏 . 它只支持C99的一部分,它是C的子集......这意味着,例如,在MSVC中编译ffmpeg或其libav *库在物理上是不可能的,因为它们使用许多C99功能,例如命名的struct元素 . 由于libavcodec还需要一个维护堆栈对齐的编译器,MSVC不需要这样做,因此情况更糟 .

    我在x264上工作,与ffmpeg不同,它确实努力支持MSVC,尽管这样做本身往往是一场噩梦 . 即使您通过显式的基于汇编的堆栈对齐函数显式传递最高函数调用,它也不会保持堆栈对齐,因此必须禁用所有需要对齐堆栈的函数 . 它也非常烦人,我也不能使用vararrays;也许这是最好的,因为显然海湾合作委员会大规模地使他们在表现方面感到悲观 .

  • 6

    有关MSVC 2010年和2011年MSVC C 11功能兼容性的最新帖子是now online .

  • 8

    微软从来没有表现出真正的兴趣与c99标准保持同步(现在已经老了) . 对于C程序员来说很难过,但我怀疑微软更关心C -community .

  • 4

    Visual C 2008 SP1至少包含TR1的部分内容,并且Visual C团队不时会在博客上或谈论C 0x,所以我猜他们会在该功能的某个时间支持它 . 虽然我没有阅读任何官方文章 .

  • 101

    更新了以下信息:

    现在(2008年11月10日)VS1010的"Community Tech Preview"(CTP)包含VC10的预览,其中实现了C 0x的某些部分(请注意,即使VC10发布,VC10也不会实现完整的C 0x更改) :

    http://www.microsoft.com/downloads/details.aspx?FamilyId=922B4655-93D0-4476-BDA4-94CF5F8D4814&displaylang=en

    有关VC10 CTP新功能的一些细节:

    如上文所述,“Microsoft Visual Studio 2010 9月社区技术预览版(CTP)中的Visual C编译器包含对四种C 0x语言功能的支持,即:”

    • lambdas,

    • auto,

    • static_assert,

    • 右值参考

  • 3

    Herb Sutter是ISO C标准组织的主席,也为Microsoft工作 . 我不知道Visual Studio C标准 - 主要是因为我从不使用普通的C - 但微软肯定会尝试推进新的C标准 . 有证据表明 - 就像OregonGhost提到的那样 - 最新的Visual Studio Service Release中包含的TR1 .

  • 11

    Visual C团队确实推出了一个C 0x功能表,2010版本支持这些功能http://blogs.msdn.com/b/vcblog/archive/2010/04/06/c-0x-core-language-features-in-vc10-the-table.aspx . 由于规范和实现之间可能存在滞后时间,因此这看起来非常合理 . 维基百科有一篇关于规范的好文章 . 它's not finished at the time I'写这个 .

  • 1

    该Visual C Bloq提供了关于VC 11中C 11支持的几个有关点的大量信息,包括几个表

    • C 11核心语言功能

    • C 11核心语言特性:并发

    • C 11核心语言特点:C99

    • x86容器大小(字节)

    • x64容器大小(字节)

    Visual C团队博客,C 11 Visual C 11中的功能

相关问题