gcc和g++是用于C和C++代码的传统GNU编译器。最近,使用LLVM的clang(和clang++)作为备选编译器越来越受欢迎。
clang和gcc/g++有什么区别?使用clang是否有优势?
gcc和g++是用于C和C++代码的传统GNU编译器。最近,使用LLVM的clang(和clang++)作为备选编译器越来越受欢迎。
clang和gcc/g++有什么区别?使用clang是否有优势?
因此,LLVM可能是两个东西。LLVM-机器,即类型系统和指令集,可能更好地称为“LLVM IR”; LLVM-API是用于操作LLVM IR中的代码的软件,例如LLVM JIT编译器,或者可能是LLVM x86机器代码后端。
Clang是一个针对LLVM处理C系列语言(C、C ++、Objective C、Objective C ++)的前端。Clang将C/C++/etc转换为LLVM IR,LLVM对IR进行优化,LLVM x86后端编写x86机器代码以供执行。
尽管名字中带有“虚拟机”,但LLVM并不是传统意义上的虚拟机 - 它是一种计算模型和表示方法,非常适合于操作代码的任务。LLVM之所以受欢迎的部分原因在于它是一个完全具体化的编译器API。它可以用于对代码进行静态分析(“这段代码是否会意外地使用未初始化的内存?”)、优化、代码解析(例如用于构建IDE)。GCC的内部高度耦合,因此在这种方式下使用GCC非常困难。例如,GCC的前端在解析期间执行了一些优化,因此不可能总是获得完美的代码表示形式,例如报告错误和执行波浪线语法高亮,因为可能会丢失一些信息。据我所知,Clang保留了未经优化的解析语法,使第三方工具能够使用其输出并将转换等同于原始文本,最值得注意的是,Clang的错误消息更加有用,因为它们可以突出显示出问题的确切部分。