clang 与 GCC 的区别

一、clang 介绍

1.1 概述

          Clang 是一个 C 语言、C++、Objective-C 语言的轻量级编译器。源代码发布于 BSD 协议下。Clang 将支持其普通 lambda 表达式、返回类型的简化处理以及更好的处理 constexpr 关键字。

        Clang 是一个由 Apple 主导编写,基于 LLVM 的 C/C++/Objective-C 编译器

        2013 年 4 月,Clang 已经全面支持 C++11 标准,并开始实现 C++1y 特性(也就是 C++14,这是 C++ 的下一个小更新版本)。Clang 将支持其普通 lambda 表达式、返回类型的简化处理以及更好的处理 constexpr 关键字。

        Clang 是一个 C++ 编写、基于 LLVM、发布于 LLVM BSD 许可证下的 C/C++/Objective-C/Objective-C++ 编译器。它与 GNU C语言规范几乎完全兼容(当然,也有部分不兼容的内容,包括编译命令选项也会有点差异),并在此基础上增加了额外的语法特性,比如 C 函数重载(通过__attribute__((overloadable))来修饰函数),其目标(之一)就是超越 GCC。

BSD :

BSD_百度百科

lambda 表达式:Lambda表达式_百度百科

LLVML: LLVM_百度百科

1.2 特点

1. 终端用户特色:

         快速编译和较少内存占用 ;有诊断功能;兼容 GCC;

2. 实用工具和应用:

        基础架构模块库;可满足多样的客户需求(代码重构,动态分析,代码生成,等);允许集成到各种IDE中;使用LLVM 'BSD' 协议;

3. 内部设计与实现:

        一个不可移植的代码库;一个为C语言、Objective-C、C++、Objective-C++设计的非通用(Non general-purpose)的语法解析器;与C/C++/Objective-C及它们的衍生语言具有高度一致性;

二、gcc 介绍

1.1 概述

        GCC(GNU Compiler Collection,GNU编译器套件)是由 GNU 开发的编程语言译器。GNU 编译器套件包括 C、C++、 Objective-C、 Fortran、Java、Ada 和 Go 语言前端,也包括了这些语言的库(如libstdc++,libgcj 等。)

        GCC 的初衷是为 GNU 操作系统专门编写的一款编译器。GNU 系统是彻底的自由软件。此处,“自由”的含义是它尊重用户的自由。

三、clang 比 gcc 编译器的优势

3. 1 clang 的优势

1. 编译速度更快

2. 编译产出更小

3. 出错提示更友好

         比如 clang 在编译过程可以直接指出相对简单的出错位置以及它 “ 认为 ” 正确的方式 。

4. 内置有静态分析工具,

        可以对代码进行静态分析 (clang—analyze) 。这也是 gcc 做不到的 。

5. 专注

        因为 clang 只需要完成词法和语法分析,代码优化和机器代码的生成工作由 llvm 完成。所以和全部由自己包下的 gcc 比起来, clang 可以更专注地做好一件事。这种结构也使 clang 可以被单独拿出来用在其他的程序里,成为其它 app (主要是 IDE)的内嵌 C/C++ parser 。 对于 IDE 而言,代码补全、重构是重要的功能,然而如果没有底层的支持,只使用 tags 分析或是正则表达式匹配是很难达成的, clang正好充当了这一角色。 这样, editor 工具可以使用和 compiler 一样的 parser 来完成 edit-time 的语法检查 。 而 gcc 就没法很方便地做到这一点 。由于历史原因, GCC 是一个单一的可执行程序编译器,其内部完成了从预处理到最后代码生成的全部过程,中间诸多信息都无法被其他程序重用。

 3.2 Gcc 的优势

1. 一些软件用 clang 编译会出现莫名其妙的错误,但是用 gcc 编译可以通过 。

2. GCC 在 5.0 之前一直都在准备用 C++ 实现模块化,期待 GCC 的 5.0 会有所突破,补上无法模块化的短板。

  • 13
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ClangGCC都是流行的C/C++编译器。它们有一些区别,如下所示: 1. 性能:GCC是一个成熟的编译器,经过多年的发展和优化,因此在某些情况下可能会比Clang更快。然而,Clang在某些特定情况下也能提供相近或更好的性能。 2. 编译速度:Clang通常比GCC更快,尤其是在逐步编译(incremental compilation)方面。这意味着在修改代码后,只需重新编译更改的文件而不是整个项目时,Clang编译速度更快。 3. 错误信息和警告:Clang以其优秀的错误信息和警告而闻名。它提供详细、易于理解和准确的错误和警告信息,对于代码质量的提升和调试非常有帮助。 4. 标准支持:GCCClang都遵循C和C++标准,但是在某些版本中对标准支持的程度可能有所不同。因此,在选择编译器时,应该考虑所需的标准版本以及编译器对该版本的支持。 5. 平台支持:GCC具有广泛的平台支持,可以在多种操作系统和体系结构上使用。Clang也具有良好的跨平台支持,但在某些平台上可能会有一些限制。 6. 插件支持:GCC提供了丰富的插件系统,使得可以扩展和定制编译器的功能。Clang也支持插件,但在某些方面可能不如GCC成熟。 需要注意的是,GCCClang都是优秀的编译器,并且具有自己的优势和适用场景。选择使用哪个编译器取决于个人偏好、项目需求和特定应用程序的要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值