C语言历险记
计算机语言的发展史
计算机的每一个操作都是根据人们事先指定的指令进行的.
计算机程序:一组计算机能识别的和执行的指令.
人与人交流要使用语言,人与计算机之间交流当然也需要语言,这就是计算机语言.
计算机语言在发展过程中,产生了多种语言.
计算机语言的发展过程.png起初是 机器语言,即二进制 0 1 ,从根本上来说计算机只能识别由0 1 组成的指令. 但是机器语言 难写 难记 难修改 当然也难于推广.
为克服以上的缺点,人们创造出符号语言(symbolic language),其使用一些英文和数字表示一个指令.例如 ADD 表示 加, SUB 表示 减,ADD A,B ( 用c语言表示 就是 a = a + b),显然计算机不能直接识别和执行符号语言的指令.需要用一种称为汇编程序的软件,把符号语言指令转换为 机器指令.这个转换的过程称为汇编,因此符号语言又称为符号汇编语言或者汇编语言.其缺点:虽然比机器语言简单好记一些,但是仍然难以推广普及.且不同型号的计算机的机器语言和汇编语言是互不通用的.由于其比较贴近计算机,称为计算机低级语言.按现在的说法是 其比较贴近底层. 低级语言的一个语句 对应 一条机器指令.
为了克服低级语言的缺点,地球人创造了高级语言,目的是易推广,可维护,可移植性好,夸平台.** 高级语言的一个语句 对应 多条机器指令**
20世纪50年代 第一个计算机高级语言 FORTRAN 诞生,到目前 已经涌现了2500种以上的高级语言.
高级语言经历了不同的发展阶段:
- (1)非结构化的语言. 初期的语言属于非结构化的语言,编程风格都随意,只要符号语法规则即可,没有严格的规范要求,程序中的流程可以随意跳转.这样 写出来的程序难以阅读和维护.早期的 BASIC FORTRAN 等都属于非结构化语言
- (2)结构化语言.为了解决以上的问题,提出了”结构化程序设计方法”,规定程序必须由具有良好特性的基本结构(顺序结构 分支结构 循环结构)构成,程序中的流程不允许随意跳转,程序总是由上而下顺序执行各个基本结构.这种程序语言结构清晰 易于编写 阅读和维护. 常见的有 QBASIC , C
- (3)面向对象语言.以上两种类型的语言 都是基于过程的语言,编写时需要具体制定每一个过程的细节,在编写规模较小的程序时,还能得心应手,但是在编写大型程序时就不够用了,这个时候人么提出了面向对象的程序设计方法.对象是由数据和对数据进行的操作组成的. 常见的有 c++, c# ,Visual Basic , Java,OC,Swift.
C语言的牛逼之处:
C语言是一种用途广泛 功能强大 使用灵活的过程性编程语言,即可用于编写系统软件,也可编写应用软件.其主要特点:
- 语言简洁 紧凑 使用方便 灵活,37个关键字 9种控制语句,主要用小写字母表示
- 运算符丰富
- 数据类型丰富 整型 浮点型 字符型 数组类型 指针类型 结构体类型 共用体类型 复数浮点类型 超长整型 布尔类型
- 具有结构化的控制语句
- 语法限制不太严格 ,程序设计自由度大
- C语言允许直接访问物理地址,能进行位操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作.因此C语言既有高级语言的功能又有低级语言的许多功能,可以编写系统软件.
- 用C语言编写的程序可移植性好
- 生成目标代码质量高,程序执行效率高.
一个C语言程序的结构有以下特点
- 一个程序由一个或多个源程序文件组成.即源程序文件 即是 .c文件,跟OC中的.h .m 文件一样.
- 源程序文件中,即.c文件中,包括3个部分,1 预处理命令 2 全局声明 3函数定义,一个源程序文件就是一个程序模块.
- 函数是C程序的主要组成部分,是其基本单位.
- 程序总是从main函数开始执行,而不论main函数在整个程序中的位置如何.
- 在每个数据的声明和语句后面都要有" ; ".
- C语言本身不提供输入输出语句.输入输出的操作是由库函数scanf printf等函数来完成.
- 程序应当包含注释.
C程序运行的步骤和方法
C语言编写的源程序,计算机不能直接识别和执行高级语言写的指令.必须用编译器把C源程序翻译成二进制形式的目标程序,然后再讲该目标程序和系统的函数库以及其他目标程序链接起来,形成可执行的目标程序.
- 1上机输入和编辑源程序,然后保存为.c后缀的文件
- 2 对源程序进行编译,先用C编译系统提供的 "预处理器"对程序中的预处理指令进行编译预处理.例如 #include<stdio.h>,就是将stdio.h头文件的内容读进来,由预处理得到的信息与程序其他部分一起,组成一个完整的,可以用来进行正式编译的源程序,然后由编译系统对源程序进行编译.
- 3 进行连接处理:经过编译得到的二进制目标文件(后缀为.obj)还不能提供给计算机直接执行.因为一个程序可能包含多个源程序文件,而编译是以源程序文件为对象的,一次编译只能得到与一个源程序文件相对应的目标文件,只是整个程序的一部分.必须把所有的编译后的目标模块连接装配起来,再与函数库相连接成一个整体,最终生成一个可供计算机执行的目标程序,称为 可执行程序,在Visual C++中后缀为.exe
- 4 运行可执行程序,得到运行结果.
小结:1 编译的作用:首先是对源程序进行检查,判定有无语法方面的错误,然后警告,开发人员修改,知道没有错误为止.这时编译程序把源程序转换为二进制形式的目标程序.
2 编译包括 预编译和正式编译2个阶段.