C及C++入门学习杂谈1

来源:互联网 发布:瘦大腿内侧 知乎 编辑:程序博客网 时间:2024/06/06 16:33

     很惭愧,由于在大学的时候基本没学习,我目前掌握的那点C语言知识基本都是工作之后学到的。一晃工作5年了,由于没有学习自觉性导致自觉还处于入门阶段,开始写这些文字就是想督促自己该好好学知识了。自己要坚信当下定决心干某件事,无论什么时间开始都不算晚。

闲话少说,目前在各种面对对象高级语言横行的当下,C语言始终能占据编程语言排行榜的前三名,自然是因为它是可以能操作硬件的特点了。而作为单片机程序的开发者,因为实在不想也不会用汇编语言,所以C语言就只能是唯一的选择了。C语言入门还是比较简单了,只要了解int,char,double,float等数据类型,知道条件语句,循环语句等简单的语法就可以开始写程序了。电脑上的入门程序是“hello world”,而单片机上的入门程序就是跑马灯。只要把单片机上的各种寄存器当成变量进行赋值取值就可以开始玩转单片机了。

单片机毕竟资源有限,所以主要都是做一些简单任务,例如读取传感器的数据,简单处理后传递给上位机进行真正的运算处理。当实现了一些简单的功能,像用IO管脚操作单色液晶屏显示汉字英文了,用UART跟电脑通讯了,用定时器通过旋转编码器计算距离了等,这个时候感觉自己很厉害了。

现在看来还真是无知者无畏啊,不过很快我就被叫醒了。现在比较流行的单片机系列STM32由于基于是cortex-m内核,里面的寄存器不是51能比拟的,参考手册动则几百上千页,捧着这么大的文件去写程序对大部分人来说不太现实。所以ST公司很善解人意的给出了固件库,把那些寄存器封装了提供给开发者使用,这种封装虽然损失了一部分单片机性能,但是看着例程很容易就可以上手。我上家公司的直属领导(很感激这位,他让我从啥也不会的程度迈入会那么一点点的境界,实现了从无到有的突破)让我好好读读人家固件库的程序(这个库是提供源代码的),学习学习人家的编程风格。

我开始还是很听话的去看了,结果看了之后我就晕了,里面的关键字,运算符号等我都认识,但是一组合起来就很难看懂了,而且里面为了可读性大量使用了宏定义和typedef起别名,所有的寄存器都被结构体封装了,而我还总要了解到变量是如何以及何时改变的,就只能不断的go to define。结果就是进度超级慢,而且很多时候那些变量是在中断里改变的,按程序的顺序去看是根本不知道它咋改变了的。而固件库程序里无处不在的断言函数(assert)成了压倒骆驼的最后一根稻草,我实在是无法理解这个函数工作方式以及起到的作用,最后放弃了学固件库。

直到我最近在培训机构学习C++(自学学不进去啊),才开始渐渐了解固件库的程序为啥那么复杂的的写了。当然我的理解可能不准确,不过还是说一下吧。因为当程序写的大到一定规模后,用面对过程的方式就很难统御了,而C语言并没有提供面对对象的语法,所以只能用那些新手看的云山雾绕的写法来实现面对对象思想了。

例如用宏定义的函数,我之前一直不解为啥这么操作,而不是好好写一个函数。直到了解C++模板的时候,原来这是为了实现无数据类型函数啊,用途则是提高函数里能通用的算法代码的利用率,而不用每种数据类型都要麻烦的单独写一个函数,果然懒才是促进人类社会发展的原动力。

所以要精通C语言,学习学习C++还是可以让人触类旁通的。毕竟C++的出现的原因就是因为用C来实现某些功能时比较复杂。当你能用C语言来进行面对对象编程的时候,你就成为顶尖的C程序员了。