日前微软VS团队宣布,将在Visual Studio 2019版本16.8预览版3开始,正式支持C11和C17为MSVC编译器。多年来,Visual Studio仅在C++要求的范围内支持C。随着两个新的编译器开关/std:c11和/std:c17的出现,VS将正式支持最新的ISO C语言标准。
创新互联公司服务项目包括市北网站建设、市北网站制作、市北网页制作以及市北网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,市北网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到市北省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
概述
支持C11和C17的所有必需功能,将会添加这些功能:_Pragma,restrict,_Noreturn和 ,_Alignas,_Alignof和 ,_Generic和 ,_Static_assert
IntelliSense本身也具有这些功能,只需为源文件使用.c文件扩展名或/TC编译器开关即可为C代码启用语法突出显示。
IntelliSense高亮仅适用于关键字,不适用于标准标头引入的宏。由于C17本质上只是ISO C的错误修复版本,并且采用了许多缺陷报告,因此对C11的支持已经包括所有相关的缺陷报告。目前,C11和C17版本之间没有什么区别,除了__STDC_VERSION__宏,该宏扩展为201112L(对于C11)和201710L(对于C17)。
这是显示这些功能的示例:
- #include
- #include
#include #include #define NO_WARN(X) _Pragma("warning (push)") _Pragma("warning (disable: 4146)") X; _Pragma("warning (pop)") - #define store(x, y) _Generic((x), data*: stored, int* : storei)(x, y)
- typedef struct data {
- _Alignas(8) unsigned int i;
- } data;
- static_assert(alignof(data) == 8, "data is not properly aligned");
- void stored(data* restrict dst, const data* restrict src)
- {// Do not trigger warning 4245
- dst->i = NO_WARN(-(src->i));
- }
- void storei(int* restrict dst, const int* restrict src)
- {
- *dst = *src;
- }
- noreturn void my_exit(int ret) {
- exit(ret);
- }
- int main() {
- data src, dst;
- src.i = 5;
- int i, j;
- i = 10;
- store(&src, &dst);
- store(&i, &j);
- my_exit(0);
- }
由于包含了基于令牌的一致性预处理器,因此这两个新的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程序, "注册"并登录。
注册后,将提供开始运行Insider版本的Windows的选项,但是下载和使用Insider Windows 10 SDK是非必须的。
一旦你点击这个页面,你就不会需要点击"Flight now"。继续进行下一步,并下载Insider Preview Windows 10 SDK。
下载Insider Preview Windows 10 SDK
可以从software-download/windowsinsiderpreviewSDK安装Insider Preview Windows SDK。
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文件下载。
挂载.iso文件并运行WinSDKSetup.exe以开始安装。
选择在计算机上安装Windows软件开发套件,然后单击下一步。必须选择是否允许深入了解Windows SDK的使用,并且必须接受许可协议,然后才能到达功能部件安装页面。应该安装的唯一功能(除非使用Windows 10的Insider Preview构建):
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)。
将能看到一个新选项:C语言标准。
当语言为C++时使用C++语言标准,当文件扩展名为.cpp为默认设置。当语言为C时,使用C语言标准版本,扩展名为.c,默认c版本。为确保使用C11或C17构建项目,必须确保它是文件,或在"属性"选项卡中将代码设置为编译为C。
这些项目更改之后,就可以测试使用C11和C17。
总结
支持C11和C17,这对使用VS Windows的开发者来说是个好消息,希望大家尝鲜使用。
文章名称:MSVC宣布支持C11和C17标准
文章来源:http://www.shufengxianlan.com/qtweb/news36/74636.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联