c11标准的c语言编译器,官宣: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來啟用語法高亮顯示,如下圖所示:
目前IntelliSense僅支持關鍵字的高亮顯示,還不能處理標準頭文件中的宏,這個問題將在后面的版本中修復。
因為C17本質上只是對ISO C的一個Bug修復,另外還增加了大量的缺陷報告處理。
我們對C11的支持已經包含了這些相關的缺陷處理,除了__STDC_VERSION__這個宏的定義有所不同以外,我們對C11和C17的支持基本沒有什么不同。在C11中,__STDC_VERSION__被定義為201112L,C17中它被定義為201710L。
下面是一個簡單的例子,它演示了上面所提到的一些功能特性:
因為引入了基于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下載入口:
步驟2: 下載預覽版SDK
步驟3:安裝預覽版SDK
步驟4: 在Visual Studio v16.8 Preview 3中配置C11或者C17工作模式
首先打開工程屬性,然后確保工程使用的SDK為預覽版SDK。如下圖所示,將Windows SDK版本設置為10.0.20206.0(或者設置最新安裝版本)
在C Language Standard中,根據項目需要,可以將它設置為C11或者C17。
為了確保代碼使用C11或者C17編譯,請將源文件命名為以.c結尾,或者設置編譯以下編譯選項:
恭喜恭喜:經過以上這些步驟之后,你就可以體驗C11和C17啦。
最后
Microsoft Visual C++團隊的博客是我非常喜歡的博客之一,里面有很多關于Visual C++的知識和最新開發進展。大浪淘沙,如果你對Visual C++這門古老的技術還是那么感興趣,則可以經常去他們那(或者我這)逛逛。
本文來自:《C11 and C17 Standard Support Arriving in MSVC》
總結
以上是生活随笔為你收集整理的c11标准的c语言编译器,官宣:MSVC新加入C11和C17标准的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Excel—数组
- 下一篇: (四)Kinect人脸识别