C11
2011年發布的C語言標準版
C11標準是 ISO/IEC 9899:2011 - Information technology -- Programming languages -- C 的簡稱,曾用名為C1X。
C11標準是C語言標準的第三版,前一個標準版本是C99標準。2011年12月8日,國際標準化組織(ISO)和國際電工委員會(IEC)旗下的C語言標準委員會(ISO/IEC JTC1/SC22/WG14)正式發布了C11標準。
C11標準的最終定稿的草案是免費開放的,為N1570 ,但是正式標準文件需要198瑞士法郎。
1. 對齊處理操作符 alignof,函數 aligned_alloc(),以及 頭文件 。見 7.15 節。
2. _Noreturn 函數標記,類似於 gcc 的 __attribute__((noreturn))。例子:
_Noreturn void thrd_exit(int res);
3. _Generic 關鍵詞,有點兒類似於 gcc 的 typeof。示例代碼:
_Static_assert(FOO > 0, "FOO has a wrong value");
5. 刪除了 gets() 函數,C99中已經將此函數被標記為過時,推薦新的替代函數 gets_s()。
7. 匿名結構體/聯合體,這個早已經在 gcc 中了,我們並不陌生,定義在 6.7.2.1 p13。
8. 多線程支持,包括:_Thread_local,頭文件 ,裡面包含線程的創建和管理函數(比如 thrd_create(),thrd_exit()),mutex (比如 mtx_lock(),mtx_unlock())等等,更多內容清參考 7.26 節。
9. _Atomic類型修飾符和 頭文件 ,見 7.17 節。
10. 帶邊界檢查(Bounds-checking)的函數介面,定義了新的安全的函數,例如 fopen_s(),strcat_s() 等等。更多參考 Annex K。
11. 改進的 Unicode 支持,新的頭文件 等。實例代碼:
12. 新增 quick_exit() 函數,作為第三種終止程序的方式,當 exit() 失敗時可以做最少的清理工作(deinitializition),具體見 7.22.4.7。
13. 創建複數的宏, CMPLX(),見 7.3.9.3。
14. 更多浮點數處理的宏(More macros for querying the characteristics of floating point types, concerning subnormal floating point numbers and the number of decimal digits the type is able to store)。
1、對IEEE754標準-2008的半精度浮點數的支持。儘管遵循GNU C標準規範的編譯器(GCC以及Clang等)使用了C擴展關鍵字__fp16,但是只能對半精度浮點數進行引用,而不能做任何算術操作。因此,這個特性應當在下一個C語言標準中立馬加入進去的,建議使用 _Half作為半精度浮點數類型的關鍵字。