由於須要研究的別人的代碼裏用到了clang++,因此在此記錄一下。轉載自:無求備齋筆記前端
gcc/g++ 和 clang/clang++ 都是 Linux 下經常使用的 C/C++ 編譯器。gcc 是 GNU 親兒子,Ubuntu 等經常使用發行版標配。clang 是後起之秀,配合 llvm,以優秀的前端聞名於世,如今已是 Mac(XCode) 的默認編譯器,微軟等大公司都在往上靠,前景一片光明。知乎上對幾個主流編譯器的評價:c++
(1)前景最好的應該是clang,錯誤提示/編譯速度都是一流。另外如今有不少代碼自動完成/提示工具是基於clang的。clang編譯出的debug文件已經能夠用gdb調試了哈,vs2015也內置了clang來提供對cross platfrom的支持。多線程
(2)gcc/g++/msvc由於面向了具體的platform,因此老的項目裏面可能用了他們自帶的擴展/或者在彼此應用環境下有一些best practice,這個沒有辦法,還得接着用。。。工具
(3)Borland?還活着?測試
(4)ICC,聽說經ICC編譯後效率有提升,即便是AMD的U也是這樣。。。我沒試過。。。線程
對我本身而言,優先級是clang>g++>msvc。debug
OK,那麼 clang 如何優秀呢,測試一下。測試平臺 Ubuntu 15.04. 安裝方法:調試
sudo apt-get install llvm
sudo apt-get install clang
切換默認 C++ 編譯器:code
sudo update-alternatives --config c++
There are 2 choices for the alternative c++ (providing /usr/bin/c++).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/g++ 20 auto mode
1 /usr/bin/clang++ 10 manual mode
2 /usr/bin/g++ 20 manual mode
Press enter to keep the current choice[*], or type selection number: 1
對於 C 語言:orm
sudo update-alternatives --config cc
流程同 C++。
用拼寫錯誤的變量名來測試一下 gcc 和 clang 的前端提示。
gcc 提示:
clang 提示:
僅僅在這個例子中,能夠看到 clang 優於 gcc 的地方有
優美的顏色高亮。單色 gcc 看着真累。
智能的提示。clang 不只告知有未定義變量,且知道多是拼寫出錯,並提示可能的正確變量在哪。
更優異的大局觀。本例子中拼寫錯誤出如今 return 語句裏,因爲 return 語句編譯出錯,gcc 還拋出一個 non-void function 可能缺乏 return 語句的 warning (明明個人 return 語句已經寫在那裏了)。clang 則知道 return 語句在那裏,不會拋出這個沒有必要的 warning。
目前我使用 clang 碰到的問題是,編譯使用 boost 庫的項目,運行時直接 Segmentation Fault,g++ 則無此問題。如今我直接使用 C++ 11 的多線程 API,不用 boost,因而仍用 clang 愉快地玩耍。