标准C语言编译器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jdgdf566/article/details/82347157

CC

转自CC和GCC编译器

  从名字上看,老的unix系统的CC程式叫做C Compiler。但GCC这个名字按GNU的说法叫做Gnu Compiler Collection。因为gcc包含非常多编译器(C, C++, Objective-C, Ada, Fortran,and Java)。所以他们是不相同的,一个是个古老的C编译器,一个是编译器的Gnu的编译器的集合(Gcc里的C编译器比CC强大太多了,所以你没必要用CC)。当你调用gcc时不一定是调用的C/C++编译器,是gcc根据文件扩展名自动识别并调用对应的编译器,具体可查阅$man gcc。

  你是下载不到CC的,原因是:CC来自于昂贵的Unix系统,CC是商业软件,要想用你需要打电话,写订单,而不是打开你的Browser去download。

  linux下的cc是gcc的符号链接。能通过$ls ?l /usr/bin/cc来简单察看.而编译时看到的控制台输出CC则是个指向gcc的变量,该变量是make程式的内建变量,就算你在Makefile中没有CC=,该变量也会存在,并默认指向gcc。cc的符号链接和变量存在的意义在于源码的移植性,能方便的用GCC来编译老的用cc编译的unix软件,甚至连Makefile都不要改。而且也便于linux程式在unix下编译。
  近几年的一个新情况是越来越多的unix用户,据我所知像solaris,bsd用户也不太使用CC了,人们都一定要装一个gcc,用他来编译C/C++程式。原因显而易见,gcc足够强大,健壮。支持估计目前为止只有他支持的ISO c/c++ 新特性。当然你最佳不要使用night版本的gcc。

Winners see the gain; Losers see the pain.

FreeBSD使用的是GNU的GCC。
来自 phoronix 的消息称,根据 FreeBSD 2012 第一季度的状态报告 显示,来自 LLVM 的 Clang 编译器将成为 FreeBSD 10 的默认 C/C++ 编译器,废弃使用 GPL 授权协议的 GCC,而 Clang 的授权协议是 BSD。原文中有这样的说明: There ' s still some work ahead in this area, but the status report mentions, "we ' re on track for a BSD licensed C++ stack in 10.0."FreeBSD想打造一个全BSD许可的系统,因此GPL的GCC用不了。
OpenSUSE 12.1已经全面开始使用LLVM Clang3.0+了~(2012-05-16)。

GCC
C/cpp语言内嵌AT&T汇编,使用GCC/g++编译器,调试器用GDB,Linux上基本都是这样,Linux系统本身也是这样。GCC是开源世界的编译器标准。整个开源代码体系的工具链都是用GCC,用ICC会有很多问题。Linux版本的GCC可以编译AT&T汇编。

ICC
C语言内嵌Intel汇编,使用ICC编译器,Windows第三方商业应用基本都是这样,占有90%以上的市场份额。免费版有一些限制。ICC的bug数量实际上与GCC难分伯仲。ICC编译出的文件在AMD处理器上跑的特别慢,主要是厂商之间的死斗。ICC有Linux版本的,可以编译AT&T汇编。

CLang
OS X上用LLVM(CLang)编译器。在Linux和Windows系统上也有不少人偏好CLang编译器,因为提示比较好。LLVM 是 Low Level Virtual Machine 的简称,这个库提供了与编译器相关的支持,能够进行程序语言的编译期优化、链接优化、在线编译优化、代码生成,简而言之,可以作为多种语言编译器的后台来使用。Clang 是一个 C++ 编写、基于 LLVM、发布于 LLVM BSD 许可证下的 C/C++/Objective C/Objective C++ 编译器,其目标(之一)就是超越 GCC。

《C++ Primer》作者Stanley B.Lippman认为现在最优秀的编译器是Clang/LLVM,Xcode——苹果的编译系统,是市面上最出色的编译系统。
《C++ Primer》作者Stanley B.Lippman谈C++语言和软件产业的发展

Clang特性:

1.快:通过编译 OS X 上几乎包含了所有 C 头文件的 carbon.h 的测试,包括预处理 (Preprocess),语法 (lex),解析 (parse),语义分析 (Semantic Analysis),抽象语法树生成 (Abstract Syntax Tree) 的时间,Clang 是 Apple GCC 4.0 的 2.5x 快。(2007-7-25)
2.内存占用小:Clang 内存占用是源码的 130%,Apple GCC 则超过 10x。
3.诊断信息可读性强:我不会排版,推荐去网站观看。其中错误的语法不但有源码提示,还会在错误的调用和相关上下文的下方有~~~~~和^的提示,相比之下 GCC 的提示很天书。
4.GCC 兼容性。
5.设计清晰简单,容易理解,易于扩展增强。与代码基础古老的 GCC 相比,学习曲线平缓。
6.基于库的模块化设计,易于 IDE 集成及其他用途的重用。由于历史原因,GCC 是一个单一的可执行程序编译器,其内部完成了从预处理到最后代码生成的全部过程,中间诸多信息都无法被其他程序重用。Clang 将编译过程分成彼此分离的几个阶段,AST 信息可序列化。通过库的支持,程序能够获取到 AST 级别的信息,将大大增强对于代码的操控能力。对于 IDE 而言,代码补全、重构是重要的功能,然而如果没有底层的支持,只使用 tags 分析或是正则表达式匹配是很难达成的。

XCode编译器介绍

Clang已经主流得有点可怕了——对我来说有点像IE6的那种意义上的可怕。
话说现在Clang和LLVM在各大厂商的侵入性还真是高得不行了。
    微软、IBM这样的传统大软件厂,有深厚的编译器研发历史,现在都有尝试把Clang安到自己的编译器框架里当作前端;肯定还有更多这类案例,只是我知道的还不够多。
    Google,内部对C/C++编译器的改进研发,以前主要是基于GCC的,而原本基于GCC做的PGO项目现在已经转移到基于Clang/LLVM来做了;
    Sony的PS4 SDK里的编译器也是基于Clang的,带有自己撸的后端;
    NVIDIA的NVCC也早就从Open64切换到LLVM;
    最神奇的是某个传统大厂,前端还在用EDG的,中端优化器框架却正在抛弃自己原本的那套而在向LLVM移植(没有开源的计划)。这个简直震精了!

FreeBSD粉丝路过,早已全系统Clang了…

Clang对EDG会有冲击吗?

cl
Microsoft VC++带的编译器一般被称为cl(cl.exe)。理论上很多人用,当然GUI部分是要用的。

其它
CLion(收费)。SDCC编译器(单片机)。

总结

ICC升级时,会找CPU的架构师团队开很多天的会议。跑一堆测试软件,搭配研发用的CPU Simulator (这个时候CPU还没流片呢),仔细的分析哪个快了,哪个慢了,为什么。每一代ICC做完后还会召集gcc和微软编译器的团队开会,然后找一些能用的技术给他们。

Intel C++ Compiler(icc)与gcc对比有什么优缺点?

可以看出,几个编译器各有优缺点。CPU特性利用方面ICC比较好;提示友好方面Clang比较好;对Windows兼容方面cl比较放心;GCC适用性比较强,小工程足矣;做驱动程序或嵌入式开发,注意Wind River(风河)公司。
根据工程的不同阶段和不同模块,选择合适的编译器。无论哪个编译器,都要注意优化开关(编译器参数)的打开与否。

猜你喜欢

转载自blog.csdn.net/jdgdf566/article/details/82347157