C语言发展史

news2024/11/20 22:42:56

前言

当前,C语言是大学广泛应用的计算机教学语言之一,除了文科类专业,大部分理工科专业都会教授C语言,但是,C语言是谁搞出来的?是怎么编译的?相信很多同学对此并不清楚,今天,我们就简单了解一下C语言的发展史和特点,还有C语言编译的过程。


C语言的发展史

所谓“吃水不忘挖井人”,我们学习C语言,那就需要知道C语言之父是哪位大佬了。那么他是来自美国的丹尼斯.里奇(DennisRitchie),生于1941年,在1972年发明了C语言,2011年10月12日永远离开了我们。他可谓是程序员祖师爷,来自于贝尔实验室,1983年获得图灵奖,除了C语言,我们熟知的Unix系统也是他设计开发的。下图就是丹尼斯里奇的照片。

 

v2-46a7b2ae9faf5dfb87bec27853b02405_1440w.webp

C语言并不是只给一个人使用的,使用者就包括开发者、维护者、管理者和实现者,这么多人一起用,假如你一套他一套,没有统一的标准,这时候就乱成一团了,你写的东西他看不懂,他写的东西你也看不懂。所以,C语言就必须有标准,推动其发展。这些标准就可以看似C语言的发展史了。

1.“K&R”标准

1978年,丹尼斯.里奇和布莱恩.科尔尼汗联合出版了《C程序设计语言》(TheC ProgrammingLanguage)的著作,这本书被C语言开发者称为“K&R”,很多年来被当作C语言的非正式的标准说明,人们称这个版本的C语言为“K&RC”。

1988年丹尼斯里奇和布莱恩科尔尼汗修改此书,出版了《C程序设计语言》第二版,第二版就涵盖了ANSIC语言标准,这个版本也成为了大学C语言的经典教材。书本如下图:

v2-eaa72a6686f261b3c08216b44911661b_1440w.webp

链接:
https://pan.baidu.com/s/12HgGVVGfAMYmzBOAPu6Cqg
提取码:gicr

(附件有该书的pdf版本)

2. “C89”标准

C语言在1972年11月问世,1978年由美国电话电报公司(AT&T)贝尔实验室正式发布。1970到80年代,C语言被广泛应用,从大型主机到小型微机,也衍生了C语言很多不同的版本。为了统一C语言版本,1983年,美国国家标准局(AmericanNational StandardsInstitute,ANSI)开始制定C语言标准,于1989年12月完成,在1990年春发布,这个标准称为“ANSIC”标准,也叫“C89”标准。

3.“C90”标准

后来ANSI把“C89”标准提交到ISO(国际化标准组织),1990年被ISO采纳为国际标准,称为“ISOC”标准。又因为这个版本是1990年发布的,因此也被称为“C90”标准。ANSIC(C89)和ISOC(C90)内容基本相同,主要区别在于格式组织不一样而已。

4.“C99”标准

在“C89”标准确立后,C语言的规范在很长一段时间内都没有大的变动。直到1995年,C程序设计语言工作组对C语言进行了一些修改,称为后来在1999年发布的ISO/IEC9899:1999标准,通常被称为“C99”标准。

5.“C11”标准

2007年,C语言标准委员会又重新开始修订C语言,在2011年正式发布了ISO/IEC9899:2011标准,简称为“C11”标准。

以下为C语言发展图。

v2-cba55734c1962f66e52e8250f91bf1f8_1440w.webp

这么多标准,到底是用哪个呢?“K&R”是非正式标准,而且年代久远,现在基本上是不使用;“C89”和“C90”属于同一个标准,内容一样,只是认证的机构不一样而已,这个标准也一直用到现在。目前的主流应该是“C99”标准,GCC编译器对“C99”标准的支持相当于较好。那GCC是啥呢?GCC(GNUCompiler Collection, GNU编译器集合)是一套由GNU工程开发的支持多种编程语言的编译器。

C语言被人称为结构化语言,那么C语言程序设计就是结构化程序设计,主要观点就是采用自顶向下,逐步细分和模块化的程序设计方法,使用顺序、选择、循环三种基本控制结构来构造程序。

C语言从诞生到现在,已经经历了半个多世纪,依然受到开发者的青睐,并称为广大工程师的入门首选语言,并且在TIOBE编程语言榜上都是前三位置(很多时候都是老大位置)。下图就是TIOBE最新编程语言排行榜,也可以通过下面的网址进行查看:https://www.tiobe.com/tiobe-index/。

v2-18615c534d015db8daa5b361269397f8_1440w.webp


C语言的优点

在这里概括为三个:简洁、灵活、高效。

1.简洁性

C语言一共只有32个关键字和3种基本控制结构,可通过简短的代码实现模块,并对模块加以整合,从而构建出一个庞大而复杂的程序。32个关键字如下图所示,而3种基本控制结构即前面提到的顺序、选择、循环。

v2-2f5021ee28c0f1cac60524b53f4dfefc_1440w.webp

2.灵活性

C语言程序编写形式比较自由,语法限制不太严格,程序设计自由度大。C语言能通过简单的整数类型、实数类型和字符类型,灵活构造出更加复杂的数组、指针、结构体、联合体等复合数据类型,并以此实现链表、队列、栈、树、图等各种数据结构。特别是C语言的精华“指针”,通过指针可以直接寻址到相对应的内存单元,即可对内存的数据进行访问、修改等操作,从而编写出非常灵动、神奇的C语言程序。

3.高效性

程序设计语言可分为机器语言、汇编语言和高级语言,机器语言是使用0和1二进制码编写的语言,由于计算机能直接识别,所以说用机器语言编写的程序效率很高,但是对于我们来说可读性很差,所以后来就产生了汇编代码,提高了程序的可读性。

用C语言编译生产的目标代码执行的效率仅比汇编语言低一些,但是比其他高级语言(C++、java、C#)编写出的程序要高。

我们天天使用的操作系统、数据库、游戏引擎等大多都是使用C语言进行实现的,还有很多经典算法、框架也是使用C语言进行编写的。学好C语言也是为了嵌入式开发打好基础。

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

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

相关文章

【.NET Core】可为null类型详解

【.NET Core】可为null类型详解 文章目录 【.NET Core】可为null类型详解一、概述二、可为空的值类型2.1 声明和赋值2.2 检查可为空值类型2.3 基础类型与可为空的值类型互换2.4 可为空的值类型装箱和取消装箱2.5 如何确定可为空的值类型 三、可为 null 的引用类型 一、概述 nu…

IDC机房服务器搬迁之运行了几年的服务器没关过机,今天关机下架,再上架突然起不来了,怎么快速处理?

环境 戴尔R420 服务器 1U 2台直连存储 4U CentOS 7 问题描述 IDC机房服务器搬迁之运行了几年的服务器没关过机,今天关机下架,再上架突然起不来了,怎么快速处理? 服务器上电开机就出现进入紧急模式 Welcome to emergency mode! After logging in, type “journalctl …

Windows VSCode 使用Python

一、vscode中安装python 二、下载python.exe(即vscode中需要的python解释器) 下载地址:https://www.python.org/downloads/ 三、安装第三方代码规范工具 参考网址:https://www.python.org/downloads/ 工具介绍 flake8 &#xf…

starrocks权限管理-2.3.2版本

1.新用户创建以及授权 1.创建用户(未分配角色) -- 使用明文密码创建用户,允许其从 172.25.20.1 登陆。如果172.25.20.1被%替换就是所有ip都可以访问 CREATE USER bigdata172.25.20.1 IDENTIFIED WITH mysql_native_password BY Zhengda1; 不…

Redis Zset类型

Redis Zset类型 Zset(有序集合)它是集合的一种,不仅可以保存元素,还可以为每个元素关联一个 double 类型的分数(score),Redis 正是通过分数来为集合中的元素进行从小到大的排序。在 Zset 中&am…

力扣LCR 166. 珠宝的最高价值(java 动态规划)

Problem: LCR 166. 珠宝的最高价值 文章目录 解题思路思路解题方法复杂度Code 解题思路 思路 改题目与本站64题实质上是一样的,该题目在64题的基础上将求取最小路径和改成了求取最大路径和。具体实现思路如下: 1.定义一个int类型的二维数组dp大小为给定…

跟着仙凡兄学习编译Telegram vs2022 2024.1.11编译成功

编译Telegram 本人花了两天,问官方作者终于编译成功Telegram 运行环境:win11 vs2022 参见学习视频:【telegram编译成功,编译遇到的各种问题】https://www.bilibili.com/video/BV11c411x7jm?vd_sourcedf2e51268cc7412cc3937cf3df2…

代码随想录第五十五天——判断子序列,不同的子序列

leetcode 392. 判断子序列 题目链接:判断子序列 确定dp数组及下标的含义 dp[i][j]:以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t,相同子序列长度为dp[i][j]确定递推公式 分为两种情况:s[i - 1] 与t[j - 1]相…

CMake入门教程【高级篇】qmake转cmake

😈「CSDN主页」:传送门 😈「Bilibil首页」:传送门 😈「动动你的小手」:点赞👍收藏⭐️评论📝 文章目录 1. 概述2.qmake与cmake的差异3. qmake示例4.qmake转cmake示例5.MOC、UIC和RCC…

k8s的存储卷之静态

存储卷----数据卷 容器内的目录和宿主机的目录进行挂载 容器在系统上的生命周期是短暂的,delete,k8s用控制创建的pod,delete相当于重启,容器的状态也会回复到初始状态 一旦回到初始状态,所有的后天编辑的文件都会消…

【Linux】Linux 系统编程——tree 命令

文章目录 1. 命令概述2. 命令格式3. 常用选项4. 相关描述4.1 tree 命令安装 5. 参考示例5.1 创建树形目录5.2 使用 tree 命令查看树形目录 1. 命令概述 tree 命令用于在命令行界面以树状图形式显示目录及其子目录的内容。这个命令递归地列出所有子目录,并可选择显示…

平时执行很快的SQL语句,为什么会突然卡一下?

InnoDB在处理更新语句的时候,只做了写日志这一个磁盘操作,这个日志叫作redo log(重做日志),在更新内存写完redo log后,就返回给客户端,本次更新成功。 把内存里的数据写入磁盘的过程&#xff0…

SpringBoot中使用SpringEvent业务解耦神器实现监听发布事件同步异步执行任务

场景 SpringBoot中使用单例模式ScheduledExecutorService实现异步多线程任务(若依源码学习): SpringBoot中使用单例模式ScheduledExecutorService实现异步多线程任务(若依源码学习)-CSDN博客 设计模式-观察者模式在Java中的使用示例-环境监测系统: 设…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)HttpResponse的定义和初始化 以及组织 HttpResponse 响应消息

一、HttpResponse的定义 1.定义状态码枚举 // 定义状态码枚举 enum HttpStatusCode {Unknown 0,OK 200,MovedPermanently 301,MovedTemporarily 302,BadRequest 400,NotFound 404 }; 2.HTTP 响应报文格式 这个数据块主要是分为四部分 第一部分是状态行第二部分是响应…

Godot之StringName解析

类描述 在Godot中,StringName是唯一字符串的内置类型。 StringName 是不可变的字符串,用于唯一名称的通用表示(也叫“字符串内嵌”)。值相同的两个 StringName 是同一个对象。进行比较时比普通 String 要快很多。 对于需要 Str…

时光总是催人老 time

文章目录 时光总是催人老 time语法示例更多信息 时光总是催人老 time … note:: 林花谢了春红,太匆匆。无奈朝来寒雨晚来风。 李煜《相见欢林花谢了春红》 Linux time命令的用途,在于测量指定命令消耗的时间。 最常用的在于大概评估一个程序的运行时…

APP流量变现——4项关键指标决定了APP混合变现的收入

APP流量变现的方式有很多种,主要的可以分为IAA(广告)收入、IAP(用户应用内付费)收入、订阅收入、单次买断收入。这里主要围绕当前流行的混合变现模式,即广告收入(IAA)应用内付费&…

vue3+vite开发生产环境区分

.env.development VITE_APP_TITLE本地.env.production VITE_APP_TITLE生产-ts文件中应用 console.log(import.meta.env.VITE_APP_TITLE)在html中应用,需要安装 html 模板插件 pnpm add vite-plugin-html -Dvite.config.ts中 import { createHtmlPlugin } from v…

鸿蒙原生应用再添新丁!万达 入局鸿蒙

鸿蒙原生应用再添新丁!万达 入局鸿蒙 来自 HarmonyOS 微博1月11日消息,#万达酒店及度假村启动鸿蒙原生应用及元服务开发# 作为具有中国特色的国牌服务酒店标杆之一,万达酒店及度假村Wanda 将带来全新的服务和交互方式,一步获取“…

【AI视野·今日Robot 机器人论文速览 第七十三期】Tue, 9 Jan 2024

AI视野今日CS.Robotics 机器人学论文速览 Tue, 9 Jan 2024 Totally 40 papers 👉上期速览✈更多精彩请移步主页 Daily Robotics Papers Digital Twin for Autonomous Surface Vessels for Safe Maritime Navigation Authors Daniel Menges, Andreas Von Brandis, A…