由于C语言的历史比较久,而且早期没有规范,整个计算机产业也都处于拓荒的年代,所以就涌现了很多款C语言编译器,它们各有特点,适用于不同的平台,主要分为两大类:桌面操作系统和嵌入式操作系统。
1)桌面操作系统
对于当前主流桌面操作系统,主要有三大编译器:Visual C++、GCC 、LLVM Clang 。
(1)Visual C++(简称 MSVC)是由微软开发的,只能用于 Windows 操作系统;
(2)GCC 可用于 Windows 操作系、 Unix/Linux 操作系统。
(3)LLVM Clang 可用于Windows操作系、Unix/Linux 操作系统、IOS系统。
2)嵌入式系统
而在嵌入式系统方面,可用的C语言编译器就非常丰富了,比如:
(1)Keil C51 编译器:Keil 公司 51 系列单片机;
(2)Arduino 板搭载的开发套件,可用针对 AVR 微控制器的 AVR GCC 编译器;
(3)ARM 自己出的 ADS(ARM Development Suite)、RVDS(RealView Development Suite)和当前最新的 DS-5 Studio;
(4)DSP 设计商 TI(Texas Instruments)的 CCS(Code Composer Studio);
(5)DSP 设计商 ADI(Analog Devices,Inc.)的 Visual DSP++ 编译器,等等。
通常,用于嵌入式系统开发的编译工具链都没有免费版本,而且一般需要通过国内代理进行购买。所以,这对于个人开发者或者嵌入式系统爱好者而言是一道不低的门槛,不过 Arduino 的开发套件是可免费下载使用的,并且用它做开发板连接调试也十分简单。Arduino 所采用的C编译器是基于 GCC 的。
在嵌入式领域,一般比较低端的单片机,比如 8 位的 MCU 所对应的C编译器可能只支持 C90 标准,有些甚至连 C90 标准的很多特性都不支持。因为它们一方面内存小,ROM 的容量也小;另一方面,本身处理器机能就十分有限,有些甚至无法支持函数指针,因为处理器本身不包含通过寄存器做间接过程调用的指令。而像 32 位处理器或 DSP,一般都至少能支持 C99 标准,它们本身的性能也十分强大。而像 ARM 出的 RVDS 编译器甚至可用 GNU 语法扩展。