
C语言作为一门古老而受欢迎的编程语言,经历了多个版本的演进和标准化。
一、C语言标准化
C语言的发展历史可以分为多个阶段,每个阶段都对应一个标准。
C语言的标准化是为了保证不同编译器、不同操作系统下的程序能够有一致的行为,同时也方便程序员进行交流和开发。
1、K&R C
K&R C 是 C语言的第一个标准,由 C语言的创始人 Dennis Ritchie 和 Brian Kernighan 于 1978 年在其著作《The C Programming Language》中定义。
K&R C 标准包含了 C语言的基本语法、数据类型、运算符等,但是并不是完整的语言规范,缺少了一些重要的特性,例如函数原型、结构体等。因此,K&R C 标准已经过时,不再被广泛使用。
2、ANSI C
ANSI C 是 C语言的第二个标准,由美国国家标准协会(ANSI)于 1983 年发布。该标准定义了 C语言的全部语法、数据类型、库函数等,是 C语言的第一个完整的规范。ANSI C 标准还引入了一些新特性,例如函数原型、void 类型、const 限定符等。
ANSI C 标准被广泛采用,成为了 C语言的主流标准。
3、C89/C90
C89/C90 是 ISO/IEC 9899 标准,也是 ANSI C 的国际标准版本,于 1989 年发布。该标准与 ANSI C 基本一致,但是对于一些问题进行了更严格的定义,例如字符集、浮点数计算等。
C89/C90 标准成为了 C语言的主流标准,并被广泛应用于各个领域。
4、C99
C99 是 ISO/IEC 9899:1999 标准,于 1999 年发布。C99 标准对 C语言进行了大量的扩展和改进,引入了很多新特性,例如布尔类型、复数类型、变长数组、标准宏等。C99 标准还修正了一些 C89/C90 标准中的错误和不足之处,使得 C语言更加完善和健壮。C99 标准在学术界和一些特定领域得到了广泛的应用,但在工业界的普及程度相对较低。
5、C11
C11 是 ISO/IEC 9899:2011 标准,于 2011 年发布。C11 标准在 C99 基础上进行了进一步的扩展和改进,包括了一些新特性,例如泛型宏、多线程支持、_Static_assert 等。C11 标准对于一些早期 C标准中存在的问题进行了修正,使得 C语言更加健壮和安全。C11 标准在工业界的普及程度相对较低,但已经被一些编译器支持。
6、C17
C17是ISO/IEC 9899:2018标准,于2018年发布。C17标准在C11基础上进行了一些小的修订和更新,主要是对标准库进行了一些改进和扩展。C17标准对于C语言本身特性并没有做出太大的改变,主要是对于一些库函数进行了更新和扩展。C17标准目前还比较新,尚未得到广泛的应用。
7、C20
C20 标准于 2019 年发布C20 引入了一些新特性,包括一些来自 C11 和 C17 标准的改进,以及一些全新的功能。例如,C20 引入了对 Unicode 字符串和标识符的支持、新的数学函数、对泛型编程的支持等。C20 标准为 C 语言带来了一些新的功能和改进,使得 C 语言能够更好地满足现代编程的需求。但是尚未得到广泛的应用。
二、C语言编译器
C语言代码由固定的词汇按照固定的格式组织起来,简单直观,程序员容易识别和理解,但是对于CPU,C语言代码就是天书,根本不认识,CPU只认识几百个二进制形式的指令。
这就需要一个工具,将C语言代码转换成CPU能够识别的二进制指令,也就是将代码加工成 .exe 程序;这个工具是一个特殊的软件,叫做编译器(Compiler)。
1、GNU Compiler Collection (GCC):
· 特点:开源、跨平台、功能强大。
· 支持平台:几乎所有主流操作系统和架构。
· 优点:优化性能、广泛支持C语言标准、支持多种语言(如C、C++、Fortran等)。
· 缺点:有时可能产生较大的可执行文件。
2、Clang:
· 特点:由LLVM项目开发,开源、跨平台。
· 支持平台:几乎所有主流操作系统和架构。
· 优点:快速编译、良好的错误信息提示、模块化设计。
· 缺点:某些特定情况下可能不如GCC的优化。
3、Microsoft Visual C++ (MSVC):
· 特点:由微软开发,用于Windows平台。
· 支持平台:Windows。
· 优点:与Windows平台紧密集成、良好的集成开发环境(如Visual Studio)。
· 缺点:对于跨平台开发支持相对较弱。
· 我们使用的VS2022就是集成了MSVC编译器。
4、Intel C Compiler (ICC):
· 特点:由英特尔开发,专注于英特尔处理器架构的优化。
· 支持平台:主要用于x86架构。
· 优点:针对英特尔处理器提供最佳的优化。
· 缺点:不如GCC和Clang流行,对于非英特尔平台支持有限。
5、TinyCC (TCC):
· 特点:轻量级、快速、适用于嵌入式系统和特定需求。
· 支持平台:多平台支持。
· 优点:速度快、适合嵌入式系统和特定领域。
· 缺点:对C标准的支持可能不如其他编译器完备。
6、Pelles C:
· 特点:用于Windows平台的免费C编译器。
· 支持平台:Windows。
· 优点:轻量级、易于使用、适合学习和小型项目。
· 缺点:可能不适用于大型项目或需要高性能优化的场景。
7、Digital Mars C/C++ (DMC):
· 特点:免费、用于Windows平台。
· 支持平台:Windows。
· 优点:简单易用、速度快。
· 缺点:更新较慢,对于最新C语言标准的支持可能不及其他编译器。
8、Open Watcom C/C++:
· 特点:免费、跨平台。
· 支持平台:Windows、Linux等。
· 优点:支持DOS和Windows平台、适合于嵌入式系统和旧式系统。
· 缺点:对于最新的C语言标准支持可能不够完备。
理论上,如果编译器都严格遵循C语言标准并正确实现了标准规范,那么不同编译器编译出的相同C语言代码应该产生相同的程序运行效果。
在实际情况下,不同的编译器可能存在以下情况,导致编译出的程序运行效果有所不同。这是由于:编译器实现的差异;编译器优化级别不同;平台相关性;编译器扩展和特性。
【本节习题】
1、在以下列出的C语言编译器中,哪一个Microsoft Visual C++ 中的默认编译器?
(A) GCC
(B)Clang
(C)MSVC
(D)TinyCC (TCC)
· 参考答案:C
· 题目解析:GCC更广泛用于Linux操作系统,Clang更广泛用于ios操作系统。

246

被折叠的 条评论
为什么被折叠?



