【保姆级】C语言、C++、C#的区别和联系

简介: C++是C语言的扩展,增加面向对象与泛型编程,二者血脉相连;C#虽名含“C”,实为微软2000年推出的独立语言,基于CLR虚拟机,与C/C++无继承关系。三者同居TIOBE前列,但渊源各异。

C语言、C++ 和 C# 都是非常流行的编程语言,通常都位于世界编程语言排行榜(TIOBE)的前 5 名。它们的名字都以字母“C”开头,看起来有着千丝万缕的联系。


不错,C++ 确实是在C语言的基础上发展而来的,它们之间是包含与被包含的关系;但是,C# 就是一门独立的语言了,它和 C、C++ 都没有什么关系。

C++和C语言的关系

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


顾名思义,C++ 就是在C语言的基础上增加了新特性,玩出了新花样,所以才说 Plus;而且有两个 plus,足见 C++ 增加了很多新东西。这就像 Nokia 和 iPhone、手动变速箱和自动变速箱的关系。


C语言是 1972 年由美国贝尔实验室开发成功的,在当时算是高级语言,它的很多新特性都让汇编程序员羡慕不已,就像今天的 Golang 和 Rust,刚出生就受到追捧。C语言也是“时髦”的语言,后来的很多软件都用C语言开发,包括 Windows、Linux、macOS、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 下的微软编译器(Visual C++);
  • 在 Linux 上广泛应用的 GCC 编译器;
  • 跨平台且高性能的 Clang 编译器。


也就是说,你写的 C、C++ 代码都会通过一个编译器来编译,很难说 C++ 是一门独立的语言,还是对C的扩展。

关于C++的学习

C++ 语法繁杂,是最恶心的编程语言,没有之一。如果针对没有任何编程经验的读者写一本 C++ 的书,那将是一项不小的任务,写出来的书也会非常厚。即使这样,也仅仅是在讲语法。


更重要的是,这些知识你很难全部吸收,会严重打击你的信心,失去学习的兴趣。


从“学院派”的角度来说,C++支持面向过程编程、面向对象编程和泛型编程,而C语言仅支持面向过程编程。就面向过程编程而言,C++ 和 C 几乎是一样的,所以学习了C语言,也就学习了 C++ 的一半,不需要从头再来。


没有任何编程基础的读者,我建议先从C语言学起,不要贪多嚼不烂。等你熟悉了C语言,能写出上百行代码的程序了,就对编程有些概念了,这个时候再去了解 C++ 增加的那一部分内容(也即面向对象编程和泛型编程),你就站在了一定的高度,学起来不会那么吃力了。


图:C++ 和C语言的关系

关于C#

C#(发音为 C Sharp)是微软在 2000 年发布的一门新语言,旨在对抗如日中天的 Java。和 Java 类似,C# 也采用了虚拟机机制;但是为了和 Java 进行区分,C# 中的虚拟机叫做公共运行时(Common Language Runtime,CLR)。


其实 C# 刚开始叫 COOL,只是后来和 Java 产生了法律纠纷,被迫改命为 C#。你看看 COOL 这个名字,就知道它和 C/C++ 没有关系了!


C# 虽然借鉴了一些 C/C++ 的语法和特性,但是在底层实现和运行原理上和 C/C++ 是完全不同的,所以笔者才说 C# 是一门独立的语言,和 C/C++ 没有半毛钱关系。


至于为什么叫 C# 而不叫别的,那就不得而知了,难道是为了便于推广,沾一下 C/C++ 的喜气?哈哈~~~


早期的 C# 只能用于 Windows 平台,现在的 C# 已经支持跨平台了,在 Linux、macOS 下也可以使用了。


C# 主要用于桌面 GUI 程序、网站后台、游戏(特别是使用 Unity 引擎)、云计算、大数据等几个开发领域。

总结

C++ 和C语言有着血缘关系。C++ 在C语言的基础上发展而来,增加了很多新特性和新功能,比C语言更加强大,可以认为:C++ 几乎完全包含了C语言,而C语言也可以看做 C++ 的一部分。

C++ 源文件的后缀是 .cpp,C语言源文件的后缀是 .c,你在 .cpp 文件中写C语言代码通常也是没问题的。但是请注意,C++ 仍然舍弃或者改变了极少量的C语言特性,所以在实际开发中,我们最好还是要区分 C++ 和C语言的。

C# 是一门完全独立的语言,它和C语言、C++ 没有半毛钱关系。

相关文章
|
23天前
|
存储 Unix Shell
【最新版】ASCII码一览表,ASCII码对照表(全网最详细)
ASCII(美国信息互换标准代码)是基于拉丁字母的7位字符编码标准,共128个字符,涵盖英文字母、数字、标点及控制符(如NUL、CR、LF等),广泛用于编程与通信。它等同于ISO/IEC 646国际标准。
570 0
localdatetime 比较相等
localdatetime 比较相等
1438 2
|
4天前
|
Linux 程序员 iOS开发
MarkText汉化版下载安装全流程图解(2026整理,附官网安装包)
MarkText 是一款免费开源、跨平台(Win/macOS/Linux)的轻量级 Markdown 编辑器,界面简洁、所见即所得,无需配置即可开箱写作。本文提供带汉化版的最新安装包下载及详细安装指南。
|
17天前
|
安全 Linux 芯片
【万字长文】Ollama下载、安装、配置、使用保姆级教程(2026最新图解)
Ollama 是一款免费开源的本地大模型运行工具,支持 DeepSeek、Qwen 等主流模型,一条命令即可下载运行。2026 最新版 v0.35.1 官方安装包(1.47GB)已提供国内直连下载,纯本地、离线可用、无广告、无隐私泄露风险。
1668 6
|
16天前
|
SQL 网络协议 关系型数据库
Greenplum实时查询分析最佳实践
Greenplum实时查询分析最佳实践看这篇就够啦
85 1
|
16天前
|
SQL 自然语言处理 安全
Elasticsearch 终于能在查询时 JOIN 了
ES|QL 的 LOOKUP JOIN 让查询时关联另一张表成为可能,不用再靠应用层拼或者写入时冗余。
82 2
|
11天前
|
存储 人工智能 算法
AI时代,神话并未消失:人类正在创造新的“数字神明”
AI时代,神话真的消失了吗?本文从人类文明与技术演进的视角出发,提出“算法神谕、数据神学、数字永生”三大结构,并引入“最小认知主干”概念,探讨AI如何重塑人类的知识权威、认知边界与生命延续的想象。当越来越多人开始向AI寻求答案,我们是否正在亲手创造一种新的神话?
|
15天前
|
编译器 Linux C语言
【保姆级】MinGW-w64下载、安装、配置、实战开发一篇搞定(送官方安装包)
MinGW-w64 是一款免费开源的 Windows 原生 GCC 编译环境,轻量(数百MB)、免安装、命令行友好,支持 C/C++ 编译为原生exe,无需VS大体积IDE,完美兼容Linux开发习惯。
339 0
|
23天前
|
算法 网络协议 网络架构
【保姆级】IP地址、MAC地址、端口号的区别/联系(全网最详细)
本文详解网络通信三大核心要素:IP地址(定位设备所在网络)、MAC地址(唯一标识网卡,实现局域网内精准寻址)和端口号(区分同一设备上的不同服务)。三者协同工作,确保数据准确送达目标程序。
128 0
|
23天前
|
网络协议 Unix Linux
socket套接字到底是什么东西(全网最详细,图解)
网络编程核心是让联网计算机交换数据,而socket(套接字)正是实现通信的关键抽象。它在Linux中被视为文件描述符,支持read/write操作;Windows中则用句柄管理。主流分为TCP(SOCK_STREAM,可靠、有序、无边界)和UDP(SOCK_DGRAM,高效、无序、有边界)两类,分别适用于网页浏览与实时音视频等场景。
297 0

热门文章

最新文章