与 C 相关的 C# 和 C++

Posted

技术标签:

【中文标题】与 C 相关的 C# 和 C++【英文标题】:C# and C++ in relation to C 【发布时间】:2009-12-30 21:09:39 【问题描述】:

我从未使用过 C 或其他语言进行编程,但我经常使用这个网站,所以你可以想象我经常遇到它们。由于我不太了解这些语言,这是 Google 无法真正回答的问题。

简单来说,这些语言之间的区别是什么。我假设它们是相关的。我所知道的是,C++ 将面向对象编程引入了 C。

【问题讨论】:

【参考方案1】:

它们在语法方面关系松散。

一般来说,C++ 为 C 添加了大量功能,主要是面向对象和通用编程结构。但是,这样做是为了尽可能地保持与 C 的向后兼容性。

另一方面,C# 是一种非常不同的动物。它完全放弃了所有向后兼容的尝试,更多地尝试保持与 C++ 表面的语法相似性。

但是,实际上,这三种语言都非常独特。由于支持的库和技术存在巨大差异,C、C++ 和 C# 的开发方式非常不同。

【讨论】:

【参考方案2】:

C 是爷爷。当你编译你的 C 应用程序时,你会得到可执行的 byte-code 机器代码,它可以在你编译的任何平台上运行。

C++ 在 C 中添加了面向对象的开发

C# 是一个远亲,只是在语法上有些相似(以及语言名称中的字母 C)。 C# 编译成 .NET IL,由 .NET 运行时及时编译(就像其他 .NET 系列语言一样)。

【讨论】:

不要挑剔,但“可执行字节码”是矛盾的。字节码由 JIT 编译器或解释器翻译成可执行的机器代码。 C 编译器不生成字节码——它生成机器码。无论如何都是道具。 @John-Doh!漫长的一天。看来我需要在午饭后随时校对两次。 当然,没有什么能阻止任何人编写生成 .NET IL(“字节码”)而不是机器代码的 C 编译器。可以做到的。 C++ 还添加了模板和其他内容。 en.wikipedia.org/wiki/Template_(programming)【参考方案3】:

除了名称和使用类似的语法之外,C# 与 C 或 C++ 并没有真正的关系。实际上,C# 与 C 和 C++ 完全不同。

C# 深受 Java 的启发。

【讨论】:

【参考方案4】:

C和C++是最相似的; C++ 几乎直接从 C 派生,添加了一些新的语法和语义来支持面向对象的编程。与 C 一样,它不提供对基本面向流 I/O 之外的许多内置支持。任何涉及位图图形、声音、网络等的事情,都必须使用第三方库来完成。两种语言的程序都倾向于作为本地机器代码编译和运行。

C# 更类似于 Java,而不是 C 或 C++;与 Java 一样,它倾向于编译为在虚拟机中运行的字节码,而不是本地代码,并且与 Java 一样,它试图支持 C 和 C++ 不支持的所有内容。 Java 和 C# 乍一看有点像 C 和 C++(它们使用许多相同的关键字、分隔符等),但在使用它们一段时间后,您会发现它们是非常不同的语言。

【讨论】:

【参考方案5】:

它们的名字看起来很相似,因为它们的语法看起来很相似。

C 是可以说与三者最不同的。它实际上是一种高级汇编语言,可以针对多种处理器架构进行编译。 (哪个程序集通常不能)

【讨论】:

【参考方案6】:

C++ 除了C 语言之外,还提供了许多功能来帮助编写面向对象的程序。任何 OO 程序都可以很容易地重写为非 OOP,即使在 C++ 或 C# 中也是如此。具体的 OOP 功能有:

函数重载:int foo (int);和 int foo (char); 运算符重载 继承 多态性 模板(技术上不是 OOP-only)

【讨论】:

【参考方案7】:

C 是基本的编程语言。它非常适合低级编程,虽然您可以使用它进行更高级别的面向对象编程(OOP),但尝试这样做会有点“罗嗦”。非常适合嵌入式编程以及试图使事情变得非常高效时。

C++ 基本上把 C 语言变成了面向对象的编程语言。语法略有不同,但总体非常相似。这使得更容易进行更高级别的编程,但同时仍然可以编写高效的代码。适合编写游戏引擎之类的东西。需要高效,但没有 OOP 的编程会很辛苦。

C# 是,IMO,最不像其他两个。它具有相似的语法,但几乎是完整的 OOP。它非常适合编写 .Net 应用程序。它适用于在 Windows 和 Web 开发中快速编写 GUI,以解决效率比试图快速将产品推向市场更重要的情况。

【讨论】:

【参考方案8】:

在 C++ Windows 应用程序中工作了大约 4 年,后来又转向 C#,我有 C++ 背景,我可以告诉你,C++ 和 C# 在语法上非常相似。然而,C# 有一些很酷的速记功能,而 C 没有。

在我看来,最大的不同不在于语法,而在于库、框架或任何你想称呼它们的东西——忽略托管 C++。当您在 C++ 中编码时,您通常必须决定您的目标平台以及您计划使用的库类型。当我使用 C++ 时,我使用了 Microsoft Foundation Libraries。然而,还有更多的选择。同样使用 C++,就您计划使用的 IDE 类型而言,您可以做出更多选择。使用 C#,您通常只会使用 Visual Studio 和 .Net 框架,除非您使用 Mono 进行编码。

此外,由于 C# 使用非常丰富的 .Net 框架,因此很容易开始编写通常为 C++ 世界中的专家保留的程序。当然,您也可以选择使用使用 .Net 框架的托管 C++,但我不得不问:为什么?

我故意在讨论中忽略了 C,因为我从未在专业水平上使用过它。我可以这么说,尽管我看到的用 C 语言编写的一小段代码是fuuuuugly。不仅因为它是程序性的,还因为许多编码标准非常精确但不可修改。我不认为它必须是,它通常是以非常难以理解的风格编写的。这也可能是由于我长期从事面向对象编程的经验。

【讨论】:

【参考方案9】:

将 C 想象为在 C# 的一个巨大的静态类中完成所有工作。

你使用指针传递数据(你可以在 C# 中做到这一点)我发现让大多数人绊倒的是指针。

您可以通过创建结构来创建新类型(就像在 C# 中一样)

如果你想学习 C 那就假装 C++ 不存在:)

【讨论】:

以上是关于与 C 相关的 C# 和 C++的主要内容,如果未能解决你的问题,请参考以下文章

C#与C互传数据

c++或者C 语言中有没有类似C#中事件委托的机制

蓝桥杯C++相关

蓝桥杯C++相关

unity的C#学习——不安全代码(声明不安全代码块:实现C/C++指针的创建与相关操作)

C# EF6 将值更新到不相关的表