1、 C語言的C11 標准有哪些改進的地方?會對各類C項目起到哪些幫助?
1. 對齊處理操作符 alignof,函數 aligned_alloc(),以及 頭文件 <stdalign.h>。
2. _Noreturn 函數標記,類似於 gcc 的 __attribute__((noreturn))。
3. _Generic 關鍵詞,有點兒類似於 gcc 的 typeof。
4. 靜態斷言( static assertions),_Static_assert(),在解釋 #if 和 #error 之后被處理。
5. 刪除了 gets() 函數,C99中已經將此函數被標記為過時,推薦新的替代函數 gets_s()。
6. 新的 fopen() 模式,(“…x”)。類似 POSIX 中的 O_CREAT|O_EXCL,在文件鎖中比較常用。
7. 匿名結構體/聯合體,這個早已經在 gcc 中了,我們並不陌生,定義在 6.7.2.1 p13。
8. 多線程支持,包括:_Thread_local,頭文件 <threads.h>,里面包含線程的創建和管理函數(比如 thrd_create(),thrd_exit()),mutex (比如 mtx_lock(),mtx_unlock())等等,更多內容清參考 7.26 節。
9. _Atomic類型修飾符和 頭文件 <stdatomic.h>,見 7.17 節。
10. 帶邊界檢查(Bounds-checking)的函數接口,定義了新的安全的函數,例如 fopen_s(),strcat_s() 等等。更多參考 Annex K。
11. 改進的 Unicode 支持,新的頭文件 <uchar.h> 等。
12. 新增 quick_exit() 函數,作為第三種終止程序的方式,當 exit() 失敗時可以做最少的清理工作(deinitializition),具體見 7.22.4.7。
13. 創建復數的宏, CMPLX()
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)。
15. struct timespec 成為 time.h 的一部分,以及宏 TIME_UTC,函數 timespec_get()。
這些改進的地方對程序員來說增加了不少的功能,可以減少原來自己實現的一些功能代碼。
2、 C11 為何不如 C++11 流行?如果說微軟對 C 不感興趣,還可以理解。畢竟Windows 上 C++ 的更多。但開源社區 C 才是一等公民,為何新標准沒有成為主流呢?
C++11的改進:
1.對C++核心語言的擴充
2.核心語言運行期的強化(右值引用和 move 語義;泛化的常數表達式;對POD定義的修正)
3.核心語言建構期表現的加強(外部模板)
4.核心語言使用性的加強(初始化列表;統一的初始化;類型推導[auto關鍵字];以范圍為基礎的 for 循環;Lambda函數與表示法;另一種的函數語法;對象構建的改良;顯式虛函數重載;空指針;強類型枚舉;角括號;顯式類型轉換;模板的別名;無限制的unions)
5.核心語言能力的提升(變長參數模板;新的字符串字面值;用戶自定義的字面值;多任務存儲器模型;thread-local的存儲期限;使用或禁用對象的默認函數;long long int 類型;靜態assertion;允許sizeof運算符作用在類型的數據成員上,無需明確的對象
6.C++標准程序庫的變更(標准庫組件的升級;線程支持;多元組類型;散列表;正則表達式;通用智能指針;可擴展的隨機數功能;包裝引用;多態函數對象包裝器;用於元編程的類型屬性;用於計算函數對象返回類型的統一方法)
不管怎么說,C++是面向對象的編程語言,在當前的大環境中,面向對象還是一個主流的開發。雖然說C在開源社區是一等公民。但畢竟C的就業范圍比較小。不如面向對象語言這么廣泛。
3、 最讓C程序員恐懼的C++特性是哪一個?哪個C++擁有而C沒有的feature是你認為弊大於利的呢? 或者說, 哪個C++有而C沒有的pitfall是你無法接受的?
面向對象。
4、 C、Scheme、Lua 和 Go 究竟哪個最簡單(最易上手/復雜度最低/最易精通)?
覺得還是C吧。