我们在iOS调试中经常会看到Clang这个,那么Clang到底是什么呢?我们来简单了解一下。

Clang是一个C、C++、OC语言的轻量级编译器。源代码发布于BSD协议下。Clang是由C++编写,基于LLVM,发布于LLVM BSD许可证下的编译器。它与GNU C语言规范几乎完全兼容,并增加了额外的特性。

那么来比较一下Clang和GCC。Clang编译速度更快,编译产出更小、出错提示更友好。clang采用的是BSD协议,这是苹果资助LLVM、FreeBSD淘汰GCC换用Clang的重要原因。

Low Level Virtual Machine(LLVM)是一个开源的编译器架构,Clang是LLVM的一个编译器前端。由于优秀的设计,使得Clang非常适合用于开发源代码级别的分析工具。Clang对源程序进行语法分析和语义分析,并将分析结果转换为Abstract Syntax Tree(抽象语法树),最后使用LLVM作为后端代码的生成器。Clang的开发目标是提供一个可以替代GCC的前端编译器。由于GNU编译器套装(GCC)系统庞大,而且Apple大量使用的OC在GCC中优先级较低,同时GCC作为一个纯粹的编译系统,与IDE配合并不优秀。Clang由Apple公司开发,源代码授权使用BSD的开源授权。

LLVM(底层虚拟机)是编译器框架系统,用C++编写而成。在Xcode中已经集成了LLVM。在这里,我为大家推荐一篇相关的优秀的文章 http://www.360doc.com/content/12/0326/21/7936054_198066001.shtml  。和大家共享一下。

Clang 与 LLVM的更多相关文章

  1. Clang:LLVM的C语言家族前端

    Clang:LLVM的C语言家族前端 Clang项目为LLVM 项目的C语言家族(C,C ++,Objective C / C ++,OpenCL,CUDA和RenderScript)中的语言提供了语 ...

  2. clang和llvm的安装

    https://blog.csdn.net/qq_31157999/article/details/78906982

  3. LLVM,Clang

    在使用xcode时常常会遇到这2个概念,今天总结一下. wiki中关于llvm的描述: LLVM提供了完整編譯系統的中間層,它會將中間語言(IF, Intermediate form)從編譯器取出與最 ...

  4. llvm+clang编译安装

    最近一段时间在llvm+clang上做一些东西,所以顺便将自己如何编译安装llvm+clang写了篇文章发在这里,希望能帮助刚接触llvm+clang的童鞋少走一些弯路(我刚接触的时候为了编译安装这个 ...

  5. LLVM和clang

    LLVM编译器架构 LLVM项目是一套工具的集合,它包括模块化.可复用的编译器及一些列工具链技术. LLVM最开始是Low Level Virtual Machine的简称,但现在它并不是传统意义上的 ...

  6. LLVM每日谈之二十 Everything && Clang driver

    作者:史宁宁(snsn1984) 近期在读<Getting Started with LLVM Core Libraries>.这是读的第一本LLVM的书.非常多地方尽管讲的是自己知道的东 ...

  7. 编译器:gcc, clang, llvm

    clang Clang是LLVM的前端,可以用来编译C,C++,ObjectiveC等语言.传统的编译器通常分为三个部分,前端(frontEnd),优化器(Optimizer)和后端(backEnd) ...

  8. iOS开发系列-LLVM、Clang

    LLVM LLVM计划启动于2000年,最初由University of Illinois at Urbana-Champaign的Chris Lattner主持开展. 我们可以认为LLVM是一个完整 ...

  9. Clang与libc++abi库安装

    系统ubuntu64位 Clang4.0 参考: 1 https://github.com/yangyangwithgnu/use_vim_as_ide#0.1 其中 第7章 工具链集成 2. htt ...

随机推荐

  1. Oracle 11g client的安装和配置。

    数据库和client在不同的机器之上. 在安装之前,在安装Oracle数据库的server上导航到以下的文件夹. 将listener.ora和tnsnames.ora中的host中的localhost ...

  2. PreferenceActivity 自动保存属性

    package com.example.preference; import android.content.Context; import android.os.Bundle; import and ...

  3. MYSQL在线注释文档--- 在gdb中显示源码(gdbtui使用方法)----赖明星的个人博客

    http://mingxinglai.com/cn/2013/07/gdbtui/ MySQL源码注释与类图 http://mingxinglai.com/cn/2015/08/mysql-annot ...

  4. 进程环境之main函数

    C程序总是从main函数开始执行.main函数的原型是: int main( int argc, char *argv[] ); 其中,argc是命令行参数的数目,argv是指向参数的各个指针所构成的 ...

  5. 【转】windows环境下利用doxygen生成代码文档

    作者:jiangwenna    http://www.jiangwenna.com/windows-doxygen-doc/ Doxygen是一种开源跨平台的,以类似JavaDoc风格描述的文档系统 ...

  6. iOS数据库之查找功能的实现

    首先引入文件: libsqlite3. FMDB(包含Global.m,Global.h文件) 关闭arc 用mesaSqlite创建一个数据库,引入文件中 其次: 首先,在Global.h文件中找到 ...

  7. Dynamic SQL--官方文档

    https://ibatis.apache.org/docs/dotnet/datamapper/ch03s09.html 3.9. Dynamic SQL A very common problem ...

  8. C#知识总结

    Control类属于Sytem的命名空间 表示控制台标准的输入输出和错误流提供用于从控制台读取单个字符或正行的方法还提供了很多写入的的方法, static 关键字是对方法的修饰 二 数据类型的分类 数 ...

  9. Java SSL/TLS Socket实现

    通信端无需向对方证明自己的身份,则称该端处于"客户模式",否则称其处于"服务器模式",无论是客户端还是服务器端,都可处于"客户模式"或者&q ...

  10. C++学习(二)

    九.3.内联1)编译器用函数的二进制代码替换函数调用语句,减少函数调用的时间开销.这种优化策略成为内联.2)频繁调用的简单函数适合内联,而稀少调用的复杂函数不适合内联.3)递归函数无法内联.4)通过i ...