热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

c17语言标准,官宣:MSVC新加入C11和C17标准

原标题:官宣:MSVC新加入C11和C17标准官宣我们很高兴的宣布,从VisualStudio2019v16.8Preview3开始&#x


原标题:官宣:MSVC新加入C11和C17标准


官宣


我们很高兴的宣布,从Visual Studio 2019 v16.8 Preview 3开始,C11和C17这两个C语言版本将加入到MSVC编译器工具集(toolset)。


多年以来,Visual Studio仅仅是因为C++的需要才对C进行有限度的支持。现在,事情有转变了:我们在编译器中添加了一个基于token的规范化预处理器,借助于两项新加入的编译器开关:/std:c11和/std:c17,我们终于可以正式宣布Visual Studio可以支持最新版本的C语言标准了。


具体都有些什么东西?


所有C11和C17中的特性都将得到支持。这意味着我们会添加如下的功能:


> _Pragma


> restrict


> _Noreturn 和


> _Alignas, _Alignof 和


> _Generic 和 support


> _Static_assert


IntelliSense组件将和这些特性无缝集成,你只需要将你的源代码文件命名为.c结尾,或者使用编译器开关/TC来启用语法高亮显示,如下图所示:


624ed60a25fda97743e74506a48f1108.png


目前IntelliSense仅支持关键字的高亮显示,还不能处理标准头文件中的宏,这个问题将在后面的版本中修复。


因为C17本质上只是对ISO C的一个Bug修复,另外还增加了大量的缺陷报告处理。我们对C11的支持已经包含了这些相关的缺陷处理,除了__STDC_VERSION__这个宏的定义有所不同以外,我们对C11和C17的支持基本没有什么不同。在C11中,__STDC_VERSION__被定义为201112L,C17中它被定义为201710L。


下面是一个简单的例子,它演示了上面所提到的一些功能特性:


02752b5bc911e3aeb9f7a101c942d322.png


2a3fe96b97648fc9c7ef1d57f5d0b825.png


因为引入了基于Token的规范化预处理器,上面提到的两个C编译器开关都隐式包含/Zc:preprocessor选项。如果你还是想使用传统的,基于字符的预处理器,你可以使用/Zc:preprocessor-这个开关来回到旧的模式。但是我们鼓励你能尽可能的修改代码,使之不再依赖旧的工作模式。


尚未支持的特性


当前不支持任何C11中的可选特性,但是我们还是会在将来的某个版本中提供那些影响力比较大的可选特性。在我们的路线图中,原子性(Atomic)和线程(Threading)已经提上日程。当前还不支持复数(Complex numbers),但是可以通过一些合适的测试宏来进行模拟。你可以告诉我们你想要哪些功能,这样我们就可以给它们排上优先级。


由于Windows堆的一些特性,aligned_alloc还不支持,作为替代的,可以使用_aligned_malloc。


另外,对于realloc的DR 400支持在当前版本中也尚未实现,因为这个可能会破坏ABI。


可变长数组


VLA(Variable Length Arrays,可变长数组)是C11中的一个可选特性,细心的读者可能也注意到了:VLA也是不支持的。从性能上来说,VLA没有定长数组好,同时当启用了安全检查时,VLA也不如malloc()。同时VLA还为潜在的攻击者提供了”Shifting the stack”漏洞利用机会和其他的一些安全隐患。基于这些原因,我们决定还是暂不支持VLA特性。


C11 和 C17 入门


为了在程序中使用C11或者C17,你可能需要安装最新版本的Windows SDK,SDK中包含了所需要的预处理器(/Zc:preprocessor)和新的通用C运行时库。


一般来说,Windows SDK和Windows系统一起发布,因为正式版的Windows还没有包含这些新特性,所以你需要下载预览版的Windows SDK(用于提供给Windows Insider的Windows SDK预览版本)。


请注意,当安装了预览版SDK后,在Visual Studio中配置了使用最新版Windows SDK的工程都会使用安装好的预览版SDK。


步骤1: 预览版SDK入口


下图是预览版SDK下载入口:


53a3e68f8f25fd0b15d5d92324157aaf.png


23c5682328826194dcd75e84b0f19ed1.png


步骤2: 下载预览版SDK


00d81059caba693422c41fe8c86d8087.png


步骤3:安装预览版SDK


6070f7412ee600f2218cfcaa14b8e2ac.png


c5a5b87bd66b8e92192a04dde0f0ca54.png


3d528891905501cf08f972af67f3d128.png


步骤4: 在Visual Studio v16.8 Preview 3中配置C11或者C17工作模式


首先打开工程属性,然后确保工程使用的SDK为预览版SDK。如下图所示,将Windows SDK版本设置为10.0.20206.0(或者设置最新安装版本)


090a77be4b4062fa984d9ff5ffca6ec2.png


在C Language Standard中,根据项目需要,可以将它设置为C11或者C17。


eedfdb8fa54f8eac55c5d5500a8d9a6d.png


为了确保代码使用C11或者C17编译,请将源文件命名为以.c结尾,或者设置编译以下编译选项:


274efb7d2fb1111f755ac2ba067c7341.png


恭喜恭喜:经过以上这些步骤之后,你就可以体验C11和C17啦。


最后


Microsoft Visual C++团队的博客是我非常喜欢的博客之一,里面有很多关于Visual C++的知识和最新开发进展。大浪淘沙,如果你对Visual C++这门古老的技术还是那么感兴趣,则可以经常去他们那(或者我这)逛逛。


本文来自:《C11 and C17 Standard Support Arriving in MSVC》


责任编辑:




推荐阅读
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • svnWebUI:一款现代化的svn服务端管理软件
    svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ... [详细]
  • 本文介绍了如何在Azure应用服务实例上获取.NetCore 3.0+的支持。作者分享了自己在将代码升级为使用.NET Core 3.0时遇到的问题,并提供了解决方法。文章还介绍了在部署过程中使用Kudu构建的方法,并指出了可能出现的错误。此外,还介绍了开发者应用服务计划和免费产品应用服务计划在不同地区的运行情况。最后,文章指出了当前的.NET SDK不支持目标为.NET Core 3.0的问题,并提供了解决方案。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
author-avatar
mobiledu2502940265
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有