目前主流編譯器對C++11特性的支持情況


目前主流編譯器對C++11特性的支持情況


 

1. GCC編譯器(從編譯器GCC4.8.X的版本完全支持)

  (1)目前C++11特性,之前成為C++0X特性,從GCC4.3的后續版本中逐步對C++11進行支持。

  (2)從官方信息可以看到,目前從完全對C++11特性進行支持的是從編譯器GCC4.8.X的版本。

  
  參考網址:https://gcc.gnu.org/projects/cxx-status.html#cxx11
2. Clang編譯器
  Clang 是一個 C++ 編寫、基於 LLVM、發布於 LLVM BSD 許可證下的 C/C++/Objective C/Objective C++ 編譯器,其目標(之一)就是超越 GCC。
  2013年4月, Clang已經全面支持C++11標准,並開始實現C++1y特性(也就是C++14,這是C++的下一個小更新版本)。
 
3. VS提供的編譯器MSVC:
  VS2013中,提供了大部分對於C++11的支持,
  VS2015中,提供了幾乎全部的C++11的支持。
  參考網址: VS2015預覽版中的C++11/14/17 的特性
  https://blogs.msdn.microsoft.com/c/2015/01/29/vs2015c111417/
  
集成開發環境情況
1. xcode
  Xcode 是運行在操作系統Mac OS X上的集成開發工具( IDE),由 蘋果公司開發。Xcode 具有統一的用戶 界面設計編碼、測試、 調試都在一個簡單的窗口內完成。
  最新版本Xcode7。
  Xcode3所使用的編譯器是gcc編譯器,而在Xcode4之后和版本中,Xcode所使用的編譯器已經替換成為新的LLVM編譯器。LLVM編譯器的前端是clang。
  LLVM是構架 編譯器(compiler)的框架系統,2006年Chris Lattner加盟Apple Inc.並致力於LLVM在Apple開發體系中的應用。
  2005年Apple雇了Chris Lattner,LLVM也相當於成了Apple的官方支持的 編譯器
  Apple已經將它用在 OpenCL的流水線優化,Xcode已經能使用llvm-gcc編譯代碼。
  2011-12-02 LLVM3.0發布,LLVM包括了一系列子項目,它們也同步發布了新版本,如C/C++/ Objective-C前端Clang 3.0改進了C++ 程序編譯支持;改進C++ 2011標准支持;實現支持即將發布的C1x標准的某些特性;更快的生成代碼,更快的編譯。
  XCode自帶的編譯器。
2. VS201X
 
 

編譯器比較

1. Clang 開發事出有因

  Apple 使用 LLVM 在不支持全部 OpenGL 特性的 GPU (Intel 低端顯卡) 上生成代碼 (JIT),令程序仍然能夠正常運行。之后 LLVM 與 GCC 的集成過程引發了一些不快,GCC 系統龐大而笨重,而 Apple 大量使用的 Objective-C 在 GCC 中優先級很低。此外 GCC 作為一個純粹的編譯系統,與 IDE 配合很差。加之許可證方面的要求,Apple 無法使用修改版的 GCC 而閉源。於是 Apple 決定從零開始寫 C family 的前端,也就是基於 LLVM 的 Clang 了。

Clang 的特性:

  • 快:通過編譯 OS X 上幾乎包含了所有 C 頭文件的 carbon.h 的測試,包括預處理 (Preprocess),語法 (lex),解析 (parse),語義分析 (Semantic Analysis),抽象語法樹生成 (Abstract Syntax Tree) 的時間,Clang 是 Apple GCC 4.0 的 2.5x 快。(2007-7-25)
  • 內存占用小:Clang 內存占用是源碼的 130%,Apple GCC 則超過 10x。
  • 診斷信息可讀性強:我不會排版,推薦去網站觀看。其中錯誤的語法不但有源碼提示,還會在錯誤的調用和相關上下文的下方有~~~~~和^的提示,相比之下 GCC 的提示很天書。
  • GCC 兼容性。
  • 設計清晰簡單,容易理解,易於擴展增強。與代碼基礎古老的 GCC 相比,學習曲線平緩。
  • 基 於庫的模塊化設計,易於 IDE 集成及其他用途的重用。由於歷史原因,GCC 是一個單一的可執行程序編譯器,其內部完成了從預處理到最后代碼生成的全部過程,中間諸多信息都無法被其他程序重用。Clang 將編譯過程分成彼此分離的幾個階段,AST 信息可序列化。通過庫的支持,程序能夠獲取到 AST 級別的信息,將大大增強對於代碼的操控能力。對於 IDE 而言,代碼補全、重構是重要的功能,然而如果沒有底層的支持,只使用 tags 分析或是正則表達式匹配是很難達成的

 2. GCC 也有其優勢:

  除去 Clang 之外,LLVM 還被用在 Gallium3D 中進行 JIT 優化,Xorg 中的 pixman 也有考慮使用 LLVM 來優化執行速度,llvm-lua 使用 LLVM 來編譯 Lua 代碼,gpuocelot 使用 LLVM 可以令 CUDA 程序無需重新編譯即可運行在多核 X86CPU、IBM Cell、支持 OpenCL 的設備之上...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM