文章目录
C语言的起源
1972年,贝尔实验室的丹尼斯·里奇(Dennis Ritch)和肯·汤普森(Ken Thompson)在开发UNIX操作系统时设计了C语言,是基于B语言上进行设计。C语言设计的初衷是将其作为程序员使用的一种工具,其目标是成为有用的语言
C语言的优点
设计特性
过去四十年,C语言是最流行的编程语言,融合了计算机科学理论和实践的控制特性。C语言的设计理念让用户能轻松地完成自顶向下的规划、结构化编程和模块化设计
高效性
C语言运行速度很快,具有通常是汇编语言才具有的微调控制能力,可以根据具体情况微调程序以获得最大运行速度或有效地使用内存
汇编语言是为特殊的中央处理单元设计的一系列内部指令,使用助记符来表示:不同的CPU系列使用不同的汇编语言
可移植性
C是可移植的语言,即在一种系统下编写的C程序不改动或极少改动就能在其他系统上运行
强大灵活
C语言功能强大灵活,UNIX操作系统就是用C语言重新编写,还可以编写编译器和解释器
面向程序员
C语言设计的目的就是为了满足程序员的需求,程序员可以利用C语言访问硬件、操作内存的位
C语言标准
C语言发展之初,并没有所谓的C标准。直达1987年,布莱恩·柯林汉(Brian Kernighan)与丹尼斯·里奇(Dennis Ritch)合著的The C Programming Language(C语言程序设计)第一版是公认的C标准,又称为K&R C或经典C,该书附录中的"C语言参考手册"已成为实现C的指导标准
C89/90标准
C89/90也是第一个ANSI/ISO C标准,随着C语言的不断发展,C社区意识到需要一个更全面、更新颖、更严格的标准。在1983年,美国国家标准协会(ANSI)组建了一个委员会(X3J11),开发了一套新标准,并与1989公布。该标准(ANSI C)正式定义了C语言和C标准库。国际标准化组织在1990年采用了这套C标准(ISO C)。ANSI C和ISO C标准完全一致,ANSI/ISO标准的最终版本叫C89(ANSI与1989年批准该标准)或C90(ISO于1990年批准该标准),由于ANSI先公布C标准,所以通常使用ANSI C。
在委员会制定的指导原则时,其中提到了“Keep the spirit C”(保持C的精神):
- 信任程序员
- 不要妨碍程序员做需要做的事
- 保持语言精炼简单
- 只提供一种方法执行一项操作
- 让程序运行更快,即使不能保证其可移植性
C95标准
这是对 C89 的一个修订和扩充,称为“C89 with Amendment 1”或 C95,严格说来并不是一个真正的标准
这次修订增加了可以处理宽字符、实现宽字符和多字节字符的转换的函数集
C99标准
C99是1999年12月1日有ISO制定的C语言标准,C99标准引入了很多新特性
这些特性包括:内联函数、可变长度数组、灵活的数组成员(用于结构体)、复合字面量、指定成员的初始化器、对浮点数的改进、支持不定参数个数的宏定义、增加复数类型和long long int类型
C11标准
2007年,C语言标准委员会重新修订C语言,与2011年正式发布了新版本的C语言标准,称为C11标准
C11里增加了多线程支持、原子操作、字节对齐说明符、Unicode支持以及无名联合体等功能
C17标准
C17也称C18,于2018年6月发布的最新的C语言编程标准,被用来替代C11标准,但是并没有新特性,只是对C11进行补充和修订
C语言程序设计过程
C语言是一门面向过程的通用设计程序语言,C语言程序设计过程可以分为6个步骤:定义设计程序、编写代码、编译、运行程序、测试和调试程序、维护和修改程序
C程序生命周期
C是编译型语言,源程序的每一条C语句都必须被其他程序转化成一系列计算机可识别的低级机器语言指令,然后这些指令按照一种称为可执行目标程序的格式打好包,并以二进制磁盘文件的形式存放起来,目标程序也称为可执行目标文件
在Unix系统上,编译器驱动程序将源文件转换成目标文件
gcc -o target source.c
编译器驱动程序将source.c源文件根据-o可指定生成可执行目标文件target
预处理阶段
预处理器(cpp)根据源文件中以字符#开头的命令,修改原始的C程序。
#include<stdio.h>命令告诉预处理器读取系统头文件stdio.h中的内容,并将内容直接插入程序文本中
这样经过预处理得到另一个C程序source.i,以.i作为文件扩展名
编译阶段
编译器(ccl)将文本文件source.i翻译成文本文件source.s,它包含了一个汇编语言程序
每一条C语句都以一种文本格式描述了一条低级机器语言指令
汇编阶段
汇编器(as)将source.s翻译成机器语言的指令,把这些指令打包成一种叫做可重定位目标程序source.o
source.o文件是一个二进制文件,包含的是指令编码
链接阶段
源程序文件调用了C标准库中的一个输出printf函数,printf函数存在于一个名为printf.o的单独的预编译好的目标文件中。
链接器(ld)负责将源程序文件中所有包含的目标文件进行合并
链接合并结果得到target可执行目标文件,可以被加载到内存中,由系统执行
总结
C语言是一门通用性语言,了解它从诞生到现在的的标准化过程和设计C程序的过程步骤,以及C程序在计算机上运行的生命周期阶段。
赶紧学习起来吧!我是一个正在努力找回自我的人,希望能和一起学习的人成长,有错误的地方请各位大佬帮忙指正,love&peace。