内容来自 C 语言中文网,个人觉得无聊,想练练打字来加深学习印象。(本次转载仅供学习,感谢原创!如有侵权请私信本人删除!)

文章目录

  • 前言
  • 一、桌面操作系统
  • 二、嵌入式系统

前言

在上节《C 语言编译和链接》中我们已经讲解了 C 语言编译器的概念,由于 C 语言的历史比较久,而且早期没有规范,整个计算机产业也都处于拓荒的年代,所以就涌现了很多款 C 语言编译器,它们各有特点,适用于不同的平台,本节就来给大家科普一下。

我们分两部分介绍 C 语言的编译器,分别是桌面操作系统和嵌入式操作系统。


一、桌面操作系统

对于当前主流桌面操作系统而言,可使用 Visual C++、GCC以及 LLVM Clang 这三大编译器。

Visual C++ (简称 MSVC)是由微软开发的,只能用于 Windows 操作系统;GCC 和 LLVM Clang 除了可用于 Windows 操作系统之外,主要用于 Unix/Linux 操作系统。

像现在很多版本的 Linux 都默认使用 GCC 作为 C 语言编译器,而像 FreeBSD、macOS 等系统默认默使用 LLVM Clang 编译器。由于当前 LLVM 项目主要在 Apple 的主推下发展的,所以在 macOS 中,Clang 编译器又被称为 Apple LLVM 编译器。

MSVC 编译器主要用于 Windows 操作系统平台下的应用程序开发,它不开源。用户可以使用 Visaul Studo Community 版本来免使用它,但是如果要把通过 Visual Studio Community 工具生成出来的应用进行商用,那么就得好好阅读一下微软的许可证和说明书了。而使用 GCC 与 Clang 编译器构建出来的应用一般没有任何限制,程序员可以将应用程序随意发布和进行商用。

MSVC 编译器对 C99 标准的支持就十分有限,加之它压根不支持任何 C11 标准,所以本教程中设计 C11 代码例子不会针对 MSVC 进行描述。所幸的是,Visual Studio Community 2017 加入了对 Clang 编译器的支持,官方称之为——Clang with Microsoft CodeGan,当前版本基于的是 Clang 3.8。

也就是说,应用于 Visual Studio 集成开发环境中的 Clang 编译器前端可支持 Clang 编译器的所有语法特性,而后端生成的代码与 MSVC 效果一样,包括像 long 整数类型在 64 位编译模式下长度仍然为 4 个字节,所以各位使用的时候也需要注意。

为了方便描述,本教程后面涉及 Visual Studio 集成开发环境下的 Clang 编译器简称为 VS-Clang 编译器。


二、嵌入式系统

而在嵌入式系统方面,可用的 C 语言编译器就非常丰富了,比如:

  • 用于 Keil 公司 51 系列单片机的 Keil C51 编译器;
  • 当前大红大紫的 Arduino 板搭载的开发套件,可用针对 AVR 微控制器的 AVR GCC 编译器;
  • ARM 自己出的 ADS (ARM Development Suite)、RVDS(RealView Development Suite)和当前最新的 DS-5 Studio;
  • DSP 设计商 TI (Texas Instruments)的 CCS(Code Composer Studio);
  • DSP设计商 ADI (Analog Devices, Inc.)的 Visual DSP++ 编译器,等等。

通常,用于嵌入式系统开发的编译工具链都没有免费版本,而且一般需要通过国内代理进行购买。所以,这对于个人开发者或嵌入式系统爱好者而言是一道不低的门槛。不过 Arduio 的开发套件是可以免费下载使用的,并且用它开发连接调试也十分简单。Arduino 所采用的 C 编译器是 基于 GCC 的。还有像树莓派(Raspberry Pi)这种迷你电脑可以直接使用 GCC 和 Clang 编译器。此外,还有像 nVidia 公司推出的 Jetson Tk 系列开发板也可直接使用 GCC 和 Clang 编译器。树莓派与 Jetson Tk 都默认安装了 Linux 操作系统。

在嵌入式领域,一般比较低端的单片机,比如 8 位的 MCU 所对应的 C 编译器可能只支持 C90 标准, 有些甚至连 C90 标准的很多特性都不支持。因为它们一方面内存小,ROM 的容量也小;另一方面,本身处理器机能就十分有限,有些甚至无法支持函数指针,因为处理器本身不包含通过寄存器做间接过程调用的指令。而像 32 位处理器或 DSP,一般都至少能支持 C99 标准,它们本身的性能也十分强大。而像 ARM 出的 RVDS 编译器甚至可用 GNU 语法扩展。

下图展示了上述 C 语言编译器的分类。


主流 C 语言编译器有哪些?相关推荐

  1. 《C语言编程魔法书:基于C11标准》——1.3 主流C语言编译器介绍

    本节书摘来自华章计算机<C语言编程魔法书:基于C11标准>一书中的第1章,第1.3节,作者: 陈轶 更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1.3 主流 ...

  2. 如何选择学习主流程序语言(一)

    上篇 为了帮助一些编程初学者,和有兴趣学习其它编程语言的朋友,互联力量IT职业技能培训网给你描述,目前在国内常见的编程语言和技术,这些语言有哪些特性?哪种语言更适合你?如何学习这些语言?你从本文中获得 ...

  3. C语言编译器(C语言编程软件)

    桌面操作系统 对于当前主流桌面操作系统而言,可使用 Visual C++.GCC 以及 LLVM Clang 这三大编译器. Visual C++(简称 MSVC)是由微软开发的,只能用于 Windo ...

  4. c语言编译器运行窗口,Gcc编译器下载C语言编译器窗口(带有安装教程)v1

    gcc编译器是由自由软件基金会开发和启动的GNU编译器套件. 该软件具有在多个平台上的兼容性经验,不仅支持在Windows平台下编译主流编程语言,而且还可以在Linux系统下实现很好的软件应用程序编程 ...

  5. keil c语言编译运行,Keil的c语言编译器

    我曾经通过查看反汇编代码对KEILC编译器进行了测试,大概有这么一下内容,也得出一些结论. (1)全局变量:如果程序中定义了全局变量,而且初始值不是0.此时,在程序调到main()函数执行前,除了要进 ...

  6. 单片机c语言编译软件6,eUIDE下载-单片机c语言编译器 v1.07.32.23 官方版 - 安下载...

    eUIDE是一款专业的单片机c语言编译器,EM78系列集成开发环境是面向项目的ELAN EM78系列微控制器的开发工具,它包括UICE开发在线仿真器和eUIDE软件工具:eUIDE是基于PC端的UIC ...

  7. 毕业设计 c语言编译器的设计开发-字节代码格式设计与实现 开题报告,C语言编译器设计与实现...

    C语言编译器设计与实现(任务书,外文翻译,毕业论文20000字,答辩PPT) 摘 要 随着计算机的广泛应用,计算机程序设计语言也从初期的机器语言发展为汇编语言,以及现在的各种高级程序设计语言.而编译技 ...

  8. 最严谨的计算机语言p,用于PLC的华P语言编译器设计及实现.pdf

    2009年10月 沈阳理工大学学报 V01.28No.5 OFSHENYANGUGONGUNIVERSITYOct.2 第28卷第5期 TRANSACTIONS 0 09 文章编号:1003-1251 ...

  9. 在Windows平台如何选择C语言编译器?

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/104995539 选 ...

最新文章

  1. python opencv按照一定间隔保存视频帧
  2. 腾讯AI×王者荣耀「绝悟」项目首亮相:KPL秋季决赛击败顶尖战队
  3. 如何将usb摄像头连接到虚拟机vmware ubuntu系统上?
  4. Leaflet中加载离线OSM瓦片地图(使用OfflineMapMaker切割下载离线png地图文件)
  5. 华为云视频Cloud Native架构设计与工程实践
  6. C语言学习:malloc()函数
  7. Goland安装-工欲善其事必先利其器
  8. c语言朋友,[原创]写给初学 c语言的朋友
  9. JS 判断一个字符串是否包含在一个数组中
  10. Android颜色选择器库
  11. 奇怪的315:大家都知道,为什么要等晚会曝光,管理部门呢
  12. 010,spring boot 文件上传
  13. Windows程序设计的第一个实例
  14. 推荐十大国外IT网站
  15. MYSQL基础学习了解
  16. 获取非行间样式和行间样式 Math对象
  17. 通常所说的微型计算机主机主要包括,通常所说的微型计算机的主机主要包括( )。...
  18. 实习总结第七谈-----------vue中element-ui的表格行高怎么控制
  19. Windows Mobile动手实验集锦
  20. 如何让大中药丸子便于下咽, 2021年3月11日 更新 同样适用于中药粉

热门文章

  1. Windows下的自动定时执行方法 - 定时执行专家
  2. SCJP (SUN认证Java程序员)
  3. 【AI绘画】美到我的心巴上
  4. 说说超链接target属性的取值和作用?
  5. php artisan migrate,laravel 5.1下php artisan migrate的使用注意事项总结
  6. 牛客网 2018年全国多校算法寒假训练营练习比赛(第四场) 题解
  7. html写流星雨(完整代码)
  8. Linux怎么关闭135端口,window2003关闭135,3389端口
  9. Android仿QQ空间底部菜单
  10. Chrome 开启 Notifications 通知