MSVC宣布支持C11和C17标准

日前微软VS团队宣布,将在Visual Studio 2019版本16.8预览版3开始,正式支持C11和C17为MSVC编译器。

日前微软VS团队宣布,将在Visual Studio 2019版本16.8预览版3开始,正式支持C11C17MSVC编译器。

日前微软VS团队宣布,将在Visual Studio 2019版本16.8预览版3开始,正式支持C11和C17为MSVC编译器。多年来,Visual Studio仅在C++要求的范围内支持C。随着两个新的编译器开关/std:c11和/std:c17的出现,VS将正式支持最新的ISO C语言标准。

MSVC宣布支持C11和C17标准

概述

支持C11和C17的所有必需功能,将会添加这些功能:_Pragma,restrict,_Noreturn和,_Alignas,_Alignof和,_Generic和,_Static_assert

IntelliSense本身也具有这些功能,只需为源文件使用.c文件扩展名或/TC编译器开关即可为C代码启用语法突出显示。

MSVC宣布支持C11和C17标准

IntelliSense高亮仅适用于关键字,不适用于标准标头引入的宏。由于C17本质上只是ISO C的错误修复版本,并且采用了许多缺陷报告,因此对C11的支持已经包括所有相关的缺陷报告。目前,C11和C17版本之间没有什么区别,除了__STDC_VERSION__宏,该宏扩展为201112L(对于C11)和201710L(对于C17)。

这是显示这些功能的示例:

  1. #include<assert.h>
  2. #include<stdalign.h>#include<stdlib.h>#include<stdnoreturn.h>#defineNO_WARN(X)_Pragma("warning(push)")_Pragma("warning(disable:4146)")X;_Pragma("warning(pop)")
  3. #definestore(x,y)_Generic((x),data*:stored,int*:storei)(x,y)
  4. typedefstructdata{
  5. _Alignas(8)unsignedinti;
  6. }data;
  7. static_assert(alignof(data)==8,"dataisnotproperlyaligned");
  8. voidstored(data*restrictdst,constdata*restrictsrc)
  9. {//Donottriggerwarning4245
  10. dst->i=NO_WARN(-(src->i));
  11. }
  12. voidstorei(int*restrictdst,constint*restrictsrc)
  13. {
  14. *dst=*src;
  15. }
  16. noreturnvoidmy_exit(intret){
  17. exit(ret);
  18. }
  19. intmain(){
  20. datasrc,dst;
  21. src.i=5;
  22. inti,j;
  23. i=10;
  24. store(&src,&dst);
  25. store(&i,&j);
  26. my_exit(0);
  27. }

由于包含了基于令牌的一致性预处理器,因此这两个新的C编译器开关暗示/Zc:preprocessor。如果要与C11或C17一起使用基于字符的传统预处理器,则需要显式传递编译器开关/Zc:preprocessor-。

尽管目前不支持任何C11可选功能,会在将来的版本中提供最具影响力的可选功能。原子和线程支持在我们的路线图上。目前尚不支持对复数的支持,并且通过适当的功能测试宏来强制不支持复数。

由于Windows堆的性质,缺少对aligned_alloc的支持。另一种方法是使用_aligned_malloc。

此外,由于realloc更改可能会破坏ABI,因此目前尚未实现DR 400支持。

同时也不支持VLA。可变长度数组通常比可比的固定大小数组效率低,并且在安全可靠地实现时,与等效数组相比效率通常较低。VLA存在gets()安全问题,可以被 "转移堆栈"和其他的利用。由于这些原因,VLA支持仅仅为可选功能。

基本设置

为了在程序中使用C11或C17,需要最新的Windows SDK更新才能与兼容的预处理器(/Zc:preprocessor)并在新的Universal C Runtime下工作。Windows SDK版本与Windows OS版本相对应。由于没有更改对应的Windows版本,因此需要一个Insider Preview Windows SDK-Windows SDK的预览版本,该版本与当前为Windows Insiders发行的Windows版本相对应。注意,在安装Insider Preview Windows 10 SDK之后,配置为使用最新Windows SDK的Visual Studio项目将使用Insider Preview。

登陆Microsoft Insider

任何人都可以创建一个免费的Microsoft帐户,然后选择加入Insider程序, "注册"并登录。

MSVC宣布支持C11和C17标准

注册后,将提供开始运行Insider版本的Windows的选项,但是下载和使用Insider Windows 10 SDK是非必须的。

MSVC宣布支持C11和C17标准

一旦你点击这个页面,你就不会需要点击"Flight now"。继续进行下一步,并下载Insider Preview Windows 10 SDK。

下载Insider Preview Windows 10 SDK

可以从software-download/windowsinsiderpreviewSDK安装Insider Preview Windows SDK。

MSVC宣布支持C11和C17标准

Insider页面描述了需要使用Windows 10 Insider Preview OS。对于Windows SDK中包含的某些内容,这是正确的,取决于Windows的较早版本中不存在的新API,但是Windows和Universal C Runtime标头将正确安装并且在没有Insider OS的情况下可用。

点击"获取SDK Insider预览-内部版本20206"开始下载。Windows SDK的将来版本也将起作用。

安装Insider Preview Windows 10 SDK

Insider Preview Windows SDK将作为.iso文件下载。

MSVC宣布支持C11和C17标准

挂载.iso文件并运行WinSDKSetup.exe以开始安装。

MSVC宣布支持C11和C17标准

选择在计算机上安装Windows软件开发套件,然后单击下一步。必须选择是否允许深入了解Windows SDK的使用,并且必须接受许可协议,然后才能到达功能部件安装页面。应该安装的唯一功能(除非使用Windows 10的Insider Preview构建):

  • 适用于桌面应用程序的Windows SDK签名工具
  • 适用于UWP托管应用程序的Windows SDK
  • 适用于UWP C ++应用程序的Windows SDK
  • Windows SDK for Desktop C++ x86应用程序(为x86进行构建)
  • Windows SDK for Desktop C++ arm64应用程序(为arm64构建)
  • Windows SDK for Desktop C++ ARM应用程序(为ARM构建)

MSVC宣布支持C11和C17标准

SDK将花费几分钟的时间来完成安装,然后就可以打开Visual Studio 16.8 Preview 3。

配置C11或C17模式

为了在Visual Studio 16.8 Preview 3中支持C11和C17。可以直接载最新的Preview版本。

在项目中,打开"属性"页面。确保该项目将使用Insiders Preview Window 10 SDK。将Windows SDK版本设置为10.0.20206.0(或刚刚安装的最新的Insider Preview Windows 10 SDK)。

MSVC宣布支持C11和C17标准

将能看到一个新选项:C语言标准。

MSVC宣布支持C11和C17标准

当语言为C++时使用C++语言标准,当文件扩展名为.cpp为默认设置。当语言为C时,使用C语言标准版本,扩展名为.c,默认c版本。为确保使用C11或C17构建项目,必须确保它是文件,或在"属性"选项卡中将代码设置为编译为C。

MSVC宣布支持C11和C17标准

这些项目更改之后,就可以测试使用C11和C17。

总结

支持C11和C17,这对使用VS Windows的开发者来说是个好消息,希望大家尝鲜使用。

©本文为清一色官方代发,观点仅代表作者本人,与清一色无关。清一色对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。本文不作为投资理财建议,请读者仅作参考,并请自行承担全部责任。文中部分文字/图片/视频/音频等来源于网络,如侵犯到著作权人的权利,请与我们联系(微信/QQ:1074760229)。转载请注明出处:清一色财经

(0)
打赏 微信扫码打赏 微信扫码打赏 支付宝扫码打赏 支付宝扫码打赏
清一色的头像清一色管理团队
上一篇 2023年5月5日 13:23
下一篇 2023年5月5日 13:23

相关推荐

发表评论

登录后才能评论

联系我们

在线咨询:1643011589-QQbutton

手机:13798586780

QQ/微信:1074760229

QQ群:551893940

工作时间:工作日9:00-18:00,节假日休息

关注微信