在实际应用方面,C,C#和C ++之间有什么区别

时间:2009-03-28 04:51:33

标签: c# c++ c comparison

正如我之前发布的here我决定尝试其中一个但是考虑到我作为网络开发人员的兴趣,我想知道它们在实际应用程序中的区别。

编辑注意:

虽然我是网络开发人员,但请不要限制你的答案。我30岁......我已经有了多年的职业生涯改变。

8 个答案:

答案 0 :(得分:69)

答案 1 :(得分:63)

C和C ++都为您提供了较低级别的抽象,随着复杂性的增加,它提供了对基础机器功能的广泛访问,这些功能不一定会被其他语言暴露。与C相比,C ++增加了完全面向对象语言的便利性(缩短了开发时间),这可能会增加额外的性能成本。在现实世界的应用程序方面,我看到这些语言应用于以下领域:

C

  • 内核级软件。
  • 硬件设备驱动程序
  • 需要访问旧的稳定代码的应用程序。

C,C ++

  • 应用程序或服务器开发,需要对内存管理进行微调(并且不能留给通用垃圾收集解决方案)。
  • 需要访问不能与更现代的托管语言良好接口的库的开发环境。
  • 虽然托管C ++可用于访问.NET框架,但它不是无缝过渡。

C#提供了一个托管内存模型,可以再次添加更高级别的抽象。这种抽象级别增加了便利性并缩短了开发时间,但使对较低级别API的访问变得复杂,并使专门的性能要求成为问题。

在托管内存环境中实现极高性能的软件当然是可能的,但对其含义的认识至关重要。

C#的语法肯定比C / C ++要求更低(并且容易出错),并且对于启动程序员来说,学习曲线较浅。

C#

  • 快速客户端应用程序开发。
  • 受益于.NET框架的高性能服务器开发(例如StackOverflow)。
  • 需要以其设计语言提供.NET框架优势的应用程序。

Johannes Rössel提出了一个有效的观点,即使用C#指针,不安全和未经检查的关键字突破了构建C#的抽象层。我要强调的是,编程类型是大多数C#开发方案的例外,而不是语言的基本部分(如C / C ++的情况)。

答案 2 :(得分:14)

C是一种简单,干净的语言,可以让你自己完成所有事情。它不会牵你的手,也不能阻止你在脚下射击。但它拥有你想做的一切。

C ++是C,添加了类,然后是一大堆其他东西,然后是更多东西。它不会牵你的手,但它会让你自己动手,附加GC,或RAII和智能指针。如果你想要完成某些事情,很可能有一种滥用模板系统的方法,为你提供一个相对简单的语法。 (还有C ++ 0x)。这种复杂性还使你有能力意外地创造了十几个自己的实例并将它们全部射入脚中。

C#是微软在改进C ++和Java方面的努力。大量的语法特征,但没有接近C ++的复杂性。它在完全托管的环境中运行,因此可以为您完成内存管理。如果你需要,它会让你“弄脏”并使用不安全的代码,但这不是默认代码,你必须做一些自己拍摄的工作。

答案 3 :(得分:5)

我的观点是C#,而ASP.NET将是网络偏见的三个开发中最好的。

我怀疑是否有人用C或C ++编写新的网络应用程序了。它是在10年前完成的,并且很可能仍有大量遗留代码在使用,但它们并不是特别适合,似乎没有那么多(正在进行的)工具支持,并且它们可能只有一个小的活动进行Web开发的社区(除了Web服务器开发之外)。我在当天写了许多网站C ++ COM对象,但是C#的效率要高得多,除非你需要,否则没有令人信服的理由来编写C或C ++(在这种情况下)。

如果有必要,我仍然会编写C ++,但它通常用于小问题域。例如通过P / Invoke从C#进行通信到旧的C风格的dll - 在C#中完成一些非常笨拙的事情是轻而易举地创建一个C ++ COM对象作为桥梁。

C#的优点在于您还可以轻松转移到编写Windows和控制台应用程序并保留在C#中。使用Mono,您也不仅限于Windows(尽管您可能仅限于使用哪些库)。

无论如何,这都是从网络偏见的角度出发的。如果你问过嵌入式设备,我会说C或C ++。您可以说这些都不适合Web开发,但C#/ ASP.NET非常流畅,运行良好,有大量的在线资源,庞大的社区和免费的开发工具。

因此,从现实世界的角度来看,只根据要求选择C#,C ++和C中的一个,作为一般规则,你最好坚持使用C#。

答案 4 :(得分:4)

在你的其他帖子中,我想你想学习一门新语言来获得新技能。我的建议是,语言并不重要,重要的是社区的质量(建议,还有您可以阅读和学习的现有代码)以及可用的库/框架。在这方面,我认为“C系列”并不是你的最佳选择:网络库和框架很少,不便携而且不是很好,你可以学习的代码编码风格也有很多不同,可能会让你感到困惑。 (虽然C是我最喜欢的语言)

我建议只学习C,并尝试真正理解指针的概念,然后转向更适应网络的其他语言(想到python或javascript - 甚至java)。此外,在C系列中,Objective-C在我看来具有最佳的功能和简洁性,但它是一个利基玩家。

答案 5 :(得分:4)

C - 一种较旧的编程语言,被描述为实践。作为程序员,您必须告诉程序执行所有操作。这种语言也可以让你做任何事情。它不支持面向对象的代码。因此没有课程。

C ++ - C语言本身的扩展语言。在C代码中,++表示增量1.因此C ++优于C.它允许高度控制的面向对象的代码。再一次非常实用的语言进入了很多细节。

C# - 类似于C / C ++代码风格的完全对象定向代码。这真的更接近JAVA。 C#是C风格语言的最新版本,非常适合开发Web应用程序。

答案 6 :(得分:1)

对于原始速度,请使用C.对于电源,请使用C ++。对于.net兼容性,请使用C#。随着语言的发展,它们都非常复杂; C通过几十年的逐渐增长,C ++通过多年的快速增强,以及C#通过微软的力量。

答案 7 :(得分:1)

C是最接近类似的核心语言,直接转换为CPU机器代码。 CPU遵循移动,添加,逻辑组合,比较,跳转,推送和弹出的指令。 C使用更简单的语法来完成此操作。如果你研究反汇编,你可以学习编写与汇编一样快速和紧凑的C代码。它是8位微控制器的首选语言,内存有限。如果你用C编写一个大型PC程序,你会因为组织有限而陷入困境。这就是面向对象编程变得强大的地方。 C ++和C#类一起包含数据和函数的能力强制组织,这反过来允许比C更复杂的可操作性。当CPU只有一个核心时,C ++对于快速处理是必不可少的。我现在开始学习C#。它的仅类结构似乎比C ++强制实施更高程度的组织,这最终将导致更快的开发和促进代码共享。 C#不像VB一样被解释。它在开发时部分编译,然后在运行时进一步翻译,以变得更加平台友好。