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

server/2025/4/1 0:12:46/

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++。反正学习 C 语言就是在学习 C++,怕什么。


http://www.ppmy.cn/server/178495.html

相关文章

轻松迁移 Elasticsearch 数据:如何将自建索引导出并导入到另一个实例

概述 在日常的 Elasticsearch 运维和数据管理中,数据迁移是一个常见的需求。无论是为了备份、升级,还是将数据从一个集群迁移到另一个集群,导出和导入索引数据都是至关重要的操作。本文将详细介绍如何将自建 Elasticsearch 实例中的索引数据…

嵌入式硬件篇---WIFI模块

文章目录 前言一、核心工作原理1. 物理层(PHY)工作频段2.4GHz5GHz 调制技术直接序列扩频正交频分复用高效数据编码 2. 协议栈架构MAC层Beacon帧4次握手 3. 核心工作模式 二、典型应用场景1. 智能家居系统远程控制环境监测视频监测 2. 工业物联网设备远程…

SQL的DCL,DDL,DML和DQL分别是什么

SQL(Structured Query Language)包括以下四种主要语言类别,分别用于不同的数据库操作: 1. DCL(Data Control Language,数据控制语言) 用于控制数据库访问权限和安全。 常见命令: …

Java多线程与高并发专题——Future 是什么?

引入 在上一篇Callable 和 Runnable 的不同?的最后,我们有提到和 Callable 配合的有一个 Future 类,通过 Future 可以了解任务执行情况,或者取消任务的执行,还可获取任务执行的结果,这些功能都是 Runnable…

PHP转GO Day3 函数定义与包管理实践(创建数学工具包)

Day3 函数定义与包管理实践(创建数学工具包) 数学工具包开发问题指南 一、标准包结构示例 # 项目结构(在GOPATH/src外新建目录) my-math/ ├── go.mod # 模块定义文件 ├── mathutil/ # 包目录 │ ├── m…

【数据预测】基于遗传算法GA的LSTM光伏功率预测 GA-LSTM光伏功率预测【Matlab代码#91】

文章目录 【可更换其他算法,获取资源请见文章第6节:资源获取】1. 遗传算法GA2. 长短期记忆网络LSTM3. 基于GA-LSTM的光伏功率预测4. 部分代码展示5. 运行结果展示6. 资源获取 【可更换其他算法,获取资源请见文章第6节:资源获取】 …

数智读书笔记系列022《算力网络-云网融合2.0时代的网络架构与关键技术》读书笔记

一、书籍核心价值与定位 1.1 书籍概述:中国联通研究院的权威之作 《算力网络 —— 云网融合 2.0 时代的网络架构与关键技术》由中国联通研究院算力网络攻关团队精心撰写,是业界首部系统性探讨云网融合 2.0 与算力网络的专著。在云网融合从 1.0 迈向 2.0 的关键节点,本书的…

vue3 获取当前路由信息失败问题

刷新浏览器时获取当前路由信息失败:undefined import { ref, reactive, onMounted } from vue; import { useRoute } from vue-router; const route useRoute();onMounted(()>{// 打印当前路由信息console.log(当前route, route ); // 这里的打印有值console.…