学好C/C++,走遍天下都不怕!关于C/C++的那些不得不说的故事

学好C/C++,走遍天下都不怕!关于C/C++的那些不得不说的故事在大多数开发或者准开发人员的认识中,C/C++ 是一门非常难的编程语言,很多人知道它的强大,但因为认为“难”造成的恐惧让很多人放弃。我从学生时代

大家好,欢迎来到IT知识分享网。

在大多数开发或者准开发人员的认识中,C/C++ 是一门非常难的编程语言,很多人知道它的强大,但因为认为“难”造成的恐惧让很多人放弃。

我从学生时代开始接触 C/C++,工作以后先后担任过 C++ 客户端和服务器的开发经理并带队开发,至今已经有十多年了。虽然时至今日哪种编程语言对我来说已经不再重要(我目前主要从事 Java 开发),但 C/C++ 仍然是笔者最喜欢的编程语言。在我看来,C/C++ 一旦学成,其妙无穷,就像武侠小说中的“九阳神功”一样,有了这个基础,您可以快速学习任何语言和编程技术。

学好C/C++,走遍天下都不怕!关于C/C++的那些不得不说的故事

目前 C/C++ 的应用领域

需要注意的是本文不细分C 与C++的区别,通常情况下,C++ 可以看成是 C 的一个超集,在古典时期,可以认为 C++ 就是C with classes。虽然如今的C++从功能层面上来看,离 C 越来越远了;但是从语法层面来上来看,大多数 C++ 语法还是与 C 基本一致的,所谓 C++ 的面向对象特性,如果细究 C++ 类方法的具体语法还是 C 的过程式语法。当然,面向对象是一种思想,语言本身对其支持的程度固然重要,能否熟练地使用则是更要看开发者的水平了。

C 语言目前主要用于像操作系统这样一类偏底层的的应用开发,包括像 Windows/linux等这样的大型商业操作系统,和嵌入式操作系统、嵌入式设备上的应用。还有一些开源的软件,也会选择C开发,这些系统主要优先考虑程序执行效率和生成的可执行文件的体积(C 代码生成的可执行文件体积相对更小),当然还有一些是历史技术选型问题,这类软件以redis、libevent、nginx,目前像国内的电信服务商所使用的电话呼叫系统一般也是基于一款叫freeswitch的开源 C 程序做的二次开发(项目地址:freeswitch.com/)。

C++ 面向对象的语法与C相比较起来,在将高级语言翻译成机器二进制码的时候C++ 编译器在背后偷偷地做了大量工作,生成了大量的额外的机器码,而这种机器码相对于C来说不是必须的。例如,对于一个C++类的实例方法,编译器在生成这个方法的机器码时,会将函数的第一个参数设置成对象的this指针地址,以此来实现对象与函数的绑定。正因为如此,许多开发者会优化和调整编译器生成的汇编代码。

我们再来说说 C++,C++ 的应用领域目前有三大类,第一类就是我们目前见到的各种桌面应用软件,尤其 Windows 上桌面软件,如、安全类杀毒类软件(如金山的安全卫士,已开源,其代码地址:code.ijinshan.com/sourc)、各种浏览器等等;另外就是一些基础软件和高级语言的运行时环境,如大型数据库软件、Java虚拟机、C#的 CLR 运行时、python编译器和运行时环境等等;第三类就是一些业务型应用软件的后台,如游戏的服务器后台,例如魔兽世界的服务器(代码地址:github.com/azerothcore/)和一些企业内部的应用系统,笔者曾在某交易所从事后台开发,其交易系统和行情系统就是基于 C++ 开发的。

学好C/C++,走遍天下都不怕!关于C/C++的那些不得不说的故事

C++ 与操作系统平台

从上面的介绍可以看出,与Java、python等语言相比,C/C++语言是运行在离操作系统最近的一种高级语言,因此其执行效率也比较高,但是有得必有失,也因为如此,所以C/C++这门语言存在如下特点:

(1)C/C++ 整套的语法不具备“功能完备性”,单纯地使用这门语言本身提供的功能您无法创建任何有意义的程序,您必须借助操作系统的 API 接口函数来达到相应的功能。当然,随着 C++ 语言标准和版本的不断更新升级,这种现状正在改变;而像 Java、python 这类语言,其自带的 sdk 提供了各种操作系统的功能。举个例子,C/C++语言本身是不具备网络通信功能的,必须使用操作系统提供的网络通信函数(如socket系列函数);而对于Java来说,其 jdk 自带的 java.net和 java.io等包则提供了完整的网络通信功能。我在读书的时候常常听人说,、360安全卫士这类软件是用 C/C++ 开发的,但是当我学完整本 C/C++ 教材以后,仍然写不出来一个像样的窗口程序。许多过来人应该都有类似的困惑吧?其原因是一般 C/C++ 的教材不会教你如何使用操作系统 API 函数的内容。

(2)正因为 C/C++ 语言需要直接使用了操作系统的接口功能,这就造成了 C/C++ 语言繁、难的地方,如操作内存方面不当容易引起程序宕机,不同的操作系统的 API 接口使用习惯和风格也不一样,接口函数种类繁多,开发者如果想开发跨平台的程序,必须要学习多个平台的接口函数和对应的系统原理。

(3)在应用层开发,直接使用操作系统的接口的函数,往往执行效率高,控制力度大,您的开发能力仅仅限制于操作系统本身,Java 这类语言,很多功能即使操作系统提供的,如果 Java 虚拟机不提供,开发人员也无法使用。正如著名的编程大师Charles Petzold说的:显而易见,究竟用哪种方式编写应用程序最好,其实并无一定之规。应用程序本身的特性应该是决定采用何种编程工具的最主要因素,但是无论将来你采用什么样的编程工具,通过了解操作系统 API 从而深入理解操作系统的工作原理,这本身就有很重要的意义。操作系统是一个非常复杂的系统,在 API 之上加一层编程语言并不能消除其复杂性,最多不过是把复杂性隐藏起来而已。说不定什么时候,这种复杂的那一面迟早会蹦出来拖你的后腿,懂得系统 API 能让你到时候更快地挣脱困境。在基本操作系统 API之上的任何软件层或多或少都会限制你使用操作系统的全部功能。比如,你或许发现采用 Visual Basic 来编写你的应用程序非常理想,但是就有那么一两项非常基本的功能 Visual Basic 无法支持。往往这个时候你得非要调用基本 API 。作为直接使用操作系统 API 的程序员,我们的活动空间完全由 API 来规范,再没有什么其他方式比直接调用 API 更有效、更灵活多样了。

学好C/C++,走遍天下都不怕!关于C/C++的那些不得不说的故事

总结起来,C/C++语言的开发核心是建立在直接调用操作系统 API 的基础上的,优点是执行效率高、发挥空间大;缺点是,需要经过系统深入的学习,学习周期长,编写代码较复杂、容易出错。

话说回来,C/C++就是一个既可以强化思维能力,又可以打好编程基础的编程语言,你想要做软件开发,成为核心程序员的话,学习C/C++的话笔者有一个C/C++的编程千人羣(Q艘索:C语言编程学习聚集地(无言建立))你如果感觉自学C/C++语言有困难的话,有兴趣学习或者了解一下C/C++编程的小伙伴就可以进来交流。下面给大家分享一下C/C++的学习路线图:

学好C/C++,走遍天下都不怕!关于C/C++的那些不得不说的故事

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/51779.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信