没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
云风最近写了一篇博客《C
语言的前世今生 》。作为长期使用 C 语言开发网络游戏服务器的程
序员,云风是有理由写这样一篇文字,不过还是感觉谈的不够深入,C 语言在业界使用的现状
没有怎么描写,有些意犹未尽。在这里想比较系统的谈谈个人对 C 语言学习方式方法的理解。
分别按照书籍、实验环境搭建、网络资源来分别介绍,希望能写的比较完整全面一些,给想学
习 C 语言的朋友一个有价值的参考。
为什么要学习 C 语言?
为什么要学习、使用 C 语言?为什么要学习一个可能比自己都岁数大的编程语言?
我在前面如何学习编程语言的博客文章 http://sunxiunan.com/?p=1597 里提到,选择一门
编程语言,“为什么而学”这个目的是最重要的,目的不明确就没法学好。这也是为什么很多学
生朋友在大学里必修 C 语言却觉得没学明白的原因。因为学习的目的不明确,学习当然也没有
动力。还有一个原因是 C 语言是工程实践性很强的语言,它不是来自某个研究所某个大学学院,
而是实实在在从项目需要中产生,伴随着 Unix 的兴起而流行,语义简明清晰,功能强大而不
臃肿,简洁而又不过分简单,实在是居家旅行工作学习必备之良友。
C 语言相比 C++的优点之一就是最小惊讶原则,一是一二是二,不会在私底下产生一些莫名其
妙的额外产物。用 C++做个例子,比如这样一个函数原型 void
PassWithClassValue(COneClass clsParam1),稍微了解 C++的朋友都会知道,如果你没
有实现 COneClass 的拷贝构造函数,编译器会好心的帮你实现一个,而且在调用这个函数
PassWithClassValue 的时候,偷偷地调用拷贝构造函数产生一个临时对象作为参数传递,对
于某些情况,比如编写操作系统这类必须优化性能的情景下,这些自以为是的东西是非常邪恶
的事情。
C 语言本身只提供必要的语言特性,其它复杂一点功能如文件处理、数学计算等等都以库函数
方式提供,甚至连 malloc、free 这种“必须有”的功能,也是以标准库函数的方式提供,而不是
作为 C 语言核心出现。在伟大的著名的无所不包的《K&R》开头部分就提到了,for 其实可以
通过 while 来完成,只不过 for 可以写的更简洁,言外之意,对于 C 语言 for 其实不是必要的。
跑题一点说,在其它程序语言中 Lua 可以说继承了 C 语言简洁的设计哲学,甚至连 continue
这种几乎必备的关键字都一直拒绝加入,在 Lua 的 maillist 以及 wiki 里都提到过 continue 这
个问题,Lua 语言维护者认为 continue 对于 Lua 而言不是必要的,也不考虑在后续版本中添
加这个关键字。这种简洁哲学也让 C 语言的可移植性、便携性特别优秀,也使得很多嵌入式系
统依然使用 C 语言作为主要编程工作语言。
Java 语言有一个口号:“一次编写,处处运行”,就是跨平台这个噱头。实际上 C 语言从早期开
始就几乎达到了“一次编写,处处编译”,在 ANSI 在 1989 年统一了 C 语言标准以后(称之为
C89),只要特定平台上的编译器完整实现了 C89 标准,而且你的代码没有使用某些特殊的扩
展(GCC 以及微软都有自己的编译器特定扩展),那么代码一定可以编译通过,再实现一下操
作系统相关的函数库,C 语言的移植就是很简单的事情。可以用 Lua 作为例子,Lua 本身是完
全遵循 C89 标准,没有使用任何特定扩展,这也保证了有 C 语言编译器的平台,都可以编译使
用 Lua。可以编译运行 C 语言的硬件平台可以从 A 排到 Z,真是非常有意思的事情。
C 语言也是一个比较少见的应用领域极为广泛的语言。比如编写操作系统这种高难问题,只有
C++、汇编语言可以做到。C 语言可以编写服务器端软件如 Apache、Nginx,或者编写 GUI
程序,如 GTK。大多数程序语言的第一版是通过 C 语言实现,借助前面提到的“一次编写处处
编译”,最大的保证了这些程序语言的可移植性。在 Web 开发领域,C 语言的应用相对较少,
这也是一种取舍的结果,Web 开发需要使用 PHP、Ruby、Python 这样的动态语言,可以快
速上线快速修改,可以最大程度满足用户时时变化的需求,这也是 C 语言的弱项。如果把程序
语言的应用领域从硬件到管理软件、Web 程序做一个很粗略从下到上的排列,C 语言适合领域
是比较底层靠近硬件的部分,而新兴语言比较偏重于高层管理或者 Web 开发这种相对贴近最
终用户的领域。比较流行的混合开发模式是使用 C 语言编写底层高性能部分代码或后台服务器
代码,而使用动态语言如 Python 做前端开发,充分发挥它们各自的优势力量。
提到 C 语言的缺点,常常是它缺少这种或者那种特性,比如有人建议加入 GC,有人建议加入
并行或者并发支持,有人提到没有一个比较完整的类似 C++的异常策略。这些特性有的可以
通过引入第三方库来实现,但 C 语言的设计哲学其实决定了它不会像 C++那样“非常强大”。即
使引入了某些人期望的特性,依然会是某些人喜欢某些人不喜欢的情形,现在的功能对于 C 语
言应用领域来说已经够用,其它特性可以通过特定程序语言实现,并且通过 C API 与 C 语言编
写的程序进行交互。任何一个工匠都不可能只使用一个工具完成他的工作,不同工具结合起来
才能更快更好的完成任务。
提到 C API,也稍微介绍一下,我们知道 windows 操作系统的 api 也好,Linux 的系统 api 也
好,或者是想给 Ruby、Python 编写扩展模块,C 语言形式的函数定义都是唯一的选择。C 语
言就好像是一个中间层或者是胶水,如果想把不同编程语言实现的功能模块混合使用,C 语言
是最佳的选择。
提了这么多关于 C 语言的好处,那么学习 C 语言是否适合就看你自己的判断了,例如要进行一
个嵌入式项目,或者需要进行服务器端开发,或者写一个性能相关的组件等等,C 语言都是比
较好用的选择。另外也可以在 C++的使用过程中有意的使用 C 语言的思考方式,汲取 C 语言
简洁明快清晰地设计思路,对编程设计水平会有很大的提高。
C 语言学习方法
在前面 http://sunxiunan.com/?p=1597 曾经提到过一个比较系统学习一门新的编程语言的
方式,C 语言学习也可以按照类似的顺序:阅读参考书,阅读代码,编写调试实际程序,上网
参与讨论,研究高级话题。
学习语言的开始一般是阅读参考书。我建议选择几本非常经典的好书,仔细完整反复阅读几遍,
“书读百遍其义自现”。选择 C 语言学习的好处是,这几本书基本上完整涵盖了 C 语言编程领域
的方方面面,不会像 C++那样,即使读完一堆书还是有些糊涂,依然有这样那样难懂的陷阱。
1,参考书籍
在豆瓣上列了一个书单,大家可以直接参考 http://book.douban.com/doulist/636329/
在下面简单点评一下,阅读顺序最好参照列出的顺序。
《The C Programming Language》http://book.douban.com/subject/1230004/
剩余10页未读,继续阅读
资源评论
pgalxx
- 粉丝: 88
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于C++的Unix V6++二级文件系统.zip
- (源码)基于Spring Boot和JPA的皮皮虾图片收集系统.zip
- (源码)基于Arduino和Python的实时歌曲信息液晶显示屏展示系统.zip
- (源码)基于C++和C混合模式的操作系统开发项目.zip
- (源码)基于Arduino的全球天气监控系统.zip
- OpenCVForUnity2.6.0.unitypackage
- (源码)基于SimPy和贝叶斯优化的流程仿真系统.zip
- (源码)基于Java Web的个人信息管理系统.zip
- (源码)基于C++和OTL4的PostgreSQL数据库连接系统.zip
- (源码)基于ESP32和AWS IoT Core的室内温湿度监测系统.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功