这个问题主要讲Xcode编译器的认知,在学习iOS之前有必要学习一下Objective-C的编译环境。

在了解LLVM和Clang之前,先得了解一下什么是编译器。

编译器是一种计算机程序,它将某种编程语言(高级编程语言)写成的源代码转换成另一种编程语言(低级编程语言)。一个现代编译器的主要工作流程为:源代码->预处理器->编译器->目标代码->链接器->可执行程序,最后打包文件,让计算机运行。编译器的目的是将便于人写的高级编程语言作为源代码,翻译成计算机能够执行的低级机器语言,也就是可执行文件。其中高级语言有C、C++、Java、Python等,低级语言有汇编语言和机器代码。一个编译器可以按照三段式分为:前段(Fontend)、优化器(Optimizer)、后端(Backend)

GCC(GNU Compiler Collection)是一套有GNU开发的编程语言编译器,以GPL及LGPL许可证所发行的自由软件。GCC原名为GNU C 语言编译器,它原本只能处理C语言,随着技术的发展,GCC很快地得到扩展,变得可以处理C++,之后可以处理的语言扩展到Fortran、Pascal、Objective-C、Java等。

LLVM(Low Level Virtual Machine),即底层虚拟机。它是一个由C++编写而成的编译器基础框架,利用虚拟技术创造出编译时期、链接时期、运行时期以及“闲置时期”的最优化框架。从宏观上来讲,LLVM不仅仅是一个编译器或者虚拟机,它是一个众多编译器工具及低级工具技术的统称,它包含了一个前端、优化器、后端以及众多的函数库和模板。从微观上来讲,可以把它看做后端编译器,用来生成目标代码,前端编译器为Clang。Xcode5版本之前,编译器默认使用的是GCC,从Xcode5之后编译器默认使用LLVM。原因后面马上讲到。

CLang是一个由C++编写的编译器前端,能够编译C/C++/Objective等高级语言,属于LLVM的一部分,发布于BSD(自由软件中使用最广发的许可证之一)许可证下,其目的就是为了超越GCC。经过测试证明,Clang编译Objective-C代码的速度为GCC的3倍左右,同时它还能针对用户发生的编译错误准确地给出建议

Clang和GCC的主要区别如下所示。

  1. Clang比GCC编译用的时间更短,包括预处理、语法分析、解析、语义分析、抽象语法树生成的时间。
  2. Clang比GCC的内存占用更小。
  3. Clang生成的中间产物比GCC更小。
  4. Clang的错误提示比GCC更加友好。
  5. Clang有静态分析,GCC没有。
  6. Clang使用BSD许可证,GCC使用GPL许可证。
  7. Clang从一开始就被设计为一个API,允许它被源代码分析工具和IDE集成。GCC被构建成一个单一的静态编译器,这使得它非常难以被作为API并集成到其他工具中。
  8. GCC比Clang支持更多的语言,例如Java。
  9. GCC比Clang支持更多的平台。
  10. GCC比Clang更流行。

在iOS开发中,经常使用Clang将Objective-C代码转化成C++代码,从而分析代码的底层实现。以main.m文件为例。

clang -rewrite-objc main.m //将Objective-C转为C++

什么事LLVM和Clang?Clang与GCC有什么区别?Clang如何使用?相关推荐

  1. FreeBSD 10 将使用 Clang 编译器替换 GCC

    来自 phoronix 的消息称,根据 FreeBSD 2012 第一季度的状态报告 显示,来自 LLVM 的 Clang 编译器将成为 FreeBSD 10 的默认 C/C++ 编译器,废弃使用 G ...

  2. 编译器cc、CC、gcc、g++区别

    编译器cc.CC.gcc.g++区别 看C语言经典教材<C程序设计语言>中,Linux下编译C代码用的是cc, 广为人知的C编译器的gcc, 还有CC.g++那么有啥差异呢 一.cc是Un ...

  3. linux gcc延时怎么写,Clang / GCC是否真的支持延迟加载功能?

    如果您 确实经历过 与上述标题相关的事情,您是否愿意对此发表评论?我试图使共享对象在Ubuntu上同时被Clang和GCC延迟加载(我实际上不介意使用哪个编译器),但是它们看起来并没有真正支持任何延迟 ...

  4. Linxu终端gcc与gcc -c的区别

    gcc的更多用法详见下链接:      GCC 参数详解 | 菜鸟教程gcc 与 g++ 分别是 gnu 的 c & c++ 编译器 gcc/g++ 在执行编译工作的时候,总共需要4步: 1. ...

  5. gcc和arm-linux-gcc区别

    安装arm-linux-gcc的时候,查了不少资料,总算环境搭好了.于是,想写个程序员的经典程序---hello world. 语法都没错,生成test.c. 命令行运行:arm-linux-gcc ...

  6. VC编译器与GCC编译器的区别

    首先,所谓语法区别是针对程序设计语言而言的,这里首先你要分清楚它们之间的区别. Gcc:它是一款开源的C语言编译器,原来只能在Linux系统上使用,后来移植到了Windows操作系统上,以此为基础的编 ...

  7. WebRtc GCC、Sendside-BWE 区别

    一.概念说明 由于webrtc里面包含GCC.Sendside-BWE两种拥塞控制算法.M55之前用的是GCC,M55之后用的是Sendside-BWE.里面有很多概念梳理如下,以免混淆,不方便理解代 ...

  8. 编译器GCC与Clang的异同

    GCC:GNU(Gnu's Not Unix)编译器套装(GNU Compiler Collection,GCC),指一套编程语言编译器,以GPL及LGPL许可证所发行的自由软件,也是GNU项目的关键 ...

  9. How to use Clang Static Analyzer

    Introduction Clang 宏观上讲,Clang是一个项目名称.微观上,类似于GCC,Clang是一个C语言.C++.Objective C语言的轻量级编译器,它是Clang项目的一部分. ...

最新文章

  1. Python使用问题汇总
  2. 【python教程入门学习】Python实现自动玩贪吃蛇程序
  3. php date 转换 string_php将时间差转换为字符串提示
  4. 国产光刻机正式宣布:今年出货150台
  5. java int byte数组_Java 中int与byte数组转换详解
  6. 每日程序C语言2-判断某日期是这一年的第几天
  7. (12)Verilog HDL变量:reg型
  8. python匹配字符串_字符串匹配算法之Kmp算法(Python实现)
  9. CF125E MST Company
  10. Maven 清理 .lastUpdated 文件
  11. 旋风解析磁力php,2018年免费引擎和正版旋风四核引擎棋力测试分析
  12. java ic卡读写_使用Java驱动ACR122U对IC卡进行读写,总结
  13. * Redis —— Scan、SScan、HScan、ZScan
  14. 新浪微博广告投放展现形式、展现位置!微博推广广告有效果吗?
  15. Gateway过滤器详解
  16. 外卖和快递行业数据_白领市场三分天下,外卖行业将何去何从?
  17. 云计算中的laaS、PaaS和SaaS是什么意思?
  18. LE250UQ激光位移传感器
  19. ubuntu各种实践笔记
  20. ~_~ 搬家啰 ~_~

热门文章

  1. appinventor HTML5,用APP Inventor纯图形化编程自制APP,通过WIFI物联网控制掌控板
  2. 【Python】爬取理想论坛单帖爬虫
  3. [代码审计]Weiphp5.0 前台文件任意读取分析
  4. c语言中文拼音排序,为sqlite增加汉字拼音排序功能
  5. windows服务器系统监控
  6. 工作经验是积累总结出来的
  7. 如何oracle调试存储过程
  8. 蓝牙文件传输服务linux,openwrt蓝牙文件传输
  9. 两端分散对齐怎么设置_Word文档两端对齐分散对齐有哪些设置方法
  10. Google全系列产品不再信任赛门铁克某款根证书-转载