C语言和C++到底有什么关系?

C++ 读作"C 加加",是"C Plus Plus"的简称。

顾名思义,C++ 就是在 C 语言的基础上增加了新特性,玩出了新花样,所以才说"Plus",就像 Win11 和 Win10、iPhone 15 和 iPhone 15 Pro 的关系。

C 语言是 1972 年由美国贝尔实验室开发成功的,在当时算是高级语言,它的很多新特性都让汇编程序员羡慕不已,就像今天的 Go 语言,刚出生就受到追捧。C 语言也是"时髦"的语言,后来的很多软件都用 C 语言开发,包括 Windows、Linux、Mac OS、MySQL、Python 等。

但是随着计算机性能的飞速提高,硬件配置与几十年前已有天壤之别,软件规模也不断增大,很多软件的体积都超过 1G,例如 PhotoShop、Visual Studio 等,用 C 语言开发这些软件就显得非常吃力了,这时候 C++ 就应运而生了。

C++ 主要在 C 语言的基础上增加了面向对象和泛型的机制,提高了开发效率,以适用于大中型软件的编写。

C 和 C++的血缘关系

早期并没有"C++"这个名字,而是叫做"带类的 C"。"带类的 C"是作为 C 语言的一个扩展和补充出现的,目的是提高开发效率,如果你有 Java Web 开发经验,那么你可以将它们的关系与 Servlet 和 JSP 的关系类比。

这个时期的 C++ 非常粗糙,仅支持简单的面向对象编程,也没有自己的编译器,而是通过一个预处理程序(名字叫 cfront),先将 C++ 代码"翻译"为 C 语言代码,再通过 C 语言编译器合成最终的程序。

随着 C++的流行,它的语法也越来越强大,已经能够很完善的支持面向对象编程和泛型编程。但是一直也没有诞生出新的 C++ 编译器,而是对原来 C 编译器不断扩展,让它支持 C++ 的新特性,所以我们通常称为 C/C++ 编译器,因为它同时支持 C 和 C++,例如 Windows 下的微软编译器(cl.exe),Linux 下的 GCC 编译器。

也就是说,你写的 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 语言就是在学习 C++,怕什么。

相关推荐
洛阳泰山1 小时前
基于 Easy Rules 的电商订单智能决策系统:构建可扩展的业务规则引擎实践
java·开发语言·规则引擎·easy rules
kushu72 小时前
Java 包
java·开发语言
专注VB编程开发20年2 小时前
IIS Express中可以同时加载并使用.net4.0和.NET 2.0的 DLL
c++·windows·microsoft·c#·vb.net
xiaobobo33302 小时前
C语言中关于普通变量和指针变量、结构体包含子结构体或包含结构体指针的一些思考
c语言·开发语言·结构体指针
光头闪亮亮2 小时前
C++凡人修仙法典 - 散修版
c++
java1234_小锋3 小时前
周学会Matplotlib3 Python 数据可视化-绘制折线图(Lines)
开发语言·python·信息可视化·matplotlib·折线图·matplotlib3
java1234_小锋3 小时前
一周学会Matplotlib3 Python 数据可视化-绘制直方图(Histogram)
开发语言·python·信息可视化·matplotlib·matplotlib3
拭心3 小时前
一键生成 Android 适配不同分辨率尺寸的图片
android·开发语言·javascript
Kyln.Wu3 小时前
【python实用小脚本-182】Python一键爬取今日新闻:5分钟生成Word+CSV——再也不用复制粘贴
开发语言·python·word
沐知全栈开发4 小时前
《C 指针》深度解析
开发语言