我用C和C ++编写了大量代码,但没想到C是第二大流行语言,仅次于Java。

TIOBE编程社区索引

我很好奇为什么在这个OOP时代,C仍然如此受欢迎?请注意,在前5种流行的编程语言中,有4种是“现代的”,面向对象的语言。

现在,我同意您可以在C中使用OOP,但这有点痛苦。和优雅(至少可以与C ++相比)。那么,是什么使C如此受欢迎?是效率吗?低级绝大多数已经存在的库或其他库?

评论

电子游戏,嵌入式系统,硬件编程(固件),操作系统等。

请注意,您只能得到测量的结果-对于TIOBE,流行的搜索引擎上+“ <语言>编程”的命中数。博客文章“为什么没人再进行C编程了”在该索引中计入了C。哎呀,即使这个问题也可能在Google收到后立即解决。

OOP的年龄?这是一个非常大胆的声明。

您有一种错觉,认为OOP是灵丹妙药,应该很快就失去它,OOP没有什么特别的或“好的”,它只是许多代码组织策略之一。

@DeadMG:锅,见水壶。 TIOBE的数据可能并不可靠,但是您关于“它不受欢迎”的秃顶断言没有任何来源或引证。如果您要质疑问题背后的假设,请至少提供一些证据来支持它。

#1 楼

造成这种情况的一些因素:


C无处不在。无论使用哪种平台,都可以使用C。
C是便携式的。编写一个干净的C,然后在其他平台上进行最少的修改即可编译-有时甚至可以立即使用。
C已经存在了一段时间。在UNIX征服世界的时代,C(首选的UNIX编程语言)在其世界中享有统治地位,并成为编程世界的通用语言。可以期望任何认真的程序员至少对C块有所了解。对于大多数其他语言而言,情况却并非如此。
C仍然是UNIX和UNIX风格系统的默认语言。如果您希望图书馆在开源领域取得成功,则需要充分理由不使用C。这部分是由于传统,更是因为C是您可以放心地假定所有类似UNIX的语言都支持的语言。系统。用C编写库意味着可以最大程度地减少依赖性。
C很简单。它缺乏复杂的OOP或功能性语言的表达能力,但其简单性意味着可以快速上手。
C具有多种用途。它适用于嵌入式系统,设备驱动程序,OS内核,小型命令行实用程序,大型桌面应用程序,DBMS,实现其他编程语言以及几乎所有您能想到的其他事物。
C很快。大多数C实现直接编译为机器代码,并且程序员对机器级别的操作具有完全的控制权。没有解释器,没有JIT编译器,没有VM或运行时-只是代码,编译器,链接器和裸机。
C是“免费的”(啤酒和语音方面)。没有一家拥有和控制该标准的公司,有几种实现可供选择,使用C没有版权,专利或商标问题,并且一些最佳实现是开源的。
C有很大的发展动力。该语言已经流行了几十年,因此,有大量的应用程序,库,工具以及最重要的社区来支持该语言。
C已经成熟。引入重大更改的最后一个标准是C99,并且大多数与以前的标准向后兼容。与更新的语言(例如Python)不同,您不必担心很快就会发生更改。
C是兼容的。大多数语言都具有与C对话的绑定。这意味着人们可以使用标准的调用约定在C中开发一个库,并确信几乎任何其他语言都可以链接到该库。仅列举几种流行的语言:C#,Java,Perl,Python,PHP都可以轻松链接到C库。
C功能强大:如果该语言无法执行某些操作,则所有流行的编译器都允许嵌入汇编器代码可以执行硬件可以执行的任何操作。通过与上述有关兼容性的观点进行传递性结合,这意味着C可以充当高级语言与程序集的“裸机”之间的联络人。


评论


我认为并非所有论点都是正确的。 1)C无处不在。 C ++和C一样普遍,因为存在C ++到C的编译器。 2)C是便携式的。与C ++相同。 3)。 C已经存在了一段时间。与C ++相同。 4)。 C是通用的。与C ++相同。 5)C快。与C ++相同。 6)。 C是“免费的”。与C ++相同。 7)。 C有很大的发展动力。再次与C ++相同。 8)C已经成熟。与C ++相同。因此,您实际上不回答这个问题。

–康斯坦丁·索洛玛托夫(Konstantin Solomatov)
2012年3月24日19:25



C11是最新标准,而不是C99。并不是每个人都使用'89确实重要。

– Pubby
2012年3月24日19:32

@KonstantinSolomatov:如果您正在编写将被其他人使用的库,请帮个忙,用C而不是C ++编写。如果您不能这样做,请至少编写一个C API。宇宙中的一切都可以以某种方式链接到C代码,通常只需很少的精力。相比之下,尝试从其他C ++代码(更不用说其他语言)调用C ++代码时,经常会遇到主要的ABI问题。

–丹尼尔·普赖登(Daniel Pryden)
2012年3月24日20:43

@KonstantinSolomatov-需要C ++到C编译器的事实证明C是无处不在的。

–甜蜜地
2012-03-25 7:58

@KonstantinSolomatov:请不要再认为C是C ++。 C没有闭包。 C的某些扩展确实可以(例如,由gcc系列编译器实现的扩展)可以,但是C本身不可以(即,它不在原始K&R规范或任何最终的C标准中)。

–研究员
2012年3月29日在21:35

#2 楼

我一直倾向于将C的普及归咎于对通用汇编语言的需求。它在机器级别的特殊性,标准化和极高的可移植性的结合,使C可以充当事实上的通用汇编语言,因此,我怀疑C的作用将无限期地继续。

我应该提到当OOP作为一种“最终模型”出现在编程课程中时,我总是感到有些惊讶,这是良好编程的唯一可能终点。与编程的许多其他方面一样,OOP的价值是许多竞争因素之间的折衷,包括人脑如何组织信息,社会团体如何长期支持软件,以及在面向对象编程的情况下,某些深层方面关于宇宙本身是如何工作的。

最后一点值得一提。如果您对物理级的探索感兴趣,请阅读更多内容,以了解某些编程风格为何存在,它们如何协同工作以及随着我们对此类概念的进一步扩展而世界未来的发展方向。

物理学中的物体是随时间保持可识别的连贯性的任何事物。这样一来,像我们这样的简单生物就可以只用少量的碎片就可以代表物体,而又不会严重危害我们的生存。但是从广义上讲,要使这种简化变得容易和普遍,您必须做的正确的事情数量非常多。作为人类,我们不会考虑太多,因为坦率地说,如果事实并非如此,我们就不会在这里。

听起来太抽象了?真的不是。例如,想像一下,如果您遇到的不是快速行驶的等离子场,而是瞬间移动的物质以大范围的速度运动,那么试图导航到朋友家的路上。这样的情况可能会相当深入地挖掘社交机会,是吗?我们需要对象,我们是对象,并且对象的存在为我们提供了一个极大且至关重要的简化我们周围环境的级别。

所以让我们将所有这些都带回软件中去。

好,一方面,这意味着在软件中定义“好”对象的真正应该是类型您正在处理的数据随时随地都可以支持可识别的持久性。

通过定义,可以轻松识别最简单的OOP形式。它们只是通过使用已经由某些“真实”真实物体(例如人,房子或汽车)“附加”或定义的数据来解决这一问题。即使在今天,这仍然经常是人们在软件课程中获得的对象的唯一定义。这太糟糕了,因为即使是琐碎的面向对象的程序也需要比它更广泛的定义。所谓“永生”,是指至少短暂存在于现实世界中的一个明确定义的实体或集合,然后分散而不再作为具有物理意义的集合而存在的事物。座谈会就是一个很好的例子:座谈会作为一个定义明确的场所和人物集合存在了很短时间。但是可惜的是,即使是最好的会议也必须结束,并且组成会议的各个部分都转到其他活动上。

但是,通过使用计算机和网络,我们可以通过捕获和维护作为软件对象的内存来使这样的短暂研讨会看起来像一个长期对象。我们使用计算机和数据库所做的许多事情都可以使这种瞬态事件永生化,在这种情况下,我们实际上试图通过捕获和扩展物理上不可能存在的方式来丰富我们的真实宇宙。例如,您最近看过真正的Pandora吗?对现实世界作品的这种捕获和扩展有助于以非凡的方式丰富和扩展我们自己的生活,经济和选择。对我来说,这是面向对象编程的中心地带,它曾经并一直在其中产生着最显着的影响。

OOP的最后一类包括与之没有紧密联系的对象外部事件,而是支持使用来自现实世界中的永生对象来支持我们对现实的不断扩展的基础结构。在这里,您可以一路下降到计算机的(半)金属,创建持久的现实,像现实世界中的化学元素一样可以快速有趣地组合起来,以构建新的内部世界。移动计算帮助促进了这种高度重组的方法的发展,这种方法在许多方面都再次模仿了物理世界的重组特征。这也很困难:随着时间的流逝,似乎一个不错的选择可能证明是一个出乎意料的糟糕选择,通常是因为它最终阻碍了多样性和扩展而不是支持它。

最后一类还指出了仅使用一种模型进行编程的风险,因为就像现实世界一样,编程世界也需要与相对不变的对象不太吻合的过程。地球充满了物体,但是太阳充满了高度动态的能量流,最终需要这些能量流来“驱动”低能量地球上的物体和活动。同样,在创建计算世界时,有些情况下您必须处理流程和转换以及快速变化的上下文,尽管它们本身并不很像对象,但是对于实现更高级别使用的更简单,更人性化的对象绝对至关重要。并非偶然的是,在内核级别完成的许多编程都不明显是对象式的,或者它往往严重依赖于像C这样的面向处理的语言。这些是更深层次的领域,可以补充我们在计算机生成的世界中看到的引人入胜的多样性。试图将它们强制为纯对象模型可能有点像告诉太阳,它需要重新组织为数十亿个整洁的壁炉对象,以便我们能够从人类至上的角度更轻松地理解和导航。

OOP可能会出错的另一个领域是过分关注旧对象概念。

现实世界中的物体,尤其是生命物体,具有以惊人和复杂的方式与环境交互的绝对惊人的能力。相互查看的可组合窗口小部件,进行兼容性和完整性检查,甚至可能发现一些新的交互方式比我们倾向于的简单框架和简单继承方案更接近对象的实际生物学概念。在代码级别专注于(通常是必要的!)。这是网络世界中对象增长的领域之一,更像是“类似代理”的方法,即使在编程本身内,对环境的反应性仍是常态。

对我的“批判”也是如此哎呀!不过,尽管如此,我希望我已经指出了为什么创建一个更加丰富的网络世界意味着包含各种编程风格,而不是假设只需要一个。我的感觉是,无论我们现在做什么工作多么平凡,真正有趣的东西还没有出现!

评论


我敢肯定,“只有在您对物理级的探索感兴趣的情况下,请进一步阅读”部分中有很多人退出。我很高兴没有。这种想法动摇了我们理解的基础,并且可能是我们取得显着进步的唯一途径。感谢您的阅读。

–马特·埃施(Matt Esch)
2012年3月24日23:19



注册该站点只是为了能够投票-这个深思熟虑的宏伟答案。 =)

– sgorozco
13年5月8日在16:15

符合您的想法,我从事编程已经有一段时间了,并成为了O​​OP狂热者,因为当我采用它时,我真的看到自己的编码技能得到了极大的提高。但是经验告诉我,强迫一切成为对象确实是有害的。我现在不喜欢对象到关系的映射工具(有点混乱)或完整的对象图序列化方案,与简单的二进制协议相比,该方案消耗了1000%的带宽,而简单的二进制协议只是通过有线方式发送适当数量的二进制数据,而此时此刻。感谢您的阅读。

– sgorozco
13年5月8日在16:33

这个答案也是为什么我们仍然需要SQL的答案!

–HLGEM
13年8月13日在15:42

inf3mo,要点!这些天,我戴着很多物理帽子,并且我一直在试图说服物理学家,“经典”(物体!)物理学比观察者更依赖观察者,更多地基于人类的感知和语言,而不是量子力学。想想看:即使计数需要对什么类型的“对象”或是否不是该类型的“对象”做出复杂的决定,甚至手指和脚趾的计数(最近见过原子上相同的手指吗?)。因此,正如您刚刚指出的,对象甚至与智能的定义有着深远的联系。 C仅使用计数和组概念即可轻松实现。

–特里·布林格(Terry Bollinger)
20-04-29在13:59

#3 楼

首先,尽管关于此的任何教条都已普及,但您并不需要所有内容都使用OOP。与Java不同,C允许函数指针甚至闭包,这为函数式编程打开了大门,并解决了OOP句柄的相当一部分问题,因为它提供了依赖注入的方法。正如sglib证明的那样,谨慎使用宏实际上可以创建一些非常好的东西。

以一种奇怪的方式,人们可以将C视为Java和C ++之间的良好折衷。请注意,我并不是说C两者都是混合的。但是与Java相比,它是一种功能强大的语言,而与C ++相比,它具有可管理的复杂性。

这是一种古老的语言,已经变得可靠和一致,而实际上并没有变得更加复杂。除此之外,它拥有巨大的生态系统,并且可以在任何地方运行。

评论


函数式编程很棒,对此没有异议。但是C对于函数式编程来说是一种相当糟糕的语言。闭包/块是不可移植的黑客,语法丑陋(我敢打赌,还有陷阱)。即使忽略所有这些,您仍然必须关心内存管理。 C是一种有用的语言,但是像使用任何其他语言一样,C语言使您的生活变得更加艰难,如果您滥用它来使用不是为这种语言而设计的范式,您的生活就会变得更加艰难。您也可以用Java模拟函数式编程(请参阅Guava),但这也不好。

–user7043
2012年3月24日13:59

如果没有垃圾收集器,就很难以功能样式进行编程。

–康斯坦丁·索洛玛托夫(Konstantin Solomatov)
2012年3月24日19:28在

@KonstantinSolomatov:首先,这是非常主观的。其次,如果需要,可以将垃圾回收添加到C中。

–back2dos
2012年3月24日20:53

如果您想在Java和C ++之间进行折衷,请尝试Obj-C :)绝对每个C / C ++程序员都应该尝试一下。

–苏丹
2012年11月4日15:30

#4 楼

C具有ABI(应用程序二进制接口),C ++没有。在某些情况下,这使C比C ++更有用。如果我要编写一个库并且能够将二进制文件运送给其他人使用,那么C ++是完成这项工作的错误工具。如果我要编写将被其他语言再次使用的库,C是完成这项工作的正确工具。我从未听说过不支持C的FFI(外函数接口)的语言,另一方面,如果使用不同的编译器,则C ++不能与用C ++编写的库一起使用。

归结为C,填补了C ++不适合的角色。

评论


嗯.. C,番茄和奶酪卷!

– DeadMG
2012年3月24日21:02



好吧,C ++确实有一个ABI。只是C ABI坚如磐石,而C ++却经常改变。再加上很多C ++模板已被编译到正在使用的应用程序中,因此您无法对其进行更新。当所有功能都隐藏在函数调用之后时,可以修复库并保持应用程序正常运行。

– Jan Hudec
13年8月13日在12:00

#5 楼

嵌入式系统和驱动程序通常使用C进行编程。此外,还有大量仍在维护和扩展中的旧式C系统。

评论


是的,C在所有程序上运行。而且它是一种非常容易学习的语言(与c ++相比)。

–本杰明B
2012年3月24日12:38

#6 楼

与诸如C ++或Java之类的语言相比,使用C的一个优势是引擎盖下没有发生很多魔术。分配项目时不运行构造函数,而对象超出范围时则不运行析构函数。没有名称修饰,也没有vtables。性能更容易预测;您不必担心垃圾收集器会中断例程并取消其时间安排。

构造函数,析构函数,名称修饰,vtables,垃圾收集器等可以减轻您编写的代码中的某些复杂性,但是随后,这种复杂性成为语言本身的一部分,而您所需要的却很少无法控制它。您可能会花费更长的构建时间(烦人的但可以容忍的),更大的运行时内存占用空间(可能可以容忍或可能无法容忍)或性能降低。使用C,您可以消除一些复杂性,直到剩下所需的功能为止。

例如,C ++ string数据类型比C风格的字符串容易使用数光年,但是它是一段相当沉重的代码,给图像大小增加了很多。我很少见过有人在任何一个程序中都充分利用string的功能。 C风格的字符串虽然较难使用,但对运行时间和图像大小的影响却较小,因此,针对特定问题,它可能更具吸引力。

评论


运行时间的惩罚是胡说八道。 C字符串(以Null结尾)比C ++字符串效率低得多。而且,只要您不拖拽整个std,字符串类就可以像C一样紧凑。

– Pubby
2012年3月24日19:41



如果您静态链接CRT时,不会删除未使用的字符串中未使用的函数的工具链是不值得的。

–比利·奥尼尔(Billy ONeal)
2012年3月24日20:08

愚蠢的是,我使用的库中std :: string不够复杂。如果您真的很认真地考虑字符串,无论是在性能还是功能上,您都可以重新使用C并自己重新做一遍,尽管不能肯定地使用普通的旧字符。 (即使您期望它们很复杂,字符串也非常复杂。)

–研究员
2012年3月29日在21:54

@DonalFellow有趣。这正是C标准总是放弃字符串和哈希表之类的原因的原因,有时它们的缺失会激怒我。

–工程师
2015年12月8日10:06



@ArcaneEngineer:C中基本缺失的数据类型是“ T []切片”类型,它将组合T *和size_t,可以像数组一样被索引,可以分解为T *,并且可以隐式转换为任何T [n]类型(其大小由编译器自动提供)。这种类型可以在很多情况下允许进行自动边界检查,而在其他情况下则不可能进行自动边界检查,同​​时使许多代码更清晰易读。

–超级猫
18年7月2日在19:02

#7 楼

在气动锤(空气锤)时代流行手动锤的原因是:C仍然是某些工作的正确工具。

#8 楼

简单,一致和精确。

很简单-您不需要复杂的开发环境,庞大的库或虚拟机。

它是一致的-大多数C十年前写的可以今天进行编译。

精确-让您深入了解机器的水平,了解所需的内存位置。这对于性能和嵌入式硬件非常有用。

并不能满足所有需求,但它仍然是有用的工具。

评论


更好的是,十年前编译的代码很有可能在今天执行。

–研究员
2012年3月29日21:55

@DonalFellows:而且,对于使用插件的应用程序而言,今天的应用程序很有可能会编写,构建和发布(以可执行形式)的应用程序将能够使用通过尚未使用的构建工具编译的插件设计尚未。

–超级猫
18年7月2日在18:55

#9 楼

我从另一个答案中引用了两点,因为它们准确地说明了我仍不时使用C的原因(尽管这不是我选择的主要语言):


C是简单。它缺乏复杂的OOP或功能性语言的表达能力,但其简单性意味着可以快速上手。
C已经成熟。引入重大更改的最后一个标准是C99,并且大多数与以前的标准向后兼容。与更新的语言(例如Python)不同,您不必担心很快就会发生更改。

我认为这是真的。我在早期的夜里学习了C:它很简单,关键字和构造很少,大部分工作是由图书馆完成的。然后我几年没有使用C了。在2002年左右,我需要快速实现算法,我安装了C编译器并实现了它。我知道这门语言,我知道这有什么用处,它有什么用处(我永远不会用C语言实现Web应用程序!),当我需要它时,它就在那里。毫不奇怪。

使用C ++,我有不同的经历。我是在1995年左右学到的,这意味着从命令式到OOP的重大转变。大!直到1999年,我才将其用于多个项目。几年来,我一直没有使用C ++,当我再次使用它时(2008年),我发现该语言中已经有很多新功能,甚至还有更多计划(同时在C ++中引入) 11)。我感到必须重新学习该语言。

作为开发人员,我更喜欢成熟,稳定的语言。我喜欢学习一种语言,了解它的设计原理,有什么用,并在我认为这是工作的正确工具时使用它。
我也喜欢学习不同的语言并选择适合我需要的语言(C,C ++,Java,Scala,Haskell等)。我不喜欢的是必须一次又一次地学习同一语言,因为它会不断发展,而且永远不会成熟。

恕我直言,一种编程语言应具有清晰,连贯且稳定的设计。我喜欢尼克劳斯·沃思(Niklaus Wirth)这样的设计师的方法:每当他感到需要另一种语言时,便设计了一种新语言(Pascal,Modula-2,Modula-3,Oberon)。我不喜欢每隔5到10年就会发生重大变化的语言:它们就像移动的目标,我从不认为应该花时间来深入学习它们,因为我现在正在学习的版本可能会在几个版本中过时了不管怎么说,多年。

从这个意义上讲,C是IMO的赢家:它对某些应用程序有利,而对其他应用程序则不太合适,但是它具有简单且相对稳定的优点。

#10 楼

令我惊讶的是,没有人提到“更糟”。至此已有20多年的历史了,但仍然值得一读。尽管有时会有些嘲讽,但它很好地概述了权宜之计通常如何以及为何胜过理想的原因,并使用C(与LISP相对立)作为其中心示例之一。

评论


我把“更糟但更好”归类为英语,PHP,Windows。麦当劳。尽管我仍然羡慕/喜欢西班牙语,Python,Linux和Artisan French Cooking;尽可能(如果不是通常的话)。

–雷神召唤师
2015年10月6日23:05

#11 楼

您可能想问为什么尽管使用C编译器时通常也使用C ++编译器,但人们还是使用C而不是C ++。


C语言比C ++简单得多。我不知道任何公司在其编码约定中使用完整的C ++标准。以Google的C ++代码样式为例:http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml

C的编译速度要快得多。由于缺少难以编译的构造。


评论


该链接已断开。

–ar2015
17年9月14日下午0:18

#12 楼

没有。 TIOBE是毫无价值的指数。如果您实际查看它们的度量,那绝对是一个绝对的猜测。

评论


TIOBE一文不值的事实并不意味着C不受欢迎

–雷诺斯
2012年3月24日19:25

但是,它确实的确击败了OP中提出的论点,即C很流行,因此它必须有一定用途。

– DeadMG
2012年3月24日20:26在

衡量C受欢迎程度的更好方法是,几乎每个平台都有C编译器

–雷诺斯
2012年3月24日21:16

@Raynos:根本不是衡量。唯一的意思是它很容易实现。它没有说明有多少人使用它,或者为什么。

– DeadMG
2012年3月24日22:19在

不完全是,我很乐意接受相反的观点。您的一句话答案似乎没有多大用处,并且您对自己的回答持争议性和无建设性。

–mattnz
2012年3月26日20:59

#13 楼

许多旧版软件

许多公司无法更改,立即将其所有代码转换为C ++或类似版本。

许多公司无力更改其代码。

>许多公司可以负担得起更改其代码的费用,但不在乎或“便宜”。

许多公司正在迁移,但尚未完成。
<隐蔽的对象定向

(非对象定向)C源代码,被设计为面向对象的C源代码,使用对象定向建模并使用“纯C”编码的应用程序,或翻译工具来自“ C ++”或其他OO进步朗读C。

我听说有些电子游戏就是这样做的。一些跨平台工具,以及GNome Linux O.S的GTK(GObject,GLibrary)可视界面库。发行版。

评论


这个答案的后半部分需要去混淆。

–阿拉伯人
2012年3月25日,0:59

@aramis。第二部分的意思是:许多代码似乎直接用“ C”编写,实际上用其他语言编写,并翻译成“ C”

–umlcat
2012年3月25日19:33

#14 楼

我看到一些回答者回答了为什么C最受欢迎,它已经存在了很长时间,可以在大多数平台上使用,免费等等。

其他的也可以这样说语言,例如免费的Pascal-它是免费的,并且几乎所有平台都支持。

Pascal是在1970年左右发明的,C是在1972年左右发明的,所以我认为Pascal的历史与C一样长。

我个人认为C是最受欢迎的语言因为那里只有更多开放源代码可供任何人重用。是的,它的级别比Pascal低,因此它已接近汇编语言,但比汇编语言更具可读性。

我认为那里有太多的编程语言。作为程序员,我们必须了解大多数重要的知识,但最后应该没有必要。从构建网站到iOS电脑游戏,都可以使用一种编程语言来完成所有工作。

C似乎是一种全球语言,但我希望它能像Object Pascal之类。为什么使用Object Pascal,它是一种更具可读性的编程语言,所以OOP代码的确比C具有更高的可重用性和更少的错误发生(我认为)。

使用Object Pascal进行管理的大型应用程序比C / C ++。关于使用自70年代以来的编程语言,而不是喜欢每5或10年更改一次的语言。随着时间的流逝,技术不断进步,编程方法也得到了改进。如果一种语言每隔几年发生巨大变化,那么它的设计者可能就没有很好地考虑过。但是1970年至2012年将近半个世纪,可以在那时对语言进行更改以结合软件开发中使用的先进技术。

C本身已进行了多次修订。因此,从这种角度来看,这并不比其他语言更好。

评论


Pascal的一个问题是该语言的“官方”版本遗漏了一些非常必要的功能。相当长一段时间以来,PC和Macintosh都使用了Pascal编译器,它比当时存在的任何C编译器都实用得多,但是这种编译器增加了语言扩展,而这些扩展都不受任何“正式”标准的支持。我认为,如果试图制定一个正式的标准来编纂此类扩展名,那么Pascal可能会取代这种被称为“ C”的语言的入侵。

–超级猫
14年8月23日在23:47

#15 楼

因为C有庞大的用户群。是的,这有点让人难以接受,但是当我在StackOverflow上提出有关C的问题时,我几乎立刻就得到了答案。关于Python的相同问题可能要花几个小时才能得到解答。

关于C ++,学习IMO更为复杂。此外,在尝试了OOP 10年之后,我发现它并不总是有用,而且通常可以更容易地使用过程编程。

评论


您是否比较了C#或Java的SO问题?

– gna
13年8月8日在18:31

@gnat是C v Python的一个孤立示例(顺便提一下,还有更多问题!)。我没有C#的经验(您是否注意到我没有问C#或JAV的问题?)

– puk
13年8月8日在20:11

嘿,我发现StackOverflow上的#python社区几乎总是超级快。尽管如果C社区在回答速度上超过javascript社区,我会感到惊讶。 (主要是因为体积)

–雷神召唤师
2015年10月6日23:07