【问题标题】:Learning C++ Or C学习 C++ 或 C
【发布时间】:2009-12-23 12:12:46
【问题描述】:

我的问题是:在不学习 C 的情况下学习 C++ 是否足以编写任何类型的计算机程序并使计算机达到最高水平(完全控制,除了需要汇编语言的任务)? 谢谢

【问题讨论】:

标签: c++ c


【解决方案1】:

是的,如果你想学习 C++,那么首先学习 C 是没有意义的。它们是两种不同的语言,不需要先学习 C。

您可以在 C 中执行的所有操作都可以在 C++ 中执行(也可能以更安全的方式)

【讨论】:

  • 我同意这一点。虽然在语法上 C 确实主要是 C++ 的一个子集(除了不是的部分),但这两种语言都有自己的、非常不同的习语。这从数组开始(C 索引与 C++ 迭代器:在大多数情况下,在 C++ 中使用 C 样式的数组是不好的样式),并扩展到 OOP,其中样式差异非常明显。这个建议可能看起来有点明显,但是在看到数千行非常恶心的 C/C++ 代码之后,我真的敦促你:不要尝试用 C++ 编写 C 代码,反之亦然。用 C 编写 C 代码,用 C++ 编写 C++ 代码。随范式流动。
  • 我希望看到一个正确的 C++ 程序,它使用 RAII 和 longjmp。在 C 语言中你可以做一些 C++ 没有惯用机制的事情。
  • @Pete Kirkham:使用longjmp 为了什么?使用longjmp 可以让 C 程序做哪些 C++ 程序无法做到的事情?
  • @Patrick:技术上是的,你是 100% 正确的。但一般来说,大多数人会不同意它是 C++:它只是将 C 编译为 C++(技术上使它成为 C++,但这不是人们的意思)
  • @Patrick:为什么有人会使用 C++ 编译器来编译 C 代码?我能想到的唯一原因是不知道如何使用“extern C”。此外,由于 C++ 不是 C 的精确超集,因此存在细微差别(例如,long long、可变长度数组或 C99 中的 func)。为 C 代码使用 C 编译器,省去麻烦。
【解决方案2】:

我认为要问的重要问题是“你想做什么?”

在许多任务和情况下,C 或 C++ 都不完全合适。它们还呈现出相当陡峭的学习曲线,不利于快速取得成果。

如果您刚开始,我会推荐一种更简单的语言,例如 Python(甚至是用于 Web 的 PHP),但不要相信我的话并询问 - 形成您自己的意见。

了解 C 很有用,因为它可以让您更深入地了解计算机实际在做什么,但为了提高工作效率(和您的理智),最好从更高级的东西开始。

【讨论】:

    【解决方案3】:

    这让我想起了“我应该学习使用手动变速箱(变速杆)驾驶卡车还是使用自动变速箱驾驶汽车”的问题。确实不同的技能和用法。使用 C,您在程序上“思考”。使用 C++,您会“想到”对象。您的整个程序的结构不同。诚然,C++ 的“语法”是 C 的超集,但它们实际上是两种不同的语言。因为大多数 C++ 编译器也编译 C 代码,所以有一个普遍的误解,即 C++ 只是 C 的扩展。这只是语法而不是概念。例如,您使用相同的字母来书写英语和法语,但语言非常不同。

    我希望这会有所帮助。

    【讨论】:

    • 不幸的是,法语和英语的字母表并不完全相同。询问任何试图教美国人如何输入所有这些口音和特殊字符的法语老师:tlt.its.psu.edu/suggestions/international/bylanguage/…
    • 没错!就像 C++ 程序员试图向 C 程序员解释点符号一样 :)
    【解决方案4】:

    C++ 是一个很好的起点,是的,你可以用它做任何事情。除非您计划在特别适合它的平台上工作,例如嵌入式电子设备,否则学习 C 没有任何优势。

    如果您掌握 C++ 作为一门语言及其背后的 OO 概念,您将毫不费力地学习任何其他编程语言。更重要的是,与您从 Java 等稍高级语言开始相比,您会更好地了解内存管理。

    祝你好运。

    【讨论】:

      【解决方案5】:

      我认为这完全取决于您希望开发的平台。

      如果您想在 Mac 或 iPhone 上开发应用程序,您需要使用(大部分)用 Objective-C 编写的 Cocoa 和 Cocoa Touch 框架。

      如果您想为大多数游戏机开发游戏,您需要使用几乎全部用 C++ 编写的原生框架。

      我不确定 Windows 框架使用什么,但我猜是 C++。

      您使用的语言次要于您需要用于您正在开发的平台的框架。

      【讨论】:

        【解决方案6】:

        是的,C++(几乎)是 C 的超集

        【讨论】:

        • 除了那些不是的位:-)
        • 我从 C 开始,然后转到 C++,我看不出往另一个方向移动会更困难
        【解决方案7】:

        C++ 包含所有 C 特性以及更多其他特性,例如对 OOP 的支持,所以答案是肯定的。

        【讨论】:

          【解决方案8】:

          这是不同的语言.. 选择取决于你想做什么......

          【讨论】:

          • 更重要的是,它是不同的范例。这是不同的图书馆。这是执行基本操作(例如读取文件或循环列表)、分配(和释放)内存的不同方式。
          【解决方案9】:

          是的,您可以开始学习 C++。从 C++ 的非 OOP 部分开始,这与 C 类似。然后您可以转到 OOP 部分。大多数从头开始教授 C++ 的书籍都遵循这种方法。

          【讨论】:

          • 我不同意...这是一种非常糟糕的方法...OO方法更加自然和清晰...过程编程迫使您思考计算机的工作方式...OOP试图强迫计算机按照你想象的方式工作……我自己是从过程编程开始的……后来,当我开始了解 OOP 时,我意识到有很多事情要放手……我几乎重新发现了编程...
          • 我不太确定这里是否有 正确 答案,但就其价值而言,我发现过程式编程比 OO 编程更自然、更清晰(而且我发现函数式编程通常比前两个更清晰)。据我所知,人类的风格各不相同。
          【解决方案10】:

          我刚学 c++ 但是 理解c没问题

          c++ 比 c 更支持和安全。

          虽然是puls puls版本...

          【讨论】:

            【解决方案11】:

            C++ 是 C 的全部,甚至更多,因此使用 C++ 不会阻止您在计算机上执行您可以在 C 中执行的任何操作(尽管在某些情况下它会阻止您编写 C 中通常会执行的操作)无论如何都会出错,因为 C++ 编译器使用了更强的类型检查)。

            现在关于“完全控制”;有些任务是操作系统的责任,现代操作系统会阻止您在用户级别进行完全控制(因为进程必须很好地协同工作)。当然,如果您正在为嵌入式目标编写代码,或者编写引导加载程序或操作系统,或者内核模式驱动程序,那么您确实可以完全控制;这就是为什么 C 和 C++ 主要用于此类任务的原因,因为它们本质上是系统级语言。

            【讨论】:

              【解决方案12】:

              我认为任何语言都只是表达一个人的逻辑的媒介,主要是你的逻辑需要完美。首先,您必须了解在 C++ 中可以探索哪些在 C 中不可用的特性。

              C 以其简单而著称。如果您开始学习 C,您将非常了解这种语言是多么清晰明了。但是,您应该先学习 C 再学习 C++,这并不是强制要求。这只是一个建议。

              首先学习 C 就像玩游戏的第 1 级,而 C++ 是第 2 级 :-) 话虽如此,您始终可以直接玩 2 级并且同样可以成功,但有点困难。 :-)

              【讨论】:

                【解决方案13】:

                我从学习 C++ 开始,这很好。

                不过,在深入研究 C++ 之前浏览一下 C 语言并没有什么坏处。粗略地说 C 是一个子集,您将在那里学习基础知识。 C++ 往往有一些棘手的主题需要掌握,因此拥有扎实的基础会更安全。

                【讨论】:

                • 不是严格的子集(存在不兼容性),但对于绝大多数内容来说足够接近。
                • 不是一个子集,C 中大多数常见的良好实践在 C++ 中是不受欢迎的。最好将它们视为不同的语言,并选择其中一种来学习,而不是将一种作为对另一种的介绍。
                • 好吧,实际上,如果您正在开发 C++,您最终将不得不包含/链接 C 库,因此这绝对不会浪费时间。关于成为一个子集,我并不是严格意义上的。有不兼容的地方,但 99% 的东西都在那里。
                【解决方案14】:

                如果您开始编程,我会说从 C 开始。它将提供许多基础知识,并让您以比开始 C++ 更底层的方式思考。您无需成为 C 语言中的老大,只需掌握对未来有帮助的基础知识即可。

                Joel Spolsky (joelonsoftware.com) 写了一篇不错的文章,讨论了如何开始。

                【讨论】:

                  猜你喜欢
                  • 2010-10-05
                  • 1970-01-01
                  • 2010-09-15
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-01-05
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-04-05
                  相关资源
                  最近更新 更多