学习C ++之前我应该​​学习C吗?

我今天在开放日访问了一所大学CS部门,在实验室参观时,我们坐下来和本科生的几个最后一年的项目一起玩。 其中一个特别好 – 一种FPS小行星游戏。 我决定在src目录下查看它是用C ++完成的(其他大多数项目都是Java 3D应用程序)。

我以前没有做过任何C语言,但是我已经查看过一些C代码。 从我在这个游戏中看到的.cpp代码看起来没有什么不同。

我对学习C或C ++感兴趣,但稍后可能会学习其他知识。 对我来说先学习一个有什么好处如果是的话,哪一个呢?

在学习C ++之前,不需要学习C语言。

他们是不同的语言 。 C ++在某种程度上依赖于C而不是完全指定的语言是一种常见的误解。

仅仅因为C ++有许多相同的语法和很多相同的语义,并不意味着你需要首先学习C语言。

如果你学习C ++,你将最终学习C语言的大部分,随着时间的推移你将学习的语言之间会有一些差异。 事实上,编写合适的C ++非常困难,因为中级C ++程序员倾向于编写C / C ++。无论你是否使用C语言开始,或者使用C ++开始,情况都是如此。

如果你首先知道C,那么学习C ++就是好的了。 你将开始了解一大块语言。 如果你不知道C,那么就没有关注不同的语言。 有很多优秀的书籍和教程可以使你从不了解任何东西,并将覆盖从C语言学到的任何东西,这也适用于C ++。

请在这个答案中看到更多的推理 。

我喜欢这个问题 – 就像问“我应该先学什么,单板滑雪还是滑雪”? 我认为这取决于你是否想滑雪或滑雪。 如果你想同时做,你必须学习两个。

在这两项运动中,您都可以使用足够相似的设备,在雪地上滑下一座山丘来挑起这个问题。 然而,他们也有很大的不同,所以学习一个人对你没有多大的帮助。 与C和C ++一样的东西。 虽然它们在语法上似乎是足够类似的语言,但是为了编写面向对象代码和程序代码所需要的头脑是足够不同的,所以你几乎不得不从头开始,不pipe你学什么语言。

我首先学习了C,在学习C ++之前,我学习了使用C的数据结构。 这对我来说很好。 C语言中的数据结构课程让我对指针和内存pipe理有了很好的理解。 一旦我了解了它是什么,它也明显地体现了面向对象范式的好处。

另一方面,通过首先学习C,我开发了一些习惯,最初导致我编写不好的C ++代码,比如过度使用指针(当C ++引用会这样做)和预处理器。

C ++是一个非常复杂的语言,它有很多特性。 不过,它并不是C的超集。 而是C ++的一个子集,由基本的过程化编程结构(循环,ifs和函数)组成,与C非常相似。在你的情况下,我将从此开始,然后按照更高级的概念像类和模板。

恕我直言,最重要的事情就是,在你的大脑冻结成一种看待世界的方式之前,就要面对程序,面向对象,function和逻辑等不同的编程范例。 顺便说一下,我也强烈build议你学习一个函数式编程语言,如Scheme。 这真的会扩大你的视野。

C是软件工程必不可less的语言。 C ++,Java,Python,不是。 你应该首先了解它,毫无疑问。

我想你应该首先学习C,因为我先学习了C。 C让我很好地掌握了像指针这样的语法和细节,所有这些都stream入了C ++。

我认为C ++可以很容易地包装所有这些问题(当你使用[]运算符和一个可怕的索引时,需要一个不会溢出的数组吗?当然,创build一个数组类来做边界检查),但是你需要知道什么在你明白为什么某些事情是以某种方式完成之前,他们会被他们咬伤。

当所有事情都说完之后,C ++通常被教导的方式是“C ++是C语言的对象,这里是C语言的东西,这是所有这些OO的东西如何工作的”,所以如果你真的在C ++之前学习C语言的话反正大多数文本。

我会不同意这里的大多数人。 我认为在学习C ++之前你应该学习C语言。 这绝对没有必要,但我认为这使得学习C ++变得更容易。 C是C ++的核心。 你学习C的任何东西都适用于C ++,但是C更小,更容易学习。

拿起K&R并通读。 它很短,会给你足够的语言意识。 一旦掌握了关于指针和函数调用的基础知识,就可以更轻松地转向C ++。

在学习C ++的过程中,你也将学习C的大部分内容。 但请记住,很多C ++代码是无效的。C. C ++被devise为与C代码兼容,所以我会说先学习C ++。 布赖恩写了一个很好的答案 。

如果你决定同时学习(和其他人一样,没有明确的需要学习),首先学习C. 从C到C ++感觉就像一个自然的进展; 走另一条路就好像故意把一只手绑在背后。 🙂

学习C迫使你在编写代码的时候更加考虑一些问题,例如显式和隐式内存pipe理或基本数据types的存储大小。

一旦你达到了一个让你感觉舒服的C特性和错误特征的地方 ,你可能在C ++中学习和写作的麻烦就less了。

你所看到的C ++代码完全可能与标准C没有多大区别,但是这可能是因为它不是面向对象的,也没有使用exception,面向对象,模板或其他高级特性。

没有。

学习C ++通常更有用,因为它更接近于最现代的基于OO的语言,如Eiffel或C#。

如果你的目标是学习C ++,首先要学习现代的标准C ++。 把malloc留在一边。


但史蒂夫·罗维 有一个观点

我认为首先学习C是一个好主意。

有一个理由,科学学院课程仍然使用C.

在我看来,它是为了避免主题的所有“拥挤”,要求OOP的义务。

我认为程序编程是最先学习编程的最自然的方式。 我认为这是真的,因为在一天结束的时候,你有什么:代码行一个接一个地执行。

今天的许多文章都推出了“物体第一”的方法,并在引入arrays之前开始谈论汽车和换挡。

观察过Java的人首先学习了C ++中的指针和内存pipe理的概念,但我认为首先学习C是一个好主意,为了把握这两个概念,从其他C ++的复杂性中分离出来特征。

像生活中许多其他问题的答案一样,这取决于。 这取决于你的节目的兴趣和目标是什么。 如果你想编程桌面应用程序,也许用GUI,那么C ++(和OOP)可能是更好的方法。 如果您对x86芯片组以外的硬件编程感兴趣,那么C通常是更好的select,通常是因为速度。 如果你想创build一个新的媒体播放器或写一个商业应用程序,我会selectC ++。 如果你想做科学的星系碰撞或stream体动力学模拟,请看C的力量。

我的两分钱:

我build议先学C,因为:

  • 这是一种基本的语言 – 很多语言都来自C语言
  • 更多平台支持C编译器而不是C ++,无论是embedded式系统,GPU芯片等等。
  • 根据TIOBE索引, C仍然比C ++大2倍左右。

我认为c是一个非常好的编程语言,它是紧凑的,有点容易学习。 但如果你只想学习c + +的开始。 但我build议你学习两个。 如果你想这样做, 我认为最好从c开始。 如之前所说:这是小的,有点容易学习。 可能是一个很好的升级到一个更复杂的编程语言,如C + +。 (因为c提供了一些基本知识)

祝你好运。

一些C ++书籍假设读者对C有最less的了解,但是你select哪种语言并不是错误的方法,因为很多编程语言都是基于C / C ++的部分语言,为了将来的学习,其他语言将会变得容易一些。