当前位置: 首页>行业 >

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

来源: 东方资讯 | 时间: 2023-05-22 13:16:00 |

我们对“C/C++”这种写法或说法似乎在无形之中早已习以为常,然而,这种做法真的是对的吗?


【资料图】

在今天这篇文章中,有开发者呼吁应该立即停止使用“C/C++”这种说法,因为这属于两种完全不同的编程语言,以下是他解释的原因。

原文:https://brycevandegrift.xyz/blog/stop-saying-c-and-c++/

编译 | ChatGPT

责编 | 苏宓

出品 | CSDN(ID:CSDNnews)

在我记忆中,每当有人提到用 C 或 C++ 编写的项目时,他们常常都会用 C/C++ 这样的说法。对于那些从未接触过 C 或 C++ 的大多数人来说,这可能看起来并不是什么大问题。

然而,问题在于当人们使用这个术语(C/C++)时,他们让 C 和 C++ 看起来像是相似或密切相关的编程语言。

事实并非如此。尽管 C++ 最初是基于 C 创建的,但随着时间的推移,这两种语言已经越来越不相似,并且在许多方面也存在差异。因此,建议停止使用"C/C++"这样的说法,而是明确指出是 C 还是 C++,以避免混淆和误导。

C 和 C++ 非常不同

可能会有人说:“嗯,你可以在 C++ 程序中编写 C 代码,所以从技术上讲,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 不兼容的一个例子是空指针的处理。例如,下面这段程序可以使用 C 编译器(如 GCC)进行编译,但无法使用 C++ 编译器(如G++)进行编译:#include

int main {int *a = malloc(5);return 0;}

这段代码只是给一个整数指针 a 分配了 5 个字节的内存。当使用 GCC 编译这个程序时,它可以正常运行,但如果使用 G++ 编译这个程序,就会返回以下错误:main.c: In function "int main":main.c:4:24: error: invalid conversion from "void*" to "int*" [-fpermissive]4 | int *a = malloc(5);| ~~~~~~^~~| || void*

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

K&R 语法

C++ 与 C之间的另一个重要不兼容性是 C++ 实际上与 K&R 语法不兼容。以下以 K&R 语法书写的函数为例:int gcd(a, b)int a;int b;{if (b == 0)return a;return gcd(b, (a % b));}

使用 GCC 编译时,它会完美地编译通过(如预期的那样),然而使用 G++ 编译时,会出现另一组错误。gcd.c:3:9: error: "a" was not declared in this scope3 | int gcd(a, b)| ^gcd.c:3:12: error: "b" was not declared in this scope3 | int gcd(a, b)| ^gcd.c:3:13: error: expression list treated as compound expression in initializer [-fpermissive]3 | int gcd(a, b)| ^gcd.c:6:1: error: expected unqualified-id before "{" token6 | {| ^

这使得在 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 语言的解决方案看起来像这样:int maximumCount(int *nums, int numsSize) {int pos = 0, neg = 0;for (int i = 0; i < numsSize; i++) {if (nums[i] >0) pos++;else if (nums[i] < 0) neg ++;}return pos >neg ? pos : neg;}

尽管这段代码对于 C 标准来说是相当紧凑的,但它仍然是非常可读的。现在说说 C++ 的解决方案,这个方案有很多变化,所以我将使用一个与 C 足够不同的方案。int maximumCount(std::vectornums) {auto [a, b] = std::equal_range(nums.begin, nums.end, 0);return std::max(std::distance(nums.begin, a), std::distance(b, nums.end));}

这使用了 C++ 标准库中的 vector 和算法。正如你所看到的,这段代码要紧凑得多,但绝对没有 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++ 放在工作描述中,如果这样做,他们只会吓跑有能力的 C 语言开发者。

解决方案

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

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

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

▶10 年 Android 开发者突遭谷歌封号:“从此放弃,并决定开源所有应用!”

▶ 教授误用 ChatGPT 来论文“查重”,学生:不仅挂科了,我差点拿不了毕业证!

▶ ChatGPT App 来了! 返回搜狐,查看更多

责任编辑:

关键词:

 

热文推荐

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

我们对“C C++”这种写法或说法似乎在无形之中早已习以为常,然而,这种做法真的是对的吗?在今天这篇文

2023-05-22

文森特:我们的目标从未改变 热火队一直在努力争夺总冠军|新动态

文森特:我们的目标从未改变热火队一直在努力争夺总冠军,文森特,热火队,从未改变,波士顿凯尔特人

2023-05-22

茜诗迪是哪个国家的品牌_什么档次怎么样-当前头条

简约时尚。茜诗迪品牌在互联网上开设了官方旗舰店茜诗迪旗舰店,让广大网民在网上也能买到与茜诗迪实体店同

2023-05-22

观澜湖观悦与琥珀假日天地周边配套对比分析!海南海口市买房那里好?

观澜湖观悦与琥珀假日天地周边配套对比分析!海南海口市买房那里好?海口市房价会持续上涨吗,海南海口市购

2023-05-22

2023年5月22日云南省粳米批发价格行情-世界热点

2023年5月22日云南省粳米批发市场价格最新行情监测显示:2023年5月22日云南省粳米批发价格均价5 3元 公斤,

2023-05-22

热文:慧博云通:5月19日融资买入143.4万元,融资融券余额9403.01万元

5月19日,慧博云通(301316)融资买入143 4万元,融资偿还205 36万元,融资净卖出61 96万元,融资余额3746 62万元。

2023-05-22

【焦点热闻】城市烟火气 最抚凡人心

  日前,有网友在人民网留言,建议增加“阜阳烟火气”。针对网友的建议,市城管执法局正有序“放手”。 

2023-05-22

2023年打造高效低成本的标题引流策略

对于淘宝新手来说,如何以低成本实现高效引流是一个关键问题。其中,标题的优化是提高产品曝光和吸引点击的

2023-05-22

世界今亮点!攀岩世界杯盐湖城站:邓丽娟女子速度摘铜 骆知鹭获女子攀石第五

新华社北京5月21日电当地时间20日,2023年攀岩世界杯盐湖城站结束了女子攀石和女子速度赛的争夺。中国队邓

2023-05-22

全球关注:除锈的方法有手工除锈和机械除锈两种_除锈的方法

1、除锈的方法有很多的,你可以根据个人情况,选择以下方法除锈,希望能帮到你~~金属除锈:可用马铃薯皮擦拭

2023-05-22

再婚男人靠谱吗?值得约会吗?如果结婚了,以后会幸福吗?

我今年25岁。我大学毕业,长相一般。他今年37岁。我认识了他,并被介绍到他的店里工作。我真的不喜欢与人交

2023-05-22

报告显示确保粮食安全需从增产和减损发力

报告预测,新一轮千亿斤粮食产能提升行动关键在于种子和耕地,主要依靠玉米和大豆,可通过高标准农田建设等

2023-05-22

76人送大礼火箭坐收渔利,马龙愤怒,美媒爆8换2交易

北京时间5月22日,随着湖人、掘金相继战胜各自的对手,2022-23赛季季后赛正式进入紧张的白热化阶段。在漫长

2023-05-22

冰箱除味妙招视频教程 冰箱除味小妙招

今天来聊聊关于冰箱除味妙招视频教程,冰箱除味小妙招的文章,现在就为大家来简单介绍下冰箱除味妙招视频教

2023-05-22

热血足球“益”起来 长沙“小球大爱”首届公益小学生慈善足球赛开赛

新湖南客户端5月21日讯(通讯员王叶玲记者胡旻)为健康加油,为公益助力。5月21日上午,“热血足球益起来”

2023-05-21

分享福彩3D晒票第131期,人生给你考验,你就还它经验_全球热议

你为何不能实现梦想?你的心灵飘忽不定,你的双腿无法移动。只有现实才能抗拒理想。也可能很幼稚。只有舍弃

2023-05-21

乐橙云服CEO徐瀚:让保险产品的支付可视化、可感知 当前速读

【大河财立方记者徐兵实习生刘豫】“我们前段时间推出了一款护理险,创新地通过智能电表和水表来检测老人在

2023-05-21

动态焦点:大健康战略棋至中盘!中国太保发布新蓝图 战略布局新思路浮现

暗红衬衫搭配牛仔裤,运动衫搭配连帽外套……5月20日,太保寿险总经理蔡强和太保产险总经理曾义以健康休闲

2023-05-21

中甲!丹东升至第四,青岛仅丢1球领跑,广西队排名第二 世界快讯

2023赛季中国足球甲级联赛,第六轮在5月21日继续角逐。三场精彩较量,广西平果哈嘹在客场击败无锡吴钩,青

2023-05-21

丁肇中谈科研之路:物理研究是一辈子唯一最重要的事-聚焦

文 羊城晚报全媒体记者何昱、李钢、邹丽珍、张豪图、视频拍摄 羊城晚报全媒体记者付怡视频剪辑 羊城晚报全

2023-05-21

资讯

因地制宜放“大招” 多地市密集出台稳经济措施

当前,受新冠肺炎疫情等因素影响,我国经济发展仍面临严峻挑战。5月25日,国务院召开全国稳住经济大盘会议,要求把稳增长放在更突出位置。5

2022-06-20     
北京推出14条秋游文化线路

金秋时节,北京市文化和旅游局以赏银杏品文化为主题,推出14条“叶落的季节——漫步北京赏银杏品文化主题线路”,邀市民和游客以步行、骑行

2021-10-27     
基因编辑发力 培育高质量人源化供体猪

此次人体试验,仅仅验证了基因编辑猪克服异种器官移植的超急性排斥反应,还需解决延迟性排斥反应、消耗性血栓等问题。但通过这次试验,能更

2021-10-27     
中国经济高质量发展步伐稳健 长期向好基本面未变

在全球疫情走势和经济走势趋于复杂的背景下,中国经济巨轮将驶向何方,举世关注。2020年10月26日至29日,党的十九届五中全会在京举行,明确

2021-10-27     
南美解放者杯决赛允许近4.5万观众入场

南美洲足联主席多明格斯25日与今年解放者杯决赛对阵的两支俱乐部负责人会晤,宣布决赛现场观众人数增加到球场容量的75%,即近4 5万人。今年

2021-10-27     
22年从警生涯 面对荣誉他说不要给我报功

9月24日,时任安徽省安庆市公安局迎江分局刑警大队大要案中队中队长周磊因在工作中激烈搏斗引发心源性猝死,倒在了工作岗位上,经医院抢救

2021-10-27