标题括号中的数字代表完成度与完善度
0.0-1.0 代表完成度,1.1-1.5 代表完善度
0.0 :还没开始写
0.1 :写了一个简介
0.3 :写了一小部分内容
0.5 :写了一半内容
0.9 :还有个别内容没写
1.0 :内容都写完了,但是不一定完善
1.1 :内容比较完善
1.3 :内容很完善
1.5 :内容非常完善,接近完美
目录
一、计算机语言分析
什么是计算机语言?
为什么要有计算机语言?
计算机语言的本质是什么?
计算机语言的组成是什么?
1.1 计算机语言的产生
C与C++ 都是计算机语言,要想把C与C++研究透,就先要搞清楚计算机语言是怎么产生的、计算机语言的本质是什么。很早的时候没有计算机,更没有计算机语言。人们最早想要发明计算机的初衷就是为了就行数学运算,主要是加减乘除运算。当时的想法就是通过机械方法制造的计算机直接就能进行运算,而不需要编程,因为当时也没有意识到需要编程,简单的加减乘除运算也不需要编程,自然也就没有编程这个概念。后来英国科学家巴比奇是第一个意识到计算机是需要编程的,因为他发明的差分机可以进行复杂的数学运算,如多项式运算、三角函数,显然让硬件直接来实现所有这么多复杂多变的数学运算是不现实的。因此只能让计算机硬件实现一些简单的基本的运算,其他的功能都通过编程的方式对这些基本操作进行组合调用来实现,才是比较合理的。后来计算机要实现的功能越来越多,更不可能让硬件来直接实现这些功能了。因此编程的概念就诞生了,软件的概念也跟着诞生了。计算机本身的物质叫做硬件,通过计算机语言编程而生成的程序就叫做软件。软件和计算机语言的关系就好比是文学和语言的关系。计算机语言是我们操作计算机帮我们做事的方法和途径。
1.2 计算机语言的类型
计算机语言可以分为面向机器的语言和面向人类的语言两大类。面向机器的语言是可以直接操纵机器执行的语言,包括机器语言和汇编语言。机器语言是机器可以直接执行的语言,是一堆0和1。汇编语言和机器语言的功能和结构是完全一样的,只不过用的是人类熟悉的文本形式来表达,要想运行的话还是得翻译成机器能识别的0和1才行。面向机器的语言是和机器强相关的,和机器的位宽、寄存器、寻址模式等是紧密耦合的,但是却和人类的思维模式是不融洽的。因此我们需要面向人类的计算机语言,需要符合人类思维模式、屏蔽了各种硬件细节的语言,这样的语言才适合我们人类去编程。因此面向硬件的语言的也叫做低级语言,面向人类的原因也叫做高级语言。由高级语言编写的程序自然是不能直接在机器上执行的,需要编译成机器语言才行,具体请参看《深入理解编译系统》。
1.3 计算机语言的本质
那么计算机语言的本质是什么呢?通过对计算机的功能、计算机的发展史、机器语言、汇编语言、高级语言的研究,我们可以发现计算机语言具体的作用就是做两件事,表达数据和表达操作。其实这也很好理解,我们发明计算机的初衷就是为了对数据进行运算,所以怎么表达数据、怎么进行运算,显然是计算机语言要做的事。虽然后来计算机越来越复杂,能做的事越来越多,但是它的本质还是对各种数据进行处理,这一点是没有变的。我们再回想一下我们学习各种计算机语言的时候,是不是先学习的各种数据类型,这就是怎么表达数据,然后又学习的怎么操作数据以及控制流程,这就是表达操作的。计算机语言的进化史也是一直在围绕着这两点进行进化,如何更好的表达数据,如何更好的表达操作。操作包括两种类型,一种是对数据直接进行运算,一种是流程控制。流程控制本质上还是数据运算,只不过不是具体的数据运算,而是宏观的数据运算,包括选择是否对数据进行运算,对哪些数据进行运算,运算多少次等。
1.4 计算机语言的组成
那么我们再来看一看一门计算机语言的组成部分都有哪些。首先一门计算机语言肯定要有自己的语法规则,规定如何表达数据、如何表达操作。语法规则光写在纸上也不行,还要实现出来,这就是编译器。其次,计算机语言都有自己的标准库,来实现一些最基本的功能。虽然标准库好像不是计算机语言的必要成分,但是没有标准库,一门语言将是难以使用的,每个人都要去实现一下基本功能也是不合适的,所以标准库对于一门语言来说是必需品。那么标准库里面都有哪些内容呢?一般情况下标准库里面会有IO处理、字符串处理、数学库、时间处理、内存分配、多线程与线程同步、基本数据结构、国际化与本地化等内容。当然有的语言这些东西也不一定全有,有的可能还会有一些其他的东西。
下面我们通过画图来看一下计算机语言的组成结构、计算机语言的本质和标准库的组成。
我们了解了计算机语言的本质和组成结构之后,下面就可以具体来学习C语言和C++了,我们先来学习C语言。
二、C语言
C语言是一门非常流行的语言,也是目前很多操作系统内核和很多基础软件所使用的语言。很多人上大学时都学习过C语言,我们先讲一下C程序的整体结构,再按照上面讲的格式来讲一讲C语言。
一个C源文件的内容基本格式是,开头是一些 #include头文件 预处理指令,然后是全局变量定义和函数定义,也可能会有全局变量声明和函数声明。函数里面会有局部变量定义和各种语句,包括判断语句、循环语句、表达语句、函数调用语句等。
2.1 表达数据
C语言中有3种不同范围的数据,全局变量、全局静态变量,局部变量,它们的可见性和生命周期不同,不过它们的定义形式都是相同的。数据根据其复杂性可以分为简单数据和复杂数据。简单数据就是语言直接支持、已经内部定义好了类型的数据。C语言中这样的数据类型有 char、short、int、long、float、double,它们分别是字符、短整数、整数、长整数、单精度浮点数、双精度浮点数。复杂数据类型有指针、数组、结构体、共用体。指针这种数据类型是由两种数据类型共同构成的,所有指针其自身的数据类型都是内存地址,还有一个关联类型是其内存地址所指向的数据的类型。比如,int a = 3; int *p = &a; p是一个指针,它的值是a的内存地址,同时p指向的数据又需要是一个int类型的数据。数组是一种数据类型的向量模式,代表有n个这样的数据,数组名本身是个指针,指向整个数组的首地址。结构体和共用体是一种自定义数据类型,其内部包含的数据完全是程序员自己定义的。结构体和共用体的区别是,结构体中的数据是同时存在的,而共用体里面的数据只能同时存在一个。结构体里面可以放任何数据包括简单数据类型和指针、数组以及结构体和共用体。共用体里面也是可以放任何数据。
2.2 表达操作
操作分为两种类型,数据运算和流程控制,我们先来看数据运算。首先对于整数和浮点数的运算有加减乘除四则运算,还有大小比较运算。对于整数还有取余运算和移位运算,还有按位运算和逻辑运算。对于所有数据都有赋值运算。
对于流程控制,我们有判断语句if else 和 switch case 语句,还有循环语句while 和 for。数据定义和数据运算以及流程控制共同构成一个函数,函数是程序中操作的集合的最小逻辑单元。
三、C++
暂略
3.1 表达数据
3.2 表达操作
四、总结回顾
通过对计算机语言的分析,我们明白了计算机语言产生的原因,知道了计算机语言的分类,懂得了计算机语言的本质和组成结构。在此基础上,我们就能更好的学习和分析C语言和C++语言。
推荐网站:
https://en.cppreference.com
此网站可作为C语言和C++语言的标准查询网站,里面详细解释了语言的每一个细节。
参考文献:
C:
《The C Programming Language》
《The standard C library》
《C Language Reference Manual》
《C Primer Plus》
《C in a Nutshell》
《Modern C》
《Extreme C》
《Pointers in C》
《Pointers on C》
《Expert C Programming》
《C Interfaces and Implementations》
http://akaedu.github.io/book/
C++:
《The C++ Programming Language》
《The C++ Standard Library》
《Programming Principles and Practice Using C++》
《The GNU C++ Library Manual》
《C++ Primer》
《C++ Primer Plus》
《C++ 17 - The Complete Guide》
《Effective C++》
《More Effective C++》
《Effective Modern C++》
《Effective STL》
《Exceptional C++》
《Exceptional C++ Style》
《More Exceptional C++》
《C++ Coding Standards》
《C++ Templates The Complete Guide》
《C++ Template Metaprogramming》
《Functional Programming in C++》
《C++ Concurrency in Action》
《Inside the C++ Object Model》
《Essential C++》
《Modern C++ Design》
《Ruminations On C++ 》
《The Design and Evolution of C++ 》