C语言的起源

1940年代,最早的开始,编程语言是机器语言,用0/1表示的、计算机能直接识别和执行的一种机器指令的集合。最早的编程方式,就是给纸带打孔或者卡片机打孔。机器语言直接与硬件沟通,极具针对性,但是非常难于理解和编写。

为了解决这个问题,汇编语言被发明了。它使用助记符号来代替机器语言中的二进制代码,使得程序员可以更容易地理解和编写程序。汇编语言经过汇编编译器将其编译为机器码,由计算机执行。汇编语言是机器相关的,即一种汇编语言只能在特定的计算机硬件上运行,这大大限制了其可用性。

1950年代高级语言开始出现。为了探索一种适于国际通用的编程语言,1958年由ACM(美国计算机协会)和GAMM(德国应用数学和力学协会)的代表们在苏黎世会议上提出国际代数语言(International Algebraic Language,IAL) ,后定名为ALGOL 58,即算法语言。1960年5月的巴黎会议上,发表了"算法语言Algol 60报告",确定了程序设计语言Algol 60,并且迅速成为科学和研究计算的主要语言。Algol 60是程序设计语言发展史上的一个里程碑,它标志着程序设计语言成为一门独立的科学学科,并为后来软件自动化及软件可靠性的发展奠定了基础。

1963年英国剑桥大学推出了CPL(Combined Programming Langurage)语言。CPL语言在ALGOL 60 的基础上接近硬件一些,但规模比较大,难以实现。1967年英国剑桥大学的马丁·理查兹(Matin Richards)开发了BCPL,即 “Basic Combined Programming Language”。BCPL 作为一个简洁的编译器写作语言而开发的,它的目的是为操作系统和编译器的开发提供便利,同时保持语言的可移植性。它在编程语言设计中树立了简约和可移植性的原则,对后续程序设计影响较大。

在1969年,Ken Thompson和Dennis Ritchie等人开始在DEC的PDP-7计算机上开发UNIX系统,最初UNIX是用汇编语言编写的。

为了让UNIX可移植到不同的硬件平台上,1970年Ken Thompson将BCPL简化成了新的B语言,并用它来重新编写了UNIX。但B语言存在一些局限,例如对非PDP-11计算机的移植性和效率问题。为了克服这些限制并更好地利用在PDP-11上出现的更复杂数据类型,1972-1973年丹尼斯·里奇(Dennis Ritchie)开始设计C语言。取了BCPL的第二个字母作为这种语言的名字,也算上ALGOL、BCPL、B的一种延续。

他在B语言的基础上增加了数据类型和其他在结构化编程中有用的特性。到1973年,UNIX操作系统的内核及其主要组件都用C语言重写了,这一改动显著提高了UNIX的移植性。

C跟随着UNIX系统的一起传播。1978年,Brian Kernighan 和 Dennis Ritchie 合著了《C程序设计语言》(The C Programming Language),是C语言的权威指南,被称为 K&R C。C语言的第一个官方标准化努力发生在1983年,由美国国家标准协会(ANSI)进行,并于1989年发布了第一个标准ANSI C。之后,国际标准化组织(ISO)也采纳了这个标准,并且还在此后多次更新了C语言的标准。

C语言的特点包括高效、灵活、功能强大和紧凑,它提供了对硬件的紧密控制能力,同时仍然提供足够的抽象以编写可读的程序,这些特性使其成为开发系统软件(如操作系统和编译器)的首选语言。

C语言影响了众多后续的编程语言,比如C++、Objective-C、Java和C#等,是软件开发历史上一个里程碑式的创新。

在2024年最新编程语言统计中,C语言挺立在第二的位置。纵观编程语言的历史,C语言一直排在第一或第二的位置,可见其地位。
在这里插入图片描述
在这里插入图片描述

TIOBE编程语言排行榜: https://www.tiobe.com/tiobe-index/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/671868.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IP地址如何保护网络安全

面对网络攻击时,仅依靠常态化的网络安全防御系统已捉襟见肘,如联合使用IP地址数据可以形成多元化的安全解决方案,全面监控网络活动,发现潜在威胁,制定有针对性的应对措施。 网络攻击追踪 当网站或应用遭受DDoS等网络攻…

基于YOLOv8的暗光低光环境下(ExDark数据集)检测,加入多种优化方式---DCNv4结合SPPF ,助力自动驾驶(一)

💡💡💡本文主要内容:详细介绍了暗光低光数据集检测整个过程,从数据集到训练模型到结果可视化分析,以及如何优化提升检测性能。 💡💡💡加入 DCNv4结合SPPF mAP0.5由原始的0.682提升至…

在 VMware 虚拟机上安装 CentOS系统 完整(全图文)教程

一、前期准备: 1.安装VMware 虚拟机软件(不在讲解,可自行去下载安装)。官网:https://customerconnect.vmware.com/cn/downloads/details?downloadGroupWKST-PLAYER-1750&productId1377&rPId111471 2.下载iso…

【AWS】step-functions服务编排

文章目录 step-functionsState machine typeStandard workflowsExpress workflows design skillsError handlingsaga Transaction processing控制分布式系统中的并发性 收费 作为AWS Serverless无服务器的一个重要一环 使用step-functions方法将 AWS 服务链接在一起 step-funct…

用python编写爬虫,爬取二手车信息+实验报告

题目 报告要求 工程报告链接放在这里 https://download.csdn.net/download/Samature/88805518使用 1.安装jupyter notebook 2.用jupyter notebook打开工程里的ipynb文件,再run all就行 注意事项 可能遇到的bug 暂无,有的话私信我

如何决定K8S Pod的剔除优先级

在Kubernetes(k8s)中,当节点资源面临压力时,如何决定Pod的优先级是一个关键问题。在Kubernetes 1.8版本之后,引入了基于Pod优先级的调度策略,即Pod Priority Preemption。这种策略允许在资源不足的情况下&a…

iOS平台如何实现低延迟RTSP转RTMP推送?

技术背景 好多开发者都知道我们有Windows、Android、Linux平台的RTSP转RTMP推送模块,实际上,iOS平台我们也有,并在2016年就已发布。我们都知道,一个好的RTSP转RTMP推送模块,需要足够稳定的前提下,还要低延…

Unity 接口、抽象类、具体类对象的配合使用案例

文章目录 示例1:接口(Interface)示例2:抽象类(Abstract Class)示例3:结合使用接口与抽象类示例4:多接口实现示例5:抽象类与接口结合 在Unity中使用C#编程时,接…

制作耳机壳的UV树脂耳机壳UV胶和塑料材质有什么不同?

制作耳机壳的UV树脂和塑料材质在以下几个方面存在区别: 硬度与耐磨性:UV树脂具有较高的硬度和耐磨性,能够有效保护耳机内部零件,延长耳机使用寿命。而塑料材质相对较软,容易受到磨损。透明度与光泽度:UV树…

【SpringBoot】application配置(5)

type-aliases-package: com.rabbiter.cm.domaintype-aliases-package: 这个配置用于指定mybatis的别名,别名是一个简化的方式,让你在Mapper xml 文件中引用java类型,而不需要使用使用完整的类名。例如,如果你在 com.rabbiter.cm.d…

pymunk初步:设置重力

文章目录 官方示例可视化 官方示例 pymunk是一款2D物理引擎,在游戏开发中十分有用。安装过程无坑 pip install pymunk下面举出官网的一个案例,来简述pymunk的使用流程 import pymunkspace pymunk.Space() space.gravity 0,-981body pymunk.Body() …

邮件群发系统怎么用呢?专业的邮件群发器?

邮件群发系统哪个比较好?邮件营销系统的效果怎么样? 在现代商业活动中,邮件群发系统已成为企业营销的重要工具。那么,邮件群发系统究竟如何使用呢?接下来,蜂邮EDM将为您详细解析邮件群发系统的使用方法。 …

股市反转数据分析

20240206是一个很好的股市反转数据分析的样本。因为之前的1月份2月前3个交易日也就是2月1日,2月2日和2月5日基本都是大跌。数据记录如下: 指数名称指数代码收盘价 [日期] 20231229 [单位] 元收盘价 [日期] 20240205 [单位] 元区间涨跌幅上证指数000001.…

深度学习图像分类相关概念简析+个人举例3(CNN相关补充,附详细举例代码1)

【1】激活函数(Activation Function):在深度学习(CNN)中,激活函数用于引入非线性性质,帮助模型学习复杂的关系。常见的激活函数有ReLU、Sigmoid和Tanh等。 (1)ReLU激活函…

Godot 游戏引擎个人评价和2024年规划(无代码)

文章目录 前言Godot C# .net core 开发简单评价Godot相关网址可行性 Godot(GDScirpt) Vs CocosGodot VS UnityUnity 的裁员Unity的股票Unity的历史遗留问题:Mono和.net core.net core的开发者,微软 个人的独立游戏Steam平台分成说明独立游戏的选题美术风…

C# CAD交互界面-自定义面板集-添加快捷命令(五)

运行环境 vs2022 c# cad2016 调试成功 一、引用 using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.Windows; using System; using System.Drawing; using System.Windows.Forms; 二、代码说明 [CommandMethod("Cre…

游戏开发-会飞的小鸟(已完结,附源码)

游戏开发-会飞的小鸟(已完结,附源码) 你将学到的课程链接详细介绍 你将学到的 掌握Java编程的基本技能开发出自己的“会飞的小鸟”游戏对面向对象编程有深刻的理解学会运用常见算法和数据结构解决问题能够独立调试和优化自己的代码 课程链接…

python二维数组初始化的一个极其隐蔽的bug(浅拷贝)

初始化一个三行三列的矩阵 m n 3初始化方式1 a [[0 for i in range(m)] for j in range(n)]初始化方式2 b [] row [0 for i in range(0,m)] for i in range(0,n):b.append(row)分别输出两个初始化的结果 for row in a:print(row) for row in b:print(row)当前的输出为…

标准库 STM32+EC11编码器+I2C ssd1306多级菜单例程

标准库 STM32EC11编码器I2C ssd1306多级菜单例程 📌原创项目来源于:https://github.com/AdamLoong/Embedded_Menu_Simple📍相关功能演示观看:https://space.bilibili.com/74495335 单片机多级菜单v1.2 👉本次采用的是原…

springboot162基于SpringBoot的体育馆管理系统的设计与实现

体育馆管理系统 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本体育馆管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕…