当前位置:  开发笔记 > 编程语言 > 正文

我应该在学习C++之前学习C语言吗?

如何解决《我应该在学习C++之前学习C语言吗?》经验,为你挑选了14个好方法。

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

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

我有兴趣学习C或C++,但稍后可能会学习其他的.对我来说,先学习一个是否有任何优势,如果有,哪一个?



1> Brian R. Bon..:

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

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

仅仅因为C++共享许多相同的语法和许多相同的语义,并不意味着你需要先学习C语言.

如果你学习C++,你最终将学习大部分C语言,并且随着时间的推移会学习一些语言之间的差异.实际上编写适当的C++是一件非常困难的事情,因为中级C++程序员倾向于编写C/C++.无论你是从C开始还是从C++开始,都是如此.

如果你先了解C,那么学习C++是个好消息.您将从了解一大块语言开始.如果你不了解C,那么就没有必要专注于不同的语言.有很多好的书籍和教程可以让你从不知道什么开始,并且将涵盖你从C中学到的任何适用于C++的东西.

请在此答案中查看进一步的推理.


我不能不同意.学习C++首先使得"回到"C非常困难.C是一种基本的,仅用于基础的系统语言.C++是一个全新的球赛,任何一种语言中的任何问题的方法都会有很大不同.我很幸运能够在进入C++工作之前修改C语言.随后我能够精神上"沸腾"C++提供的语法糖,并且可以用任何一种语言来处理问题.我很容易将C识别为语言对的"做东西"部分.首先学习C++会导致程序员混淆和误导.
@Matt:我首先学习了C++而且我不是一个误导的程序员.所以你的主张是不正确的,反例证明.是的,我在C中也有金徽章.问题的真相是它们是两种截然不同的语言.您不需要一种语言作为依赖来学习另一种语言.这只是一个愚蠢的误解.
@Matt:对不起,你还是不明白.绘制C和C++的维恩图并查看相交的部分.C++由您绘制的整个C++圆组成,而不仅仅是不相交的部分.如果你碰巧先了解C,对你有好处,你可以更快地学习C++.如果你不碰巧先知道C,那么就没有理由先学习它.你是否认为C++上的每本书都不会涵盖指针和内存管理,字符串文字等等?我现在要停止讨论,但随时留下你的结束评论.
@Matt:C如何更好地理解C++?通常,学习C++的C程序员最终会编写丑陋,容易出错的"C with classes"样式代码.我不是说*总是*发生,但这是从C开始时最自然的进展,因为C更接近于那种可怕的C++风格而不是"现代"C++.
@Matt:同样来自我的链接帖子:你应该首先学习C++,不是因为首先学习C会伤害你,不是因为你必须忘记任何事情(你不会),而是因为学习C首先没有任何好处.你最终将学习关于C的所有内容,因为它或多或少都包含在C++中.
@Brian:但首先要学习C,这样做有好处.C使用范围更广,更简单,学习更快,更便携,并且可以更好地理解C++.我不怀疑C++程序员可以学习C,否则建议是荒谬的.但是我确实更喜欢更多的程序员知道C,而不是一些程序员只知道C++.关于哪个首先出现的问题非常简单:C打开了更多的门,学习起来更快,而且无论如何都有必要理解C++,你最好先掌握这门基础语言,而不是担心C++的黑暗角落.
我会理解建议在学习Java之前不需要学习C,因为后者的内存处理.然而,在学习C++之前不学习C是不可原谅的,因为在某种程度上,如果你忽略C(因为C是一个子集)你就不学习C++,并且你正在失去一个很好的机会来理解为什么某个C++构造通过找出是有用的用C做这些事有多尴尬
@Brian:也许在这里有一些关于"需要"和"应该"的分歧.我的论点是,一个*应该*在C++之前学习C,以获得上面列出的所有优点.C值得学习,并且是C++的一个很好的踏脚石,但不是一个必要的*,正如你所指出的那样.OP使用"应该"和"优点"的措辞.最后我要说一个*应该首先学习C,因为将C作为一种单独的语言,我在之前的评论中列出了很大的优势.
@Brian:我可能会在查看您的个人资料后补充说,对于开发主要限制于Windows,例如您的Windows,可能还有Visual Studio,C的选择可能很差.Visual Studio是一个糟糕的C编译器,因此通过使用C++的子集可以更好地学习Windows上的C语言.但是,这并不影响我对所有平台上C的一般用法的看法.
@jalf:我不确定这是否相关.OP询问在另一个之前知道C或C++是否有优势.我相信无论如何都应该知道C,并且最好首先(几周)完全学习C,因为它具有不可否认的价值(参见上面的评论),而不是花费数年时间学习C++(现在是C#和Java的相对小众语言)正在横冲直撞),并不理解C因此.现在考虑使用C++ 0x有效地需要重新学习C++的大部分内容并完全调整一个人的风格.你现在将C++ 03编码标记为可怕吗?
@MattJoiner:如果你从C++中"烧掉"C++,你就错了.我同意,为了编写高性能程序,了解计算机如何在抽象下工作通常很重要,但是,您应该首先设计程序的功能,而不是它的工作方式.一个好的C++抽象的关键是你没有把它煮沸.C++是如此优秀的语言的原因是它可以让你抽象出某些不相关的细节,同时仍然保持与C相同或更好的性能.
"我能够在精神上"沸腾"C++提供的语法糖" - 没有人相信这是一位称职的C++程序员.

2> cdonner..:

我喜欢这个问题 - 就像问"我应该先学习什么,滑雪板还是滑雪"?我认为这取决于你是想滑雪还是滑雪.如果你想同时做到这两点,你必须学习两者.

在这两项运动中,你都会使用足够相似的设备在雪地上滑下山丘来引发这个问题.然而,它们也是完全不同的,因此学习它对另一方没有多大帮助.与C和C++相同.虽然它们在语法上似乎是语言非常相似,但是编写OO代码与程序代码所需的思维模式是完全不同的,因此您几乎必须从头开始,无论您学习第二语言.



3> Dima..:

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

另一方面,通过首先学习C,我已经养成了一些习惯,这些习惯最初导致我编写错误的C++代码,例如过度使用指针(当C++引用时会这样做)和预处理器.

C++实际上是一种非常复杂的语言,具有许多功能.但它并不是C的超集.相反,有一个C++的子集由基本的过程编程构造(循环,ifs和函数)组成,它与C非常相似.在你的情况下,我会从那开始,然后继续前进到更高级的概念喜欢类和模板.

最重要的是,恕我直言,在你的大脑冻结成一种看待世界的方式之前,应该接触到不同的编程范式,比如程序,面向对象,功能和逻辑.顺便说一下,我还强烈建议你学习一种函数式编程语言,比如Scheme.这真的会扩大你的视野.


我不敢相信你没有获得任何赞成,这是一个.我特别喜欢你的最后一段.

4> Head Geek..:

如果您决定同时学习(并且正如其他人所提到的那样,没有明确的需要同时学习),请首先学习C. 从C到C++的感觉就像是一种自然的进步; 走另一条路感觉就像故意将一只手绑在背后.:-)



5> old_timer..:

C是软件工程必备的必备语言.C++,Java,python,不是.你应该毫无疑问地先学习它.


"C是软件工程必备的必备语言."?需要引文!
我不同意 - 我的C#软件工程师不需要知道C有效.
@WayneConrad:没有人说我们"成了维基百科",但工程界的一个共同点就是你应该用证据来支持你的主张.这个答案没有任何证据,并提出了一个可疑的主张.
@DMan:或者他们可能*不那么有效.谁知道?如果他们花时间学习Haskell,他们可能会更有效率吗?或者Ruby.或计划.
@Johnsyweb我们什么时候成为维基百科?
@ JBRWilkinson-但你怎么知道的?也许如果他们学会了C,他们甚至会更有效.

6> Adam Hawes..:

我认为你应该首先学习C,因为我先学了C.C让我很好地掌握了语法并掌握了类似指针的东西,所有这些都流入了C++.

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

说完所有内容后,通常会教C++的方式是"C++是带有对象的C,这里是C的东西,这里是所有这些OO的工作原理",所以你很可能在任何真正的C++之前学习基本的C无论如何,请关注大多数文



7> Steve Rowe..:

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

拿起K&R并仔细阅读.它很短,会给你足够的语言感.一旦掌握了指针和函数调用的基础知识,就可以更轻松地继续使用C++.


错误.几乎所有C教你的东西都是C++中的一个不好的做法.C不是C++的核心,它恰好分享了很多语法.拜托,世界上已经绰绰有余了"C with classes"程序员.学习C或C++.但是不要假装C是C++ lite.
我支持我的话.C++建立在C之上,因此C是它的核心.C++中使用的习语与C中使用的习语有很大不同,但语法是相同的.人们可以从C开始学习编写C++的正确方法.看看C++ Primer.它基本上就是这样.
+1.C是一种较小的语言,因此更容易学习.向后兼容C的尝试是C++主要问题的一个来源,另一个是模板系统,它对于90%的C++程序员来说太复杂了.

8> John T..:

在学习C++的过程中,您将学习大部分C语言.但请记住,很多C++代码都无效C. C++旨在与C代码兼容,所以我首先要学习C++.布莱恩写了一个很好的答案.



9> Daniel Daran..:

没有.

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

如果您的目标是学习C++,那么首先要学习现代的标准C++.把mallocs放在一边.


但Steve Rowe 有一点 ......



10> hillu..:

学习C会强迫您在编写代码时更加思考一些问题,例如显式和隐式内存管理或基本数据类型的存储大小.

一旦你达到了对C的功能和错误特征感到满意的程度,你在学习和编写C++时可能会遇到麻烦.

您看到的C++代码完全有可能与标准C看起来没什么不同,但这可能是因为它不是面向对象的,并且没有使用异常,面向对象,模板或其他高级功能.



11> Scottie T..:

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


在许多高性能计算场景中,那几百个时钟周期确实很重要.

12> TrayMan..:

观察了那些先学习Java的人,在C++中使用指针和内存管理的概念时,我会说首先学习C是一个好主意,以便掌握这两个概念,与其他C++的复杂性隔离开来特征.



13> bobobobo..:

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

comp sci课程仍然使用C的原因.

在我看来,它要避免主题的所有"拥挤",要求OOP承担.

我认为程序编程是首先学习编程的最自然的方式.我认为这是真的,因为在一天结束时你拥有它:一行接一行地执行代码.

今天的许多文章正在推动"对象优先"的方法,并在引入阵列之前开始讨论汽车和换档.


现在看来很多comp sci课程都使用Java,这会加剧你所谈论的问题.
你提出了一个很好的观点.除了对于第一语言来说太复杂之外,C++在很大程度上鼓励隐藏与操作系统和内存的低级别交互,这对于良好的计算机科学学习至关重要.阵列应该在物体之前很久就被教导.
_"comp sci课程仍然使用C语言是有原因的."_是的,因为大多数综合科目课程教学很差.

14> Agnius Vasil..:

我的两分钱:

我建议先学习C,因为:

它是一种基本语言 - 很多语言来自C语言

更多平台支持C编译器而不是C++,无论是嵌入式系统,GPU芯片等.

根据TIOBE索引 C仍然比C++更受欢迎2倍.

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有