C语言的历史

C语言起源于1972年,由Dennis Ritchie在AT&T贝尔实验室开发,起初是为Unix操作系统设计的。从无类型语言BCPL演变而来,C语言经历了早期实现、标准化过程,如ANSI C和ISO C。C语言因其灵活性和效率,成为系统编程和多种后续编程语言(如C++、C#、Objective C)的基础。学习C语言对于理解操作系统、编程概念和提高开发技能至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述:

在学习任何东西之前,非常有必要了解您将要学习的内容的历史。了解 C 语言的历史很有趣。在 1970 年代初期,C 编程语言被开发为新兴 Unix 操作系统的系统实现语言。它从无类型语言 BCPL 演变而来的类型结构;它最初是在一台小型机器上作为改善最小编程环境的工具,现已成为当今使用最广泛的语言之一。在本文中,我们将讨论 C 语言的历史。

C语言简介:

了解C语言的历史很有趣。C 语言是一种通用的、面向过程的编程语言。它是一种结构化的、独立于机器的编程语言。 它由丹尼斯·里奇(Dennis Ritchie)于1972年在AT&T贝尔实验室开发。它与UNIX操作系统一起开发,并与UNIX操作系统紧密相连。C 语言的历史围绕着开发作为编写操作系统的系统实现语言展开。 就C语言的历史而言,它的主要特点包括低级内存访问和高级内存访问(因此它是一种中级编程语言),一组方便的关键字,以及整洁干净的风格,这些功能使C编程语言适合于系统编程。 C 支持各种内置函数、标准库和头文件。它遵循自上而下的方法。 许多语言都直接或间接地从 C 编程语言派生语法。例如,C++ 是 C 语言的超集。 此外,C 编程语言在系统级应用程序中非常流行。

C编程语言的历史:

要了解C语言的历史,让我们首先从它的根源和早期发展开始。 所有现代语言的根源都是ALGOL(算法语言)。ALGOL 是第一个使用块结构的计算机编程语言,它于 1960 年推出。1967 年,Martin Richards 开发了一种名为 BCPL(基本组合编程语言)的语言。BCPL 源自 ALGOL。1970 年,Ken Thompson 使用 BCPL 创建了一种名为 B 的语言。BCPL 和 B 编程语言都是无类型的。之后,1972 年贝尔实验室的 Dennis Ritchie 使用 BCPL 和 B 开发了 C。 因此,就 C 语言的历史而言,它主要用于学术环境,但最终随着许多用于商业用途的 C 编译器的发布和 UNIX 的日益普及,它开始获得专业人士的广泛支持。

早期实现和语言标准:

如前所述,在 C 语言的历史上,C 语言的发展旨在作为创建 UNIX 的基础。根据贝尔实验室的报告,到1973年初,超现代C语言的雏形已经完成。该语言和编译器都足够强大,可以为 PDP-11 用 C 重写 UNIX 内核。 Brian Kernighan 和 Dennis Ritchie 于 1978 年出版了 The C Programming Language,该书作为该语言的参考,直到 C 语言历史上建立了正式的标准。在 1973 年至 1980 年间,该语言略有发展:无符号、长整型、并集和枚举类型被添加到类型结构中,结构实际上成为第一类对象(仅缺少文字的符号)。它的环境以及随之而来的技术发生了重大变化。 1983年夏天,美国国家标准协会(ANSI)在CBEMA的指导下成立了X3J11委员会,目的是建立C标准。1989年底,X3J11发布了其报告[ANSI 89],后来被ISO认可为ISO/IEC 9899-1990。

在C语言之前开发的编程语言列表:

语言发展之年开发者
ALGOL1960International Group
BCPL1967Martin Richards
B1970Ken Thompson
Traditional C1972Dennis Ritchie
K&R C1978Kernighan and Ritchie
ANSI C1989ANSI Committee
ANSI/ISO C1990ISO Committee
C991999Standardization Committee

B语言的问题:

B编程语言在C语言的历史上具有不同的重要性。由于它的缺点使 C 成为一种更强大的语言。BCPL 和 B 语言用于字寻址机器,这些语言中唯一的数据类型“单元”很容易等同于硬件机器字。PDP-11 的引入揭示了 B 语义模型中的各种缺陷。首先,它的角色处理技术是从BCPL继承而来的,几乎没有变化,很麻烦。 其次,通过指定特殊运算符,在 Multics 和 GCOS 编译器中将浮点运算引入 BCPL,但这个过程只能想象,因为相关机器上的单个单词足够大,可以表示浮点整数;在 16 位 PDP-11 上并非如此。 最后,B 和 BCPL 模型在处理指针时隐含了开销:语言规则通过将指针定义为单词数组中的索引,使指针表示为单词索引。为每个指针引用生成从指针到硬件预期的字节地址的运行时小数位数转换。

C语言的标准化:

1983 年,ANSI 成立了 X3J11 委员会,以标准化 C 编程语言。信息技术认可标准委员会 X3 (ASC X3) 负责这项工作,这导致了 ANSI X3.159-1989:编程语言 C 于 14 年 1989 月 1990 日获得批准并于 3 年春季发布。通过一些新的补充,这个原始标准统一了现有的做法。 ANSI X159.1989-9899 文档中规定的标准在当时被称为 ANSI C 语言史上的 C 语言,但是当 ISO/IEC 1990:1 被确立为国际标准时,它很快就被取代,这要归功于 ISO/IEC JTC 89 的努力。虽然这是 ISO C 名称的由来,但国家和国际标准现在分别被称为 C90 和 C9899。自 ISO/IEC 9899 国际标准制定以来,已经进行了多次更新和勘误。当前的 C 编程语言由 ISO/IEC 2018:11 – 信息技术 – 编程语言 – C 定义,这是该标准的第四版。 C2011 是 <> 年版标准建立的 C 语言的非正式术语。虽然标准文本中从未明确引用过这个标题,也没有明确引用 ANSI C 和 ISO C,但它们的偶尔使用强调了标准社区在过去三十年中为统一这种编程语言所做的辛勤工作的重要性。

C 编程语言是如何工作的?

C 程序的执行涉及 5 个步骤。这些是:

  1. 创建程序
  2. 预处理
  3. 编译程序
  4. 将程序与 C 库中的函数链接
  5. 执行程序

  1. 创建程序:首先,我们需要创建一个 C 程序。为此,我们将打开一个文本编辑器并将我们的 C 程序写入其中。然后以 .c 扩展名保存文件。 例如:hello.c 写入文件中的程序称为源代码,它服务于 C 程序的原始形式。

  2. 预处理: 预处理是首次传递源代码的阶段。此阶段包括以下步骤:

  • 宏的扩展和注释删除
  • 扩展包含的文件
  • 条件编译 hello.c 的预处理输出存储在文件 hello.i 中。
  1. 编译程序:一旦我们的源代码在文件 hello.i 中进行了预处理。现在我们的文件已经准备好进行编译了,编译后会生成一个中间编译的输出文件 hello.s,该文件位于汇编级别的指令中。 在编译过程中,编译器会检查所有编译错误。如果在线 C 编译器没有给出错误,则 hello.s 将作为输入,并在下一阶段由汇编程序转换为 hello.o。此文件包含计算机级指令。在此阶段,仅将现有代码转换为机器语言,并且不会解析函数调用。由于对象文件不可执行,因此该过程将传输到链接器,最终生成 .exe 文件。

  2. 程序与 C 库中的函数链接:这是最后一个阶段,在这个阶段中,所有函数调用都链接到它们的定义。链接器知道所有这些函数的实现位置。链接器执行额外的工作,并向我们的程序添加更多代码,这是它启动和停止时所必需的。例如,设置环境需要代码,发送命令行输入也需要代码。链接器将程序文件的目标代码连接到 C 库函数,从而在此处创建一个 .exe 文件,hello.exe,这是一个可执行文件。

  3. 执行程序:程序的执行是一项非常简单的任务。在发出执行特定程序的命令后。加载器将可执行目标代码加载到 RAM 中并执行指令。

C 基本命令:

编写 C 程序需要一些基本命令。但是,在我们进入基本的 C 命令之前,让我们看一下一个简单的 C 程序。

#include <stdio.h>

int main() {
    
    printf("Welcome to the Scaler Topics");
    
    return 0;
}

输出:

Welcome to the Scaler Topics

以下是 C 语言的一些基本命令。

序号C 基本命令名字What it does (Explanation)
1#include预处理器指令用于包含头文件。
2<stdio.h>头文件stdio.h 标头定义了三种变量类型、多个宏以及各种输入和输出函数。
3main()主要功能代码的执行从 main 函数开始。
4{打开大括号它指示函数的开始。
5printf()打印功能用于在屏幕上显示输出。
6;分号标记语句的结尾。
7return 0;返回 0此命令显示函数的退出状态。
8}闭合大括号它指示函数的结束。
编译器支持编译器
Scaler 主题在线 C 编译器GCC 编译器
OnlineGDB 在线 C 编译器GCC 编译器
CodeChef 在线 C 编译器GNU 编译器
教程Point Online C CompilerGNU GCC v7.1.1
Ideone 在线 C 编译器Turbo C 编译器

Clang 编译器:

Clang 是一个“LLVM 原生”的 C/C++/Objective-C 编译器,致力于提供闪电般的编译速度、令人难以置信的信息性错误和警告消息,并为开发优秀的源代码级工具奠定基础。 它是 C 语言系列(C、C++、Objective C/C++、OpenCL、CUDA 和 RenderScript)中语言的 LLVM 项目的语言前端和工具基础结构。有一个与 GCC 兼容的编译器驱动程序 (clang) 以及一个与 MSVC 兼容的编译器驱动程序 (clang-cl.exe)。 Clang Static Analyzer 和 clang-tidy 是可以使用 Clang 前端作为库来解析 C/C++ 代码的工具类型示例。

MinGW 编译器(适用于 Windows 的极简 GNU):

MinGW 的意思是 Windows 的极简主义 GNU:GNU 是开源编程工具的来源。 MinGW,前身为 mingw32,是一个免费的开源软件开发环境,用于创建 Microsoft Windows 应用程序。它是原始 mingw.org 项目的衍生产品,旨在帮助 Windows 用户使用 GCC 编译器。 MinGW 版本也支持 GCC 支持的大多数语言。C,C++,Objective-C,Objective-C++,Fortran和Ada都在其中。使用 GCC 运行时库(用于 C++ 的 libstdc++、用于 Fortran 的 libgfortran 等)。

可移植 C 编译器:

该编译器基于 Stephen C. Johnson 在 1970 年代后期的初始可移植 C 编译器。尽管编译器的大部分内容已被重做,但一些基本原理并没有改变。 PCC 出现在 Unix 版本 7 中,在 System V 和 BSD 4.x 版本中,它取代了 DMR 编译器(Dennis Ritchie 的初始 C 编译器)。 pcc 的便携性和增强的诊断能力是其成功的基础。只有少数编译器的源文件被设计为与计算机相关。它比同时代人更能抵抗语法错误,并执行更严格的有效性检查。 Dennis Ritchie 的初始 C 编译器使用递归下降解析器,包含特定于 PDP-11 的知识,并依赖于可选的特定于机器的优化器来改进它创建的汇编语言代码。另一方面,Johnson 的 pccm 是使用 yacc 生成的解析器和更广泛的目标机器模型构建的。两个编译器都生成了特定于目标的汇编语言代码,这些代码被编译为可链接的对象模块。

Turbo C:

Turbo C 是 C 编程语言的 IDE 和编译器。它于1987年推出。它是​C和C++​的免费开源编译器。它是最受欢迎的 IDE 和编译器,因为它体积小、编译速度快,而且手册全面。1990年2006月,Borland用Turbo C++取代了Turbo C。<> 年,Borland 重新引入了 Turbo 绰号。

C语言的后继者

Concurrent C:

Concurrent C 是一种编程语言。它于 1989 年开发。它是 C 的超集,包括并行编程功能,例如声明和创建进程、同步进程和与进程交互以及终止和中止进程。并发 C 的创建是为了充分利用多处理器和多计算机。并发 C 还与 C++(C 的面向对象的超集)一起使用,作为编译时选项。

Objective C:

Smalltalk 风格的消息传递被添加到 Objective-C 的 C 编程语言中,使其成为一种通用的、面向对象的编程语言。Apple 针对 OS X 和 iOS 操作系统及其相关 API Cocoa 和 Cocoa Touch 的主要编程语言是 Objective-C。 它是具有动态运行时的 C 编程语言的面向对象的超集。C 的语法、基元类型和流控制指令以及用于构造类和函数的语法都继承到 Objective-C 中。它还包括对语言级别的对象图管理和对象文本的支持,以及动态类型和绑定,将许多职责推迟到运行时。

C#:

符号 C# 发音为“C-Sharp”。 它是 Microsoft 开发的面向对象的编程语言,运行在 .NET Framework 上。C#与​C++和Java​等其他流行语言相关,并且起源于C系列。 2002年,发布了第一个版本。最新版本 C# 8 于今年 <> 月发布。 尽管 C# 结构密切遵循经典的高级语言、C 和 C++,并且是一种面向对象的编程语言。它与 Java 有很多共同点,并且具有许多强大的编程功能,使其吸引了世界各地的许多程序员。 以下是C#的几个重要功能列表:

  • 布尔条件
  • 自动垃圾回收
  • 标准库
  • 程序集版本控制
  • 属性和事件
  • 代表和活动管理
  • 易于使用的泛型
  • 索引
  • 条件编译
  • 简单的多线程
  • LINQ 和 Lambda 表达式
  • 与 Windows 集成

C++:

C++ 编程语言是一种面向对象的编程语言。它由贝尔实验室的 Bjarne Stroustrup 于 1980 年创建。C++的思想来自于C增量运算符++,所以可以说C++是C的增量版本,是C的超集。 类、继承、函数重载和运算符重载是C++添加到C的最基本功能。 C++的面向对象功能使我们能够创建大规模的, 清晰、亲切且易于维护的复杂程序。 C++是世界上使用最广泛的编程语言之一。当今的操作系统、图形用户界面和嵌入式系统都包含它。它是一种面向对象的编程语言,为程序提供逻辑框架,并允许重用代码,从而降低开发费用。它是可移植的,可用于创建跨平台兼容的应用程序。

为什么要学习 C?

C 编程语言是一种中级编程语言,这意味着它同时提供高级(用户友好)和低级(机器可理解)功能。因此,它可用于编写应用程序级编程以及操作系统。 它支持预构建库,因此用户可以毫无困难地实现基本操作。C 在嵌入式编程中被广泛使用。关于C最流行的一点是,就执行时间而言,它是一种非常快的编程语言。同样,学习 C 语言还有更多好处。

C语言编程的应用:

  • C 可用于设计浏览器。
  • 如前所述,C 与 UNIX 操作系统密切相关。因此,C 可用于设计操作系统。
  • C语言也可用于开发智能手机游戏。
  • 值得一提的是,C 语言可用于设计数据库。许多数据库都基于 C,如 Oracle、PostgreSQL、MySQL、MS SQL Server。

结论:

  • 我们可以在广泛的编程和开发领域中使用 C 编程语言。
  • C 语言的开发旨在作为创建 UNIX 的基础。
  • 1983 年,ANSI 成立了 X3J11 委员会,以标准化 C 编程语言。
  • C语言的发展为几种现有语言的改进开辟了维度。此外,它成为几种新编程语言的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新华

感谢打赏,我会继续努力原创。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值