断断续续的学习了很多东西,有51、Avr、ARM、PLC、C\C++、C#、TB、MC、mql4、linux....等等,近乎填鸭或者囫囵吞枣的、甚至饿狼般的扑到里面,慢慢的积累和理解中,很多知识点都有感性的认识,或多或少的理解一些,或许是为了记忆罢了,将这些知识点整理收集一下,算是做个阶段性质的总结
也非常的欢迎各个行业的专家或者大神能够发现本文的一些我理解的错误,能给我留言,因为我是缺乏对很多知识的整体把握,只是想当然的就这么理解了,有些是查过资料的,有些可能没查资料或者没资料可查,由于也不是专业的科班出身,也没学过太多的文字修辞,所以说的近乎大白话,也就这么招吧
1:从单片机到编译器说起
针对各个编译要求,电脑上装的编译器主要是DEV-C++,VS2012,KEIL V5,以及虚拟机下的red linux和linux 下的GCC
用的比较多的还是keil,vs2012,gcc这三款
有时候在想,什么是编译器呢,为什么我定义个printf下,屏幕上就会显示指定格式的字符呢
首先得回到单板机,我理解的单板机就是一个控制芯片+一堆外围电路。而我用的keil编译器,它里面包含有控制芯片对应的头文件,头文件将很多的输入输出端口全部定义成可以读懂的宏和变量,而且晶振的频率来达到程序的循环,晶振的振荡频率大小决定单片机的运算速度,当然也和控制芯片本身的设计有关,比如晶振大于24MHZ就可以出错等等,有了这个控制芯片,控制芯片里面内置了很多寄存器,而早期的编译器,就是通过简单的机器码的编写,plc上的接口电压类似,输出每个针脚的电压电流来控制电路的
但是由于机器码编写比较困难,而且特别的繁冗,可能后来的开发人员就将一些接口集体分类,打包,然后在整体的接口上实现跳转,类似现在才汇编语言,这种编程已经大大的解决了机器码编写的问题,但是它和硬件接触紧密,而且可读性非常不好,对编码人员的要求比较高,这个时候大致在1965年左右
后来出现了b语言,我没有接触过,加上单板机的控制芯片和外围的电路的日益完善,硬件方面已经出现了更加复杂的逻辑,通过汇编可能工程量特别的大,而且特别不容易维护,b语言或许就是更加抽象的,他可能定义了一些基础的数据,可能为了规避汇编的一些缺点,定义一些数据往寄存器中读写,这就是很大的进步,也可能是汇编和b语言过度有其他的语言,至少这个理念是质的变化,它将人从反复的机器端口中解放出来
b语言发展了几年,他的问题可能也慢慢的显示出来,毕竟它只是解决汇编的一些问题,在1971年左右,一群美国的试验人员改进b语言,或者只是利用b语言的变量或者常量的理念,将b语言更加的规范,或者说是直接开发出另一种b语言,不过他们取名为c语言,因为他们觉的这个更加抽象,更加规范
单板机或者说硬件方面更加的完善,控制芯片的逻辑性更加的强,c语言的抽象性或者说可读性一出来就马上得到广泛的应用
这里得说一下这个c语言或者b语言和汇编的主要区别:当然这也是个人的理解,对于这两门语言我也是略懂,也欢迎专家的指正
汇编主要是定义各个寄存器之间的跳转,以及根据各个寄存器的功能,进行简单的运算,它是基于计算机的硬件方面来接受和操控寄存器中的内容的,所以说那个时候的程序员,需要理解各个寄存器之间的跳转和运算,基于硬件的限制相对比较高
但是c语言或许改变了这一点,它的设计理念就是脱离硬件而设计的,它自身定义了一些特殊的数据类型,比如整形,4个字节,来规定二级制的一些列的数据,这个通过编译器内核的编写来实现,它定义了bool型的数据类型,来表示与非门,关于小数,它重新的制定了小数的存储标准,定义了双精度和单精度,并且为这个数据类型留下了8个字节的内存空间,它还规定了内存对齐的规则,总之,这些都是一个编译器需要定义的东西,可能在这个编程语言的标准库中,然后对于编译生成的文件,编译器还必须有连接器,将生成的二级制文件和机器的硬件连接,这个连接的标准,各个开发语言上都有明确的规范,所以说c或者b语言,将编译环境和硬件分离,并且制定一系列的数据类型,并且通过一些操作符,将这些数据类型写入硬件,这或许就是我们说的堆栈方面的知识了,通过编译器编译成二进制文件,然后通过连接器连接
所以说c语言的出现,或者说c语言的开发理念的出现,可以说是编程的一大进步。
以上所有的时间都是1979年前的事情了
经过几年的发展,机器的硬件有了很大的发展,而且硬件方面或许已经出现了多级分化
截止上世纪80年代,那时候的计算机环境大致如下:中国刚开放大学 ,那是时候苹果和微软还没有出现,比尔盖茨那时候或许正在开发dos系统,ibm仍是it的老大,乔布斯可能还在上学,硬件已经发展到多元化的级别,同样的一个美国的大学生正在准备自己的毕业论文,他或许觉得c语言用的不爽,也不清楚怎么的,面向对象的思维出现在这个大学生脑袋里面,他开始改进c语言,在c语言的基础上增加了类,继承,派生等特性,将c语言由先前的面向过程直接面向对象,这种面向对象的思维,绝对不是简简单单的说增加特性那么简单,就是一个思维的完全改变,个人感觉c语言是将世界织成一张网,但是c++完全将世界分成了块
又经过了很多年的发展,美国成立了c++标准委员会,专门制定c++的标准,标准在98年成了一个标准,后面有03版本了11版本,这里不提了
硬件方面发展迅速,开始了多元化,有先前的简单控制芯片,发展成了现在电脑的cpu I7,E5,简单的外围电路,也有多样化,本来的控制按键发展出了电脑键盘,eeprom可能升级成了现在的机械和ssd,笨拙的1602可能是现在诸多显示器的一个过程,有了8个G,16个G的临时数据存储设备,当然也有发展到别处的,比如三菱公司的plc板,走的就是工控线路,手机的控制芯片则是不同的分支
90年代中期,出现了很多别的语言,针对c/C++的繁琐和一些操作的复杂,出现了很多编程语言,更加方便的实现客户开发
c++方面出现了vc6.0,dev-c++,gcc等多种编程环境
2:c++包含哪些东西
这个是我写这篇文字的核心,到底是什么呢,需要了解c++的哪些东西才算是掌握c++呢
前面大致的了解了c++的理念,主要是通过一些数据类型来控制硬件相关的,所以,大致的将c++包含的哪些东西归纳一下
1、一连串的理解
c++定义了四种基本的数据类型int、float、char、bool 在这基础了拓展了很多的数据类型,通过新定义或者加修饰符等方法,这里不提 ,这些数据类型都是通过入栈进入内存,在内存中存储的,为了方便管理这些数据,c++又定义了指针,也就是这些数据的内存的编号,为了方便找到他们,为了方便他们的转换或者说是访问,规定了两个符号,一个是星号”*“,一个是取地址符"&",为了更好的管理资源,对于一些数据类型相同的数据类型,c++引进了数组的概念,对应的也有了数组的指针
有了上面的数据类型,也就需要对他们的关系做个判断或者对他们进行运算,c++引进了运算符和一些操作符。
一些成型的算法,c++引进了函数,以及函数的参数和返回值,等一系列的传参返回的操作,为c++的灵活性提供了更多的方便
对于一些特定的数据类型,为了方便更好的管理,c++添加了枚举,结构体,类等一些复杂的数据类型,当然,这些类型也有地址,也有指针方面的运算等等,这些聚在一起的数据也得有些特性吧,于是c++针对这些复合类型的数据,定义了了公开,保护,和私有的权限,关于各个复合结构之间的关系,有公共关系,友元关系等等
这些复合的结构体为了方便一些特性的传输或者说是特性之间的传输,c++引进了继承和派生,函数方面引进了重载等多个特性
但是这些依旧对一些类别进行了限制,还不能更抽象的表现编程的思维,c++引进了虚函数和纯虚函数,对类的多态性做了强大的补充,使类更加的抽象和灵活
类以及函数之间为了更加的脱离一些数据类型的困扰,也为了更加的抽象,c++引进了模板
上面的工作是足够的灵活了,c++为了更加精简代码的量,也为了更加方便代码的可读性,定义了预编译头和一些宏定义
为了更加方便一些操作,c++规定了c++标准库,对算法,容器,IO,调试,c兼容方面做了全方面的补充
以上就是c++语言里面所有的内容,在列表分下类
1:数据操作类:简单数据,数组,指针,运算符,操作符,函数
2:复合数据:结构体和类,权限,继承和派生,多态,重载
3:标准方面:c++标准库,预编译和宏定义,调试
,