这里比较Clang和gcc:
clang只需要完成词法和语法分析,代码优化和机器代码的生成工作由llvm完成。所以和全部由自己包下的gcc比起来,clang可以更专注地做好一件事。
这种结构也使clang可以被单独拿出来用在其他的程序里。比如vim的clang_complete插件就是利用clang进行语法分析后给出精确的自动补全和语法错误提示的。而gcc就没法很方便地做到这一点。
在实用性方面,除了有更快的编译速度更快和更友好的出错提示外,clang还内置有静态分析工具,可以对代码进行静态分析(clang --analyze)。这也是gcc做不到的。
Clang是LLVM的前端,可以用来编译C,C++,ObjectiveC等语言。传统的编译器通常分为三个部分,前端(frontEnd),优化器(Optimizer)和后端(backEnd)。
在编译过程中,前端主要负责词法和语法分析,将源代码转化为抽象语法树;优化器则是在前端的基础上,对得到的中间代码进行优化,使代码更加高效;后端则是将已经优化的中间代码转化为针对各自平台的机器代码。Clang则是以LLVM为后端的一款高效易用,并且与IDE结合很好的编译前端。
Clang/LLVM 是 Apache 2.0 开源许可 ,gcc 是 GPL 开源许可,前者比后者更自由,对商业化更友好。这就导致很多新创公司,愿意选择前者,更有利于自己在初期开发时保护自己的知识产权。
如果自己做IDE的话,代码提示和语法动态检测的实现部分还是用Clang吧,很多主流IDE也都是这么干的。
参考文章:
Clang 比 GCC 好在哪里?_百度知道