我是先学C语⾔还是先学C++,实不相瞒,鱼和熊掌可兼得!
这是最近⼀周时间⼏个读者⼩伙伴所提的问题,我顺⼿截了两个图。
实不相瞒,这类问题之前也经常看到。
每次遇到这种问题,看起来很简单,但是打字⼀时半会还真说不清,想想今天周末了,写⼀篇⽂章来统⼀聊聊吧,如果⼩伙伴们有不同看法,也欢迎批评指正,评论区见。
C 和 C++ 到底是什么关系?
⾸先 C++ 和 C 语⾔本来就是两种不同的编程语⾔,但 C++ 确实是对 C 语⾔的扩充和延伸,并且对 C 语⾔提供后向兼容的能⼒。对于有些⼈说的 C++ 完全就包含了 C 语⾔的说法还是有点别扭的。
C++ ⼀开始被本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)发明时,起初被称为 “C with Classes” ,即「带类的 C 」。很明显它是在 C 语⾔的基础上扩充了类class等⾯向对象的特性和机制。但是后来经过⼀步步修订和很多次演变(如下图所⽰),最终才形成了现如今这个⽀持⼀系列重⼤特性的庞⼤编程语⾔。
就像经典书籍《Effective C++》⼀开头就说的,现如今我们提到 C++ ,都应该视其为⼀个庞⼤的「语⾔联邦」,最起码包含如下⼏个重要的组成部分:
✪⾯向过程编程
✪⾯向对象编程
✪泛型编程
✪元编程
✪函数式编程
✪ STL标准库
这其中的第⼀部分「⾯向过程编程」,正是 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++ 的学习书籍,最权威的当属 C++ 的发明者 Bjarne Stroustrup ⼤佬所著的《The C++ Programming Language》,但是很明显这本书不适合初学者,更加适合的还得是《C++ Primer》,也很系统全⾯。⾄于再深⼊可以继续阅读诸如《Effective C++》、《STL源码剖析》、《深度探索C++对象模型》等书籍。
如果你想快速掌握C/C++编程,
都是学编程⼩伙伴们,带你⼊个门还是简简单单啦,⼀起学习,⼀起加油~
涉及:编程⼊门、游戏编程、windows编程、Linux编程、Qt、⿊客等等......
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论