在上一节“C语言编译与链接”中,我们已经解释了C语言编译器的概念。 由于C语言历史悠久,早期没有规范,整个计算机行业也处于开拓时代,所以出现了很多编译器。 C语言编译器有多种,它们各有特点,适用于不同的平台。 本节就给大家科普一下。

我们分两部分介绍C语言编译器,即桌面操作系统和嵌入式操作系统。 桌面操作系统目前主流的桌面操作系统可以使用C++、GCC和LLVM Clang三种编译器。

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

现在许多版本的Linux默认使用GCC作为C语言编译器,而Linux和macOS等系统默认使用LLVM Clang编译器。 由于目前的LLVM项目主要是在Apple的推动下开发的,因此在macOS中,Clang编译器也被称为Apple LLVM编译器。

MSVC编译器主要用于操作系统平台下的应用程序开发,并不是开源的。 用户可以使用该版本免费使用它,但是如果他们想要将该工具生成的应用程序商业化,那么他们就必须仔细阅读微软的许可证和说明。

然而,使用GCC和Clang编译器构建的应用程序一般没有限制,程序员可以随意发布和商业化应用程序。

MSVC编译器对C99标准的支持非常有限,直到2023年发布才提供对C11和C17标准的部分支持。幸运的是,2023年增加了对Clang编译器的支持,官方称之为-Clang with,并且当前版本基于 Clang 3.8。 C语言从诞生到现在,已经更新迭代了多个版本,比如C99、C11、C17等,关于这些版本以及它们之间的区别,我会在《三套》一文中详细介绍C 语言标准:C89、C99 和 C11”。 也就是说,集成开发环境中应用的Clang编译器的前端可以支持Clang编译器的所有语法特性,而后端生成的代码与MSVC具有相同的效果,包括长度64位编译模式下的长整数类型仍然是4个字节,所以使用时需要注意。

为了描述方便,本教程后面将集成开发环境中涉及的Clang编译器称为VS-Clang编译器。 嵌入式系统就嵌入式系统而言,可用的C语言编译器非常丰富,例如:

通常,用于嵌入式系统开发的编译工具链没有免费版本,一般需要通过国内代理商购买。 因此,这对于个人开发者或者嵌入式系统爱好者来说并不是一个低门槛。

不过,开发包可以免费下载和使用,连接和调试开发板也非常简单。 使用的C编译器是基于GCC的。

还有像 Pi(Pi)这样的迷你计算机可以直接使用GCC和Clang编译器。 另外还有像该公司这样的TK系列开发板可以直接使用GCC和Clang编译器。 Pi 和 TK 均默认安装 Linux 操作系统。

在嵌入式领域,8位MCU等低端MCU对应的C编译器可能只支持C90标准,有的甚至不支持C90标准的很多特性。 因为一方面,它们的内存和ROM容量较小;另一方面,它们的内存和ROM容量较小。 另一方面,处理器本身的功能非常有限,有的甚至不能支持函数指针,因为处理器本身不包含通过寄存器进行间接过程调用的指令。

像32位处理器或者DSP一样,一般都至少支持C99标准,性能也非常强大。 而且像ARM这样的RVDS编译器甚至可以用GNU语法进行扩展。

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

C语言编译器的分类

好了,今天的主题就讲到这里吧,不管如何,能帮到你我就很开心了,如果您觉得这篇文章写得不错,欢迎点赞和分享给身边的朋友。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注