佳缘科技:连续3日融资净偿还累计110.85万元(05-19)
2023年5月19日佳缘科技连续3日融资净偿还累计110 85万元
我们对 "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 scope 3 | int gcd ( a, b ) | ^gcd.c:3:12: error: "b" was not declared in this scope 3 | 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 "{" token 6 | { | ^
这使得在 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::vector
这使用了 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++。
关键词:
2023年5月19日佳缘科技连续3日融资净偿还累计110 85万元
王灿晒照为杜淳庆42岁生日,甜蜜拥吻超浪漫,举止亲密引热议,王灿,甜蜜,拥吻,亲吻,生日,杜淳庆
1、OPPOR11的上市时间是什么时候?最近很多朋友都比较关注这个话题。oppor11什么时候发布?事实上,OP
润滑油含量测定,油品检测化验机构万博检测——专注于工业油检测测试服务!!!检测项目:粘度 水含量 闪点
泰尔齐奇:赛季前难以想象能拿70分终于有望夺冠了,多特,德甲,完胜,泰尔齐奇
1、你好:电脑上操作:打开卖家中心,再点店铺基本设置在店铺标志那里点下,上传图片即可。2、手机上操作:
“我很喜欢打桌球,这次一定能冲进决赛。”参加比赛的曹帆信心满满。近日,苏州市相城区望亭镇四旺村组织辖
5月19日,第十一届中国(湖南)国际矿物宝石博览会(以下简称:国际矿博会)在湖南省郴州市开幕,吸引了来
红星资本局5月21日消息,根据年报,2022年金域医学(603882 SH)实现营收154 76亿元,同比增长29 58%,归母
1、白蛋白与球蛋白比值升高的原因主要是肝硬化。2、肝硬化患者由于合成白蛋白的能力下降,白蛋白会减少,由
现代快报网是由凤凰出版传媒集团旗下的现代快报倾力打造的江苏新闻门户网站,目前在南京、苏州、无锡、常州
比赛现场。组委会供图中国青年报客户端北京5月21日电(中青报·中青网记者梁璇)华夏银行2023密云生态马拉
上海人,北京人,其实不是一个对等的概念。当你讨论上海人的时候,所有参与者不管观点结论如何,他们说的对
1、你所谓的捷凯金融应该是做国外平台外汇电子盘的,首先在国内肯定是不合法的,处在灰色地带。2、其次这种
今日pd990钯金多少钱一克回收价格(2023年05月21日)每日更新
在“身边的消防安全”科普体验活动区,消防员向公众讲解消防法律法规知识,让现场观众零距离了解消防、学习
小龙虾价格几乎腰斩?大规模降价的小龙虾真的是好事吗?,海鲜,肉类,水产,小龙虾,养殖户,淡水龙虾,水生动物
大家好,今日关于【男子目睹前女友与现任同居自杀】迅速上了的热搜榜,受到全网的关注度非常高。那么【男子
(广岛综合电)七国集团(G7)采纳合力打击“经济胁迫”的新倡议,誓言挫败任何要把贸易和供应链“武器化”
一场马拉松般的战斗,虽然国羽队员都很疲惫,但好在最终的结果是完美的,逆境翻盘,队伍继续在家门口前进,
今天来聊聊关于炖牛肉放小苏打容易烂,炖牛肉放什么容易烂的文章,现在就为大家来简单介绍下炖牛肉放小苏打
1、首先点饮水机的俩按钮会掉下来然后点圆桌旁边的火柴人他会走到饮水机旁边捡起红色的放左边绿色的放右边
又有基金管理人宣布停止旗下APP运营。中国人保资产管理有限公司最新公告称,于2023年5月19日起下线移动客户
英超-卡塞米罗倒钩德赫亚神扑曼联1-0伯恩茅斯,卡塞米罗,大卫·德赫亚,伯恩茅斯队,曼联,英超
今天来聊聊关于论述多媒体技术的未来,多媒体技术应用的未来设想论文的文章,现在就为大家来简单介绍下论述