clang代替gcc

由於須要研究的別人的代碼裏用到了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 的地方有

  1. 優美的顏色高亮。單色 gcc 看着真累。

  2. 智能的提示。clang 不只告知有未定義變量,且知道多是拼寫出錯,並提示可能的正確變量在哪。

  3. 更優異的大局觀。本例子中拼寫錯誤出如今 return 語句裏,因爲 return 語句編譯出錯,gcc 還拋出一個 non-void function 可能缺乏 return 語句的 warning (明明個人 return 語句已經寫在那裏了)。clang 則知道 return 語句在那裏,不會拋出這個沒有必要的 warning。

目前我使用 clang 碰到的問題是,編譯使用 boost 庫的項目,運行時直接 Segmentation Fault,g++ 則無此問題。如今我直接使用 C++ 11 的多線程 API,不用 boost,因而仍用 clang 愉快地玩耍。

相關文章
相關標籤/搜索