天天看点

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

本节书摘来自华章计算机《c语言编程魔法书:基于c11标准》一书中的第1章,第1.3节,作者 陈轶,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

对于当前主流桌面操作系统而言,可使用visual c++、gcc以及llvm clang这三大编译器。其中,visual c++(简称msvc)只能用于windows操作系统;其余两个,除了可用于windows操作系统之外,主要用于unix/linux操作系统。像现在很多版本的linux都默认使用gcc作为c语言编译器。而像freebsd、macos等系统默认使用llvm clang编译器。由于当前llvm项目主要在apple的主推下发展的,所以在macos中,clang编译器又被称为apple llvm编译器。msvc编译器主要用于windows操作系统平台下的应用程序开发,它不开源。用户可以使用visual studio community版本来免费使用它,但是如果要把通过visual studio community工具生成出来的应用进行商用,那么就得好好阅读一下微软的许可证和说明书了。而使用gcc与clang编译器构建出来的应用一般没有任何限制,程序员可以将应用程序随意发布和进行商用。不过由于msvc编译器对c99标准的支持就十分有限,加之它压根不支持任何c11标准,所以本书的代码例子不会针对msvc进行描述。所幸的是,visual studio community 2017加入了对clang编译器的支持,官方称之为——clang with microsoft codegen,当前版本基于的是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++编译器,等等。通常,用于嵌入式系统开发的编译工具链都没有免费版本,而且一般需要通过国内代理进行购买。所以,这对于个人开发者或者嵌入式系统爱好者而言是一道不低的门槛。不过arduino的开发套件是可免费下载使用的,并且用它做开发板连接调试也十分简单。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语法扩展。

图1-1展示了上述c语言编译器的分类。

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