不要再用 C/C+的这种说法了!

admin 2025-11-10 阅读:4 评论:0
在我记忆中,每当有人提到用 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 代码whatsapp网页版,所以从技术上讲,C是 C++ 的一个子集。”

但事实上,许多其他编程语言(如 Zig、Go、Nim 等)也可以编写 C 代码,并且几乎所有其他语言都有与 C 的互操作性。

因此,如果仅仅因为可以在 C++ 中使用 C 代码,就将 C 称为 C++ 的子集,那么同样的逻辑也可以应用到其他语言上,是否应该把 Zig、Go 和 Nim 称为 C/Zig、C/Go 和 C/Nim 呢?

显然这种做法不合适。

有人曾说,“C++ 只是带有类的 C 语言!”

其实说这句话的人显然从未使用过 C++。C++ 具有与 C 语言不同的标准库、实现。在最初开发 C++ 时,它只是在 C 语言的基础上添加了类的特性,但自那时起,C++ 已经实现了与 C 语言不同的功能。

C++ 与 C 不兼容的一个例子是空指针的处理。例如,下面这段程序可以使用 C 编译器(如 GCC)进行编译,但无法使用 C++ 编译器(如G++)进行编译:

这段代码只是给一个整数指针 a 分配了 5 个字节的内存。当使用 GCC 编译这个程序时,它可以正常运行,但如果使用 G++ 编译这个程序,就会返回以下错误:

发生这种情况的原因是 malloc 函数返回一个空指针(void pointer),而 C++ 不能将空指针直接转换为整数指针,除非它明确地转换为整数指针。

C++ 与 C之间的另一个重要不兼容性是 C++ 实际上与 K&R 语法不兼容。以下以 K&R 语法书写的函数为例:

使用 GCC 编译时,它会完美地编译通过(如预期的那样),然而使用 G++ 编译时,会出现另一组错误。

这使得在 C++ 中使用 K&R 语法几乎不可能,除非你按照 ASCII C 的格式编写函数参数。(我知道很少有人关注 K&R 语法,但我认为这仍然是一个重要的区别)。

还有许多其他在 C 中无法转移到 C++ 的内容,例如复数、默认返回类型等等,但我认为你已经对此有所了解了。如果让 C 与 C++ 一起使用时,这些不兼容性并不会破坏整个 C 语言,但这些小差异会逐渐累积。

初学者来说很困难

不区分 C 和 C++ 还会产生排斥新用户的副作用。许多初学者程序员被“C/C++”这个术语引导,认为它们基本上是相同的语言。另外,也有许多教程被标榜为“C/C++教程”,进一步加深了混淆。

这也可能使 C 初学者退避三舍,让他们认为要理解 C 必须先理解 C++ 的复杂性(这实则完全没必要)。我以前也曾陷入这个陷阱,还有很多其他人。C 实际上是一种非常简单的编程语言,而 C++ 则不是。

C 和 C++ 程序员非常不同

随着年复一年引入的新的 C++ 标准,如 C++11、C++20 等,C++ 程序员获得了更多在标准 C 中不存在的工具和函数。这通常导致现代 C 程序比现代 C++ 程序具有更多的代码行数,然而这意味着现代 C 通常比现代 C++ 更易读。

以下是来自 LeetCode 的一个示例问题。解决方案可能不同,但大多数 C 语言的解决方案看起来像这样:

尽管这段代码对于 C 标准来说是相当紧凑的,但它仍然是非常可读的。现在说说 C++ 的解决方案,这个方案有很多变化,所以我将使用一个与 C 足够不同的方案。

这使用了 C++ 标准库中的 vector 和算法。正如你所看到的whatsapp web,这段代码要紧凑得多,但绝对没有 C 语言代码的可读性。尽管 C 语言的解决方案可以被 C++ 编译器编译,但我想强调的是它们之间的差异有多大。这只是一个例子,说明 C 和 C++ 程序员在编程方面已经慢慢分离。

许多 C 程序员不愿意接触 C++

我很确定现在每个人都知道 C 程序员的刻板印象,唯一的问题是它是真实的。很多 Suckless 用户和开发者在他们的程序中只使用 C 和 POSIX shell。Cat-v 认可 C 和类 C 语言,但鄙视 C++。即使是 Linux 和 Git 的创造者 Linus Torvalds,也不愿意碰 C++。

如果雇主只想寻找 C 语言开发人员,那么他们更不应该把 C/C++ 放在工作描述中whatsapp网页版登录,如果这样做,他们只会吓跑有能力的 C 语言开发者。

图片

如果你指的是 C 语言程序或程序员,就说 "C"。如果你指的是一个 C++ 程序或程序员,就说 "C++"。如果你指的是两者分开使用,就说类似的东西:

C 和 C++

C++ 与 C

千万不要写——C/C++。

只有当你将 C 和 C++ 一起使用时,才可以说是C/C++。

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

分享:

扫一扫在手机阅读、分享本文

热门文章
  • 详细指南:WhatsApp国内使用方法全攻略-下载安装、注册登录及功能使用攻略

    详细指南:WhatsApp国内使用方法全攻略-下载安装、注册登录及功能使用攻略
    一、下载与安装WhatsApp WhatsApp是一款全球使用范围极广的即时通讯软件,不仅可以实现文本聊天,还能进行语音、视频通话WhatsApp中文版,发送文件等功能。由于众所周知的原因,国内用户想要下载和安装WhatsApp可能会遇到一些困难。不过,只要按照以下步骤操作,就能顺利完成WhatsApp的下载和安装。 首先,我们需要解决的是下载问题。由于WhatsApp在国内的应用商店无法直接下载,所以我们需要寻找其他的下载途径。Android用户可以选择到各大安卓市场搜索下...
  • 苹果IOS5.1.1机完美越狱

    苹果IOS5.1.1机完美越狱
    越狱工具下载:(需手动复制: http://bbs./read-htm-tid-4804612.html ) 详细的越狱教程: Absinthe 2.0.4的越狱方法与Absinthe 1.0的越狱方法完全一样,非常简单的“傻瓜一键式”。不过这里绿毒有说明,最好重新刷固件。支持越狱设备IOS5.1.1的固件下载地址请点击本站的IOS固件下载,看下图: 下载完固件之后,把设备连接iTunes,开始刷固件。你也可以选择不刷,但是在越狱的过程之中,新的系统在越狱时会比较的顺利,...
  • 电脑微信的聊天照片文件在哪里微信图片保存电脑哪个文件夹

    电脑微信的聊天照片文件在哪里微信图片保存电脑哪个文件夹
    1. 怎么找到微信聊天图片在哪个文件夹里 图片保存路径:/storage/emulated/tencent/MicroMsg/WeiXin/文件夹,这个是完整路径。而在文件夹中只需要找到/tencent/MicroMsg/WeiXinWhatsApp中文版,就可以了,前面两个文件夹是系统根目录。以下是保存及查找图片的方法步骤介绍。 第一步、找到桌面的微信APP,直接点击打开这个微信的APP。 2. 电脑微信图片保存在哪个文件夹 个人微信文件夹。 电脑版微信聊天的图片,都保存到...
  • Windows 11版WhatsApp将从UWP/Native切换回WebView2打包模式

    Windows 11版WhatsApp将从UWP/Native切换回WebView2打包模式
    Meta(最近更名为 Meta AI)悄然宣布,WhatsApp 将在 Windows 11 上放弃 UWP(WinUI)WhatsApp中文版,退回采用基于 Chromium 的容器。这意味着 WhatsApp 又回到了几年前的样子。由于 web.whatsapp.com 一直领先于 Windows 应用开发,它确实拥有一些新功能,但速度更慢,占用更多内存。 如果独立开发者因为无力维护所有平台的代码库而选择 Web 应用程序,那是一回事,但当像 Meta 这样价值万亿美元...
  • 小米下載WhatsApp的完整指南:安装与使用注意事项

    小米下載WhatsApp的完整指南:安装与使用注意事项
    综上所述,确保您的小米手机具备以上条件,将有助于您顺利下载和安装WhatsApp,享受便捷的通讯服务。在满足这些条件后,您就可以按照后续步骤进行WhatsApp的下载和安装。 2. 下载和安装WhatsApp的具体步骤 在小米手机上下载和安装WhatsApp的具体步骤相对简单,但需注意一些特殊情况。首先,确保你的手机系统已更新到最新版本,以保证最佳的兼容性。由于安卓手机商店内无法直接找到WhatsApp,你可以通过APKPure等第三方应用商店进行下载。打开APKPure应用...