知识屋:更实用的电脑技术知识网站
所在位置:首页 > 科技

初学者是学习 C 语言还是 C++ 好?各有何利弊?

发表时间:2022-03-24来源:网络

关于C++的五个普遍的误解:

1. “要理解C++,你必须先学习C”
2. “C++是一门面向对象的语言”
3. “为了软件可靠性,你需要垃圾回收”
4. “为了效率,你必须编写底层代码”
5. “C++只适用于大型、复杂的程序”
关于第一个误解的阐述可以回答提出的问题:
误解1:“要理解C++,你必须先学习C”

不。学习C++基础编程比学习C要容易地多。

C几乎是C++的一个子集,但是它不是最先要学习的最好的子集,因为C缺少计数支持,类型安全,和易用的标准库,而C++为简单任务提供了这些。

为什么有那么多老师坚持“先学习C”的观点?
- 因为多年来他们一直这么做。
- 因为这是课程所要求的。
- 因为老师们年轻时就是这么学习的。
- 因为C比C++小,就认为C比C++简单。
- 因为学生们迟早要学习C(或者C++的C子集)。

然而,C并不是最先学习C++的最容易或者最常用的子集。更进一步,一旦你知道了C++的合理数量,C子集很容易学习。先学习C,会导致不断忍受错误,以及学习如何避免这些错误,而在C++中很容易避免这些错误。

到底该先学什么,后学什么,怎么学习,重点来了。

作者:程序羊
出处:学C语言和C++它有毛关系吗?_CodeSheep-CSDN博客

这是最近一周时间几个读者小伙伴所提的问题,我顺手截了两个图。

实不相瞒,这类问题之前也经常看到,但是我忘了截图了。

每次遇到这种问题,看起来很简单,但是打字一时半会还真说不清,写一篇文章来统一聊聊吧,如果小伙伴们有不同看法,也欢迎批评指正,评论区见。

就像经典书籍《Effective C++》一开头就说的,现如今我们提到C++,都应该视其为一个庞大的「语言联邦」,最起码包含如下几个重要的组成部分:

面向过程编程面向对象编程泛型编程元编程函数式编程STL标准库

这其中的第一部分「面向过程编程」,正是C++提供的向后兼容C语言的部分,所以你能看到市面上在售的大部分讲C++编程的书,一开始前几个章节基本都是在讲「面向过程编程」的内容,包括但不限于:数据类型、变量、运算符、表达式、语句、判断、循环、函数、指针等等这些内容。

C++初学的时候有不少经典必读数据,这里我也做了汇总,先学什么,后学什么看下面这个内容就好了,还贴心的附上了下载链接!

我的C/C++私藏学习书单 | 附下载链接


不学C语言能直接学C++吗?

还是像前面所说,C++编程语言的第一大重要组成部分就是「面向过程编程」,而这正是C语言老大哥的领域。即使没有学过C语言,一上来就直接学习C++的小伙伴,应该也难逃『面向过程』这一部分的内容。因为市面上在售的大部分讲C++编程的书,开始的章节都在讲「面向过程编程」的内容。

从理论上来说,学C++前并不一定非得学C语言,但是有C语言底子再去学C++往往更具优势,最起码「面向过程编程」这一部分内容能够轻车熟路。

但是遗憾的是,即使是《C++ Primer》这种700多页厚的权威C++书籍,开头也只有很少一部分在讲「面向过程编程」,所以对于面向过程这一部分的讲述是肯定没有专门讲C语言的书籍剖析得细致和全面的,不然也不会有这种重点侧重于指针相关的《C和指针》等这类书籍的出现了。

所以个人建议是在学C++之前,C语言的基础还是尽量要夯实,肯定是有帮助的。



C学得好的,学习C++是否更具优势?

是的。

最起码学C++时,里面的「面向过程」这一部分内容可以说轻车熟路了。



C++能替代C语言吗?

既然C++这么强大,包含这么多模块和范式,而且也几乎包含了C语言面向过程这一部分的内容,那为啥还要学C语言呢?都直接学习C++它不香嘛?

是的,C++很强大没错,但那些强大的范式和机制本身带来的包袱就不轻,也确实给学习者造成了不小的负担,甚至劝退了很多人。

而反观C语言,C语言本身就是一个把能力性能效率学习成本权衡得非常极致的一种编程语言,以至于大学阶段必开的程序设计课程里基本都有C语言的身影。

而且C语言的应用领域极度广泛,上到操作系统底层的原生接口,下到普通的应用层开发,C语言都有着不小的功劳。以至于这么多年来,在Tiobe编程语言排行榜里,C语言都是居高位不下。

而且2020开年C语言重回巅峰王座,一举夺得「2019年度编程语言」。虽然这只是一个看起来很无聊的排名,但多多少少能说明一些事情。

所以无论是过去,现在,甚至是未来,近50岁的C语言老将军依然永不为奴。



只有C++这种面向对象的语言才适合大型项目吗?

C++的出现的确是为了更方便地开发大型应用程序,毕竟面向对象编程里的很多重要思想和机制都对大型项目和复杂系统所要求的项目工程化、代码复用性/扩展性/可维护性等提供了强大的支撑。

但是摆在眼前的事实告诉我们,即便是C语言,也照样可以构建出极其复杂的系统和软件。上到Linux这种旷世伟大的操作系统内核,小到被各个公司重度依赖的Redis、Nginx等开源软件或框架,都是C语言的代表作品。

所以有时候我们不得不承认的是,大家所说的抽象能力更多的是看写这个程序的人,而并非编程语言本身。


小 结

好啦,扯得有点多了,总结一下就是:

C语言和 C++是两个不同的编程语言,只不过内容上有一定的重叠;C语言是一门很强大的编程语言,我觉得有机会还是要学一下;一般来说,有了 C语言的基础,上手 C++也会更快;C++和 C各有各的选用考虑和应用场景,并没有谁更好一说,学不学看自己的兴趣和自身技术发展的考量

书籍推荐

最后聊一聊学习C语言和C++的书籍吧。

个人觉得如果想系统学习这两门语言,最好还是得看一下经典的书籍。

关于C语言学习书籍,最最权威的当然是C语言的发明者Dennis M. Ritchie所著的《The C Programming Language》(它也有中文版的),除此之外《C Primer Plus》也很系统全面。

关于C++的学习书籍,最权威的当属C++的发明者Bjarne Stroustrup大佬所著的《The C++ Programming Language》,但是很明显这本书不适合初学者,更加适合的还得是《C++ Primer》,也很系统全面。至于再深入可以继续阅读诸如《Effective C++》、《STL源码剖析》、《深度探索C++对象模型》等书籍。

这些书读完,成神之路便可由此开启。

不管是不是科班出身,每一个程序员都应该花时间了解和学习计算机科学相关的基础知识,因为所有关于如何编程的底层逻辑和原理都在那里了。

这里有4本手册,全网累积下载100w次,几乎程序员人手一套,包含数据结构与算法、操作系统、计算机组成原理、计算机网络等硬核基础知识,图文+实战案例,平时开发+搞定面试,帮你快速建立对计算机科学的大局观,夯实计算机基本功,瞬间起飞~

切记:学习资料在于精,不在于多,多反而不是好事,作为一名程序员,大家的学习时间都太宝贵了,我们要把80%时间投入在最有价值20%的学习内容上,具体内容可以看上面这篇资料贴。

收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜