前言
本来学JAVA学着学着听不懂什么叫空指针异常
上网上看感觉还是不够系统,趁着国庆重温C语言的经典C Primer Plus
这本书写的真的很细致,需要慢慢去消化吸收
纸上得来终觉浅,绝知此事要躬行
这句话看了好几遍了,我也写上去,很适合编程方向的学习
好了,开始啃书了
资源在这
一、C语言的起源
C 语言是一种高级语言,最初由 Dennis M. Ritchie [1] 为了开发一个操作系统而设计,最早在 1972 年在 DEC PDP-11 计算机上被首次实现。
二、C语言的应用
C 语言大量应用在需要直接硬件交互的场景。比如最近很多的物联网中的嵌入式设备,底层驱动,高性能计算,游戏后端服务,图形处理等等。
三、C语言的特点
- 代码简洁不繁琐;
- 具有良好的可移植性,代码与机器底层独立(相对于汇编语言而言);
- 属于中层编程语言(底层的为汇编语言等,高层的为 Java 语言等);
- 结构化语言;
- 丰富的程序库可以使用;
- 可以直接管理内存;
- 运行速度快;
- 提供了指针操作;
- 可以使用递归;
- 具有良好的扩展性。
四、编译的过程
着重介绍下编译,其他就是字面意思
编译是把自己编写的源代码转换成可执行的程序,可执行代码是用机器语言表示的代码。这种语言由数字码表示的指令组成。
五、编码机制
1.简述
C编程的基本策略是用程序把源码变成可执行文件来运行~
2.完成机制
C语言通过编译和链接两个步骤来完成这一过程,
编译器把源码转换为中间代码(目标代码文件),连接器把中间代码和库代码、启动代码(程序和OS之间的接口)进行合并,生成可执行文件
C语言通过这样分而治之的方法方便对程序进行模块化,可以独立编译单独的模块,稍后再用链接器合并已编译的模块。通过这种方式,如果只改变某个模块,不必全部重新编译一边,大大提高了效率!
六、在UNIX系统上使用C
一般用gcc编译器来编译
以上a.out就是可执行代码
七、一些OS
1.UNIX系统
UNIX操作系统,当时的电信业巨头AT&T(美国电报电话公司)的贝尔实验室开发的操作系统。 它是一个多用户、多任务操作系统,可以运行在大量不同种类的硬件平台上。
2.Linux
Linux是一个开源、流行、类似于UNIX的OS,Linux实际上只是一个内核,我们可以获得内核的源代码,编译并安装它,然后获得并安装许多其他自由发布的软件,从而完成一个完整的Linux系统的安装。
通常这样安装所得的系统称为Linux系统,系统中大多数的工具都来自于自由软件基金会的GNU项目。自己从源代码创建Linux系统比较麻烦,所以很多人制作了准备好Linux发行版(通常称为flavor),可以通过U盘和CD进行安装,这些发行版不仅包含Linux内核,还会装载一些编程工具和应用程序,一般都会装载一个X视窗系统。
著名的商业Linux发行版 Red Hat Enterprise Linux、Fedora、Novell SuSE Linux 著名的免费的Linux发行版 openSUSE变体、Ubuntu Linux、Slackware、Gentoo、Debian GNU/Linux。
3.GNU项目和自由软件基金会
自由软件基金会(Free Software Foundation) 由Richard Stallman创立,也是Emacs, GCC, GDB的开发者,GNU项目由他发起,这个项目的宗旨是试图创建一个与UNIX系统兼容,并不受UNIX名字和源代码私有权限制的操作系统和开发环境。
GNU项目软件GCC:GNU编译器集,它包括GNU C编译器。 G++:C++编译器,是GCC的一部分。 GDB:源代码级调试器。 GNU make:UNIX make兼容的语法分析程序生成器。 bash:命令解释器(shell) GNU Emacs:文本编辑器及环境。
4.Windows
就是我们常用的OS,在Windows开发需要借助IDE(集成开发环境)
常用的工具是Mirc Visual Stdio Express
个人比较喜欢用的是Vscode
八、复习题和小结
C语言是编译型语言。C编译器和链接器是把C语言源代码转化成可执行代码的程序
1.对编程而言,可移植性意味着什么?
完美的可移植程序是,其源代码无需修改就可以在不同计算机OS上成功编译
2.解释源代码文件、目标代码文件和可执行文件有什么区别?
源代码文件包含程序员使用任何编程语言编写的代码
目标代码文件是编译后的机器语言代码
可执行文件是经过链接器将目标文件代码和开始文件代码、库文件代码合并成完整的机器语言代码生成的一个可执行程序
3.编程的7个主要步骤是什么?
(1)定义程序目标;(2)设计程序;(3)编写程序;(4)编译程序;(5)运行程序;(6)测试和调试程序:(7)维护和修改程序。
4.编译器的任务是什么?
将源码转换为机器语言代码(也叫目标文件代码)
5.链接器的任务是什么?
链接器将目标文件代码和开始文件代码、库代码合并成完整的机器语言代码生成一个可执行程序