c11标准的c语言编译器,官宣:MSVC新加入C11和C17标准
官宣
我們很高興的宣布,從Visual Studio 2019 v16.8 Preview 3開(kāi)始,C11和C17這兩個(gè)C語(yǔ)言版本將加入到MSVC編譯器工具集(toolset)。
多年以來(lái),Visual Studio僅僅是因?yàn)镃++的需要才對(duì)C進(jìn)行有限度的支持。現(xiàn)在,事情有轉(zhuǎn)變了:我們?cè)诰幾g器中添加了一個(gè)基于token的規(guī)范化預(yù)處理器,借助于兩項(xiàng)新加入的編譯器開(kāi)關(guān):/std:c11和/std:c17,我們終于可以正式宣布Visual Studio可以支持最新版本的C語(yǔ)言標(biāo)準(zhǔn)了。
具體都有些什么東西?
所有C11和C17中的特性都將得到支持。這意味著我們會(huì)添加如下的功能:
> _Pragma
> restrict
> _Noreturn 和
> _Alignas, _Alignof 和
> _Generic 和 support
> _Static_assert
IntelliSense組件將和這些特性無(wú)縫集成,你只需要將你的源代碼文件命名為.c結(jié)尾,或者使用編譯器開(kāi)關(guān)/TC來(lái)啟用語(yǔ)法高亮顯示,如下圖所示:
目前IntelliSense僅支持關(guān)鍵字的高亮顯示,還不能處理標(biāo)準(zhǔn)頭文件中的宏,這個(gè)問(wèn)題將在后面的版本中修復(fù)。
因?yàn)镃17本質(zhì)上只是對(duì)ISO C的一個(gè)Bug修復(fù),另外還增加了大量的缺陷報(bào)告處理。
我們對(duì)C11的支持已經(jīng)包含了這些相關(guān)的缺陷處理,除了__STDC_VERSION__這個(gè)宏的定義有所不同以外,我們對(duì)C11和C17的支持基本沒(méi)有什么不同。在C11中,__STDC_VERSION__被定義為201112L,C17中它被定義為201710L。
下面是一個(gè)簡(jiǎn)單的例子,它演示了上面所提到的一些功能特性:
因?yàn)橐肓嘶赥oken的規(guī)范化預(yù)處理器,上面提到的兩個(gè)C編譯器開(kāi)關(guān)都隱式包含/Zc:preprocessor選項(xiàng)。如果你還是想使用傳統(tǒng)的,基于字符的預(yù)處理器,你可以使用/Zc:preprocessor-這個(gè)開(kāi)關(guān)來(lái)回到舊的模式。但是我們鼓勵(lì)你能盡可能的修改代碼,使之不再依賴舊的工作模式。
尚未支持的特性
當(dāng)前不支持任何C11中的可選特性,但是我們還是會(huì)在將來(lái)的某個(gè)版本中提供那些影響力比較大的可選特性。在我們的路線圖中,原子性(Atomic)和線程(Threading)已經(jīng)提上日程。當(dāng)前還不支持復(fù)數(shù)(Complex numbers),但是可以通過(guò)一些合適的測(cè)試宏來(lái)進(jìn)行模擬。你可以告訴我們你想要哪些功能,這樣我們就可以給它們排上優(yōu)先級(jí)。
由于Windows堆的一些特性,aligned_alloc還不支持,作為替代的,可以使用_aligned_malloc。
另外,對(duì)于realloc的DR 400支持在當(dāng)前版本中也尚未實(shí)現(xiàn),因?yàn)檫@個(gè)可能會(huì)破壞ABI。
可變長(zhǎng)數(shù)組
VLA(Variable Length Arrays,可變長(zhǎng)數(shù)組)是C11中的一個(gè)可選特性,細(xì)心的讀者可能也注意到了:VLA也是不支持的。從性能上來(lái)說(shuō),VLA沒(méi)有定長(zhǎng)數(shù)組好,同時(shí)當(dāng)啟用了安全檢查時(shí),VLA也不如malloc()。同時(shí)VLA還為潛在的攻擊者提供了”Shifting the stack”漏洞利用機(jī)會(huì)和其他的一些安全隱患。基于這些原因,我們決定還是暫不支持VLA特性。
C11 和 C17 入門(mén)
為了在程序中使用C11或者C17,你可能需要安裝最新版本的Windows SDK,SDK中包含了所需要的預(yù)處理器(/Zc:preprocessor)和新的通用C運(yùn)行時(shí)庫(kù)。
一般來(lái)說(shuō),Windows SDK和Windows系統(tǒng)一起發(fā)布,因?yàn)檎桨娴腤indows還沒(méi)有包含這些新特性,所以你需要下載預(yù)覽版的Windows SDK(用于提供給Windows Insider的Windows SDK預(yù)覽版本)。
請(qǐng)注意,當(dāng)安裝了預(yù)覽版SDK后,在Visual Studio中配置了使用最新版Windows SDK的工程都會(huì)使用安裝好的預(yù)覽版SDK。
步驟1: 預(yù)覽版SDK入口
下圖是預(yù)覽版SDK下載入口:
步驟2: 下載預(yù)覽版SDK
步驟3:安裝預(yù)覽版SDK
步驟4: 在Visual Studio v16.8 Preview 3中配置C11或者C17工作模式
首先打開(kāi)工程屬性,然后確保工程使用的SDK為預(yù)覽版SDK。如下圖所示,將Windows SDK版本設(shè)置為10.0.20206.0(或者設(shè)置最新安裝版本)
在C Language Standard中,根據(jù)項(xiàng)目需要,可以將它設(shè)置為C11或者C17。
為了確保代碼使用C11或者C17編譯,請(qǐng)將源文件命名為以.c結(jié)尾,或者設(shè)置編譯以下編譯選項(xiàng):
恭喜恭喜:經(jīng)過(guò)以上這些步驟之后,你就可以體驗(yàn)C11和C17啦。
最后
Microsoft Visual C++團(tuán)隊(duì)的博客是我非常喜歡的博客之一,里面有很多關(guān)于Visual C++的知識(shí)和最新開(kāi)發(fā)進(jìn)展。大浪淘沙,如果你對(duì)Visual C++這門(mén)古老的技術(shù)還是那么感興趣,則可以經(jīng)常去他們那(或者我這)逛逛。
本文來(lái)自:《C11 and C17 Standard Support Arriving in MSVC》
總結(jié)
以上是生活随笔為你收集整理的c11标准的c语言编译器,官宣:MSVC新加入C11和C17标准的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Excel—数组
- 下一篇: (四)Kinect人脸识别