为什么要学习C——我个人的体会

jackxiang 2010-3-18 19:14 | |
先列举几个实事:国内大学课程中,C程序设计已被列为公共基础课;C和C++目前以27.0%的总和位居计算机语言排行榜榜首;各种著名的算法通常都以C语言描述作为标准;开源操作系统 Linux 2.6 内核源代码接近600万行,其中99%以上的代码是用C写的。

C是一种结构化的、面向过程的高级编程语言,C是最能让你理解计算机程序运行原理的高级语言,它最贴近于汇编,跨平台性好,系统级别的程序设计都离不开C语言,比如Linux内核和驱动程序99%以上的代码是C写的!在没有高级语言的日子里,前辈们使用汇编代码操纵机器指令,繁琐的助记符和杂乱的结构给程序的编写和调试带来了极大的麻烦,更重要的是汇编程序是高度依赖于具体CPU的,换一个平台代码就要全部重写一次。人们设想能否以一种直观的、结构化的表现手段来描述头脑中的编程想法,然后由计算机来“翻译”成机器指令?——C语言的发明使这一想法成为了现实,这里不得不提两个人: Ken Thompson 和 Dennis Ritchie (K&R),二人在开发UNIX时发明了C语言 ——从此,人们编程可以不必关心计算机的运行细节,而把重点放到程序的功能和结构的设计上,C语言的出现也第一次真正将结构化编程概念变为现实,结构化带来了模块化,模块化使分工协作成为可能,分工协作则带来了软件的产业化!这正是C经历了30多年仍保持旺盛生命力的原因之一。

C语言贴近于汇编,几乎每句C程序都与若干条相对固定的汇编指令相对应。据统计,优秀的C编译器编译出的程序仅比相应的汇编代码写出的程序平均略大约10%,略慢约10%。C的指针保留了汇编的部分特性,这使得C/C++成为了唯一能够直接操作内存的高级语言,在提供高级语言方便性性的同时最大限度地保留了底层硬件提供的基本功能,在结构性和灵活性之间取得最佳平衡点!因此,C语言应该和某一种平台的汇编结合起来学习,从计算机运行原理和程序设计两个层面充分理解C语言,才能达到最好的学习效果!

现在很多人推崇C++,没错,面向对象是计算机编程继结构化之后最伟大的革命,C++面向对象的概念给我们编程带来了极大的方便,但在选择使用C++之前至少应理解什么是“面向对象”,其次,要明白C++比C的优势在哪里,劣势或不足在哪里。我个人非常不屑“为了多学一门语言、为了追求面向对象时髦而学C++”的想法,很多人仅仅学了C++表面的东西却说自己学会C++了,然而问其什么是多态、什么是重载、虚函数的作用却支吾半天说不上来。不要忘了,面向对象是以面向过程为基础的,更确切的说C++完全包含了C!所以说,一方面学习C++一定要以C为基础,而且是扎实的C编程基本功!以C的基础来学C++会事半功倍!另一方面要根据需要来决定使用结构化(C)还是面向对象(C++),如果C完全能胜任就没必要使用C++,实事证明,C++编译出的程序要比C大一些、慢一些,而且C++的跨平台性不如C好。说到面向对象编程,其实C的结构体就有面向对象的概念的雏形,Linux内核中很多代码都是用结构体(struct)封装的数据结构,有与各结构体相对应的处理函数,结构紧凑,设计十分巧妙,可以说是用C实现的“面向对象”编程。



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/rssn_net/archive/2008/09/07/2893935.aspx

http://blog.csdn.net/rssn_net/archive/2008/09/07/2893935.aspx

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/2838/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!

评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]