漫谈C语言及如何学习C语言.doc

上传人:夏** 文档编号:562172643 上传时间:2022-10-29 格式:DOC 页数:12 大小:539.51KB
返回 下载 相关 举报
漫谈C语言及如何学习C语言.doc_第1页
第1页 / 共12页
漫谈C语言及如何学习C语言.doc_第2页
第2页 / 共12页
漫谈C语言及如何学习C语言.doc_第3页
第3页 / 共12页
漫谈C语言及如何学习C语言.doc_第4页
第4页 / 共12页
漫谈C语言及如何学习C语言.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《漫谈C语言及如何学习C语言.doc》由会员分享,可在线阅读,更多相关《漫谈C语言及如何学习C语言.doc(12页珍藏版)》请在金锄头文库上搜索。

1、漫谈C语言及如何学习C语言为什么要学习C语言?为什么要学习、使用C语言?为什么要学习一个可能比自己都岁数大的编程语言?我在前面如何学习编程语言的博客文章http:/ 里提到,选择一门编程语言,“为什么而学”这个目的是最重要的,目的不明确就没法学好。这也是为什么很多学生朋友在大学里必修C语言却觉得没学明白的原因。因为学习的目的不明确,学习当然也没有动力。还有一个原因是C语言是工程实践性很强的语言,它不是来自某个研究所某个大学学院,而是实实在在从项目需要中产生,伴随着Unix的兴起而流行,语义简明清晰,功能强大而不臃肿,简洁而又不过分简单,实在是居家旅行工作学习必备之良友。C语言相比C+的优点之一

2、就是最小惊讶原则,一是一二是二,不会在私底下产生一些莫名其妙的额外产物。用C+做个例子,比如这样一个函数原型void PassWithClassValue(COneClass clsParam1),稍微了解C+的朋友都会知道,如果你没有实现COneClass的拷贝构造函数,编译器会好心的帮你实现一个,而且在调用这个函数PassWithClassValue的时候,偷偷地调用拷贝构造函数产生一个临时对象作为参数传递,对于某些情况,比如编写操作系统这类必须优化性能的情景下,这些自以为是的东西是非常邪恶的事情。C语言本身只提供必要的语言特性,其它复杂一点功能如文件处理、数学计算等等都以库函数方式提供,

3、甚至连malloc、free这种“必须有”的功能,也是以标准库函数的方式提供,而不是作为C语言核心出现。在伟大的著名的无所不包的K&R开头部分就提到了,for其实可以通过while来完成,只不过for可以写的更简洁,言外之意,对于C语言for其实不是必要的。跑题一点说,在其它程序语言中Lua可以说继承了C语言简洁的设计哲学,甚至连continue这种几乎必备的关键字都一直拒绝加入,在Lua的maillist以及wiki里都提到过continue这个问题,Lua语言维护者认为continue对于Lua而言不是必要的,也不考虑在后续版本中添加这个关键字。这种简洁哲学也让C语言的可移植性、便携性特别

4、优秀,也使得很多嵌入式系统依然使用C语言作为主要编程工作语言。Java语言有一个口号:“一次编写,处处运行”,就是跨平台这个噱头。实际上C语言从早期开始就几乎达到了“一次编写,处处编译”,在ANSI在1989年统一了C语言标准以后(称之为C89),只要特定平台上的编译器完整实现了C89标准,而且你的代码没有使用某些特殊的扩展(GCC以及微软都有自己的编译器特定扩展),那么代码一定可以编译通过,再实现一下操作系统相关的函数库,C语言的移植就是很简单的事情。可以用Lua作为例子,Lua本身是完全遵循C89标准,没有使用任何特定扩展,这也保证了有C语言编译器的平台,都可以编译使用Lua。可以编译运行

5、C语言的硬件平台可以从A排到Z,真是非常有意思的事情。C语言也是一个比较少见的应用领域极为广泛的语言。比如编写操作系统这种高难问题,只有C+、汇编语言可以做到。C语言可以编写服务器端软件如Apache、Nginx,或者编写GUI程序,如GTK。大多数程序语言的第一版是通过C语言实现,借助前面提到的“一次编写处处编译”,最大的保证了这些程序语言的可移植性。在Web开发领域,C语言的应用相对较少,这也是一种取舍的结果,Web开发需要使用PHP、Ruby、Python这样的动态语言,可以快速上线快速修改,可以最大程度满足用户时时变化的需求,这也是C语言的弱项。如果把程序语言的应用领域从硬件到管理软件

6、、Web程序做一个很粗略从下到上的排列,C语言适合领域是比较底层靠近硬件的部分,而新兴语言比较偏重于高层管理或者Web开发这种相对贴近最终用户的领域。比较流行的混合开发模式是使用C语言编写底层高性能部分代码或后台服务器代码,而使用动态语言如Python做前端开发,充分发挥它们各自的优势力量。提到C语言的缺点,常常是它缺少这种或者那种特性,比如有人建议加入GC,有人建议加入并行或者并发支持,有人提到没有一个比较完整的类似C+的异常策略。这些特性有的可以通过引入第三方库来实现,但C语言的设计哲学其实决定了它不会像C+那样“非常强大”。即使引入了某些人期望的特性,依然会是某些人喜欢某些人不喜欢的情形

7、,现在的功能对于C语言应用领域来说已经够用,其它特性可以通过特定程序语言实现,并且通过C API与C语言编写的程序进行交互。任何一个工匠都不可能只使用一个工具完成他的工作,不同工具结合起来才能更快更好的完成任务。提到C API,也稍微介绍一下,我们知道windows操作系统的api也好,Linux的系统api也好,或者是想给Ruby、Python编写扩展模块,C语言形式的函数定义都是唯一的选择。C语言就好像是一个中间层或者是胶水,如果想把不同编程语言实现的功能模块混合使用,C语言是最佳的选择。提了这么多关于C语言的好处,那么学习C语言是否适合就看你自己的判断了,例如要进行一个嵌入式项目,或者需

8、要进行服务器端开发,或者写一个性能相关的组件等等,C语言都是比较好用的选择。另外也可以在C+的使用过程中有意的使用C语言的思考方式,汲取C语言简洁明快清晰地设计思路,对编程设计水平会有很大的提高。C语言学习方法在前面http:/ 曾经提到过一个比较系统学习一门新的编程语言的方式,C语言学习也可以按照类似的顺序:阅读参考书,阅读代码,编写调试实际程序,上网参与讨论,研究高级话题。学习语言的开始一般是阅读参考书。我建议选择几本非常经典的好书,仔细完整反复阅读几遍,“书读百遍其义自现”。选择C语言学习的好处是,这几本书基本上完整涵盖了C语言编程领域的方方面面,不会像C+那样,即使读完一堆书还是有些糊

9、涂,依然有这样那样难懂的陷阱。1,参考书籍在豆瓣上列了一个书单,大家可以直接参考http:/ C Programming Languagehttp:/ C Programming Language(后面称为 K&R)里面包含了一个简单的语法解析器,包含了malloc如何实现,包含了一个完整的操作系统目录浏览程序,这些程序的实用性极高,可以这样说,如果学习任何一门语言能够自己独立动手实现以上的功能,基本上就可以算是入门了。K&R书里面每段都蕴含着非常值得探究的软件开发工程实践经验,如果没有一定的开发经验,其实是看不出来这些冰山下面的内容的,比如开头一章就提出用写完整代码这种方式来教学,而在书中那些C语言的陷阱或者可能出问题的地方,都有提到,但是由于篇幅所限,写的非常简约,很难让人一下就看懂。我正在完整的逐字逐句的阅读此书,希望能稍作注解,写几篇博客分享一下。C程序设计语言(第2版新版)http:/ http:/ C编程一站式学习http:/ C+ 2010 Express。因为Code:Blocks不包含Windows编程头文件(实际是因为没有Windows SDK),无法编写Windows操作系统相关的界面应用程序或者服务类程序。而VC+Express自带了这些头文件以及编程库,虽然功能稍微简陋,但对于练习使用基本够用。主页:http:/

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号