如果我不懂C但我对C ++满意,可以吗?[关闭]


23

我有一个问题,我认为可以在这里得到最好的回答。

我非常擅长C++,就像我对语言感到满意一样,我已经阅读Accelerated C++并完成了几乎所有的练习。

但是,我有一个大问题。我需要学习C吗?C我一生中从未做过。我刚开始C++编程时才刚开始。可能是因为我一直很想知道为什么每个人都称这种语言如此复杂。现在尽管我知道该问题的答案;)

我特别想知道我是否能在不了解C当今世界的情况下生存。就像我在公司里面试一样,如果我告诉他们我不知道C-他们会认为还可以吗?我擅长的两种语言是Python和C ++。我问这个原因是因为我听说公司在面试中询问数据结构。因此,如果他们要求我实现它,并且如果我使用C ++来实现,那么可以接受吗?

还有人说“当您使用C ++时,您怎么不知道C”,请不要回答:)没冒犯,但我不明白为什么学习C是必备条件。



1
DumbCoder引用的文章是有关C在嵌入式编程中的普及程度的。
ChrisW

2
@ChrisW-是的,但是它仍然表明C并不是那么容易掌握,不是C ++容易掌握。
DumbCoder

@DumbCoder:哦,是的,嵌入式编程。与台式机相比,嵌入式系统中有多少工作?
DeadMG '08 / 08/24

@DeadMG-掌握一种语言与该语言有多少工作无关。您从哪里知道C仅用于嵌入式编程?
DumbCoder

Answers:


36

如果您了解C ++,就不会为了学习C而学习C。学习是否以及何时需要它不会太困难。

我宁愿遇到一个声称自己懂C ++但不懂C的人,也不愿遇到一个声称自己懂C / C ++的人。


哦,是的。这是关于C ++城市神话的SO问题的首个项目列表:stackoverflow.com/questions/2245196/c-urban-myths

4
+1。如果您了解C ++,那么从一开始,学习C便是一件小事,其次,它真的不重要。
DeadMG '08

6
@DeadMG学习语法可能很容易,因为那只是知道C ++遗漏了哪些部分,但是学习常见的用法比较困难,而且可以说是最重要的部分。除非有必要,否则我不会学习C。
KeithB

6
@chubsdad你的意思是我不应该在我的简历上贴上“我知道Java / Javascript”?
隐身于2010年

@ user257493:没有Java / Javascript这样的东西
John Dibling

23

多部分答案。仅我的意见。

  1. 我的经验(大学毕业后的25年)是C ++虽然越来越不常见,但在可预见的将来,它将继续对有趣的系统至关重要。因此,我坚持将其作为我的主要专业领域。这项工作艰苦,有趣和重要。

  2. C ++程序员之所以有价值,恰恰是因为他们还没有在托管语言中长大,因此更有可能了解幕后的情况。从C ++到C#/ Java的转换要容易,反之亦然,因为进入的门槛更高。

  3. 因此,在我看来,理解C以便熟练地使用C ++并不是必需的,因此了解C为什么在C上下文中存在-其局限性和优势以及如何在C ++中解决这些问题将是必不可少的。随着时间的推移,这对您来说是无价的。

祝你好运。


是什么让您说C ++越来越不常见?根据您的经验,它在取代什么?
Praxeolitic


13

是比耶恩说的:

知道C是学习C ++的前提条件,对吗?

错误。C和C ++的公共子集比C易于学习。手动捕获的类型错误将更少(C ++类型系统更严格且更具表现力),学习的技巧也更少(C ++允许您表达更多内容而无需旁听)以及更好的库。最好的C ++初始子集不是“全部C”。


4

只是我个人的看法:如果您了解C ++,则可以用C编写。有些经验会很不错,但这不是问题。相反的说法是不正确的:没有其他学习,C知识不允许用C ++编写。我从未学习过C,并且在必要时使用C且没有任何问题。


3
@Alex Farber-“如果您了解C ++,则可以用C编写”。我对此表示高度怀疑:)
DumbCoder 2010年

4
不同意。IME,首先学习C ++的程序员往往不认识C所没有的C ++功能。首先学习C的程序员可以轻松地用C ++编写代码,但会以非惯常的方式开始。
dan04 2010年

1
这是基于我的个人经验。我学习了C ++,并在C ++中完成了大部分工作。但是我在必要时使用C,没有任何问题。

特别是考虑到所有可爱的类库都不能在C语言中使用。Imo像C ++和Java这样的语言的胜利就是库,而不是固有的语言功能。

8
C ++程序员试图通过C语言编写错误代码,原因与C程序员试图通过C ++语言编写错误代码的原因相同。C伙计们将C ++用作“带有类的C”,而C ++伙计们将C用作“没有类的C ++”。
John Dibling 2010年

4

好的,首先要做的是-不,了解C不是学习C ++的先决条件。确实,这可能是一个障碍。

其次,这完全是情境。是否需要知道C完全取决于工作是否需要它。如果您想成为嵌入式系统专家,那么可以,学习C将有所帮助。否则,大多数工作都不需要它。如果工作需要C,则应这样说。如果没有这样说,可能就不需要了。关于数据结构,这又取决于公司。通常,一家公司会说“我们用这些语言编程,请向我们编写此数据结构。请使用上面列出的所选语言。” 如果他们要您用C编写,您只需说“我不知道C-履历上也没有说我知道C,这项工作不适合我。”


为什么知道C是学习C ++的障碍?我并不是说我不一定同意,但这是一个大胆的声明。
Casey Patton

3

就像我在公司里面试一样,如果我告诉他们我不认识C-他们会认为还可以吗?

询问他们是否需要C(是否愿意学习,是否愿意)。

因此,如果他们要求我实现它,并且如果我使用C ++来实现,那么可以接受吗?

如果他们正在面试/雇用您使用C ++,我希望如此。

如果是“数据结构”问题,您可能会问他们是否希望您使用STL容器进行演示,或者(因为是访谈)他们是否希望您从头开始实现数据结构。


2

C几乎是C ++的适当子集。如果您不了解C,那么您将不了解C ++的重要组成部分。您必须学习此子集吗?不。C++是一种荒谬的大型语言,大多数人选择一个子集并使用该子集进行编程。不需要知道C的子集。尤其是,了解C标准库并不那么重要。但是,对于那些不了解核心C概念(如指针,数组和位旋转)的人,我会非常怀疑。


2

我需要学习C吗?

不,您不需要。期。

但是从长远来看,学习任何一种新的编程语言都是有益的。基于不同的编程范例学习语言更加有益。无论是OOP语言(Smalltalk或C ++),动态语言(Lisp,Clojure,Python),功能性(Lisp,Haskell,Erlang),并发(Erlang,Go,Algol 68,Smalltalk)还是其他任何形式(Fortran 03, Perl中,等)等新一届的模式冲击你相象; 学习不同的语言可以使您具有多种思维方式,每种思维方式在处理当前任务时各有优缺点。

Fortran在数字计算领域仍然占主导地位,COBOL仍然是大型保险公司的主流,Unix,BSD和Linux仍主要基于C。旧代码并不会随着时间的流逝而失去价值,因为它不一定会磨损如机械设备,需要随时间推移而更换。因此,旧的语言可以在就业与新语言的方面有价值的清凉因素。

就像可以自然地(人类)使用多种语言来学习可以提高您表达自己的能力一样,计算机语言也可以带来同样的好处。

因此,尽管我确实认为(随着时间的推移)学习流利的语言不仅很重要,而且要流利于多种编程范例,这一点更为重要。

我对C ++相当满意,就像我对这种语言感到满意一样,我已经阅读了Accelerated C ++,并且几乎完成了所有练习

我要备份一下,并说C ++是一种丰富而复杂的语言,要真正流利于它的所有丰富(或丑陋)的精妙之处,将需要花费多年的时间和不断的实践。

慢慢来,继续学习是我能给您的最重要的建议。对于其他人,我鼓励您阅读Peter Norvig的“十年自学编程”


1

对您的问题的一个简短回答是:这在很大程度上取决于您的需求。一些公司主要依赖于C,有时依赖于遗物(如果C已经在那里使用了多年的话)。其他公司与C没有任何关系。C是比Python或Java低的语言,许多应用程序编程可能不需要C的任何知识。与OOP语言不同,C需要不同的思维框架。我的意思是程序的结构和组织是不同的,必须考虑一些更细微的方面。可以这么说,学习成语通常是有益的,甚至只是扩大您的思维。但是同样,公司是否会在乎他们的需求。有些人可能会为您提供语言选择,有些人可能需要Java,其他人则需要C ++,其他人还是C,等等。您能生存吗?是,今天' 世界上有许多不同的编程领域,甚至您可能永远也不会通过C代码。你应该学习C吗?我会说-是的,无论以后使用什么。


1

有些人在了解C ++的同时可能不喜欢用C进行编程。

C ++周围有一个“保护性”结构,不仅可以驱动程序的结构,而且还可以驱动程序的算法。例如,在STL结构和算法的帮助下,显而易见的面向对象的编程方法,构造函数/析构函数,来自模板的附加抽象层...

虽然说C更简单,但是它迫使程序员自己将结构和算法注入到问题建模中。这极大地提高了编程自由度。
但这是有代价的,因为有些人需要更多的强制性结构,并且构建一个程序,随着程序的增大,该程序往往难以维护。我经常说问题不是C语言,而是它的作用。

话虽这么说,作为一名招聘人员,我很高兴会见一个具有强大C ++技能的人,但是如果她具有足够的语言自主权来开发整个C项目,那将更加热情。

而且,良好的C程序意味着具有良好的开发人员系统技能,因为该语言(通常)要求对系统组件有一定的了解才能构建有效的可运行程序。


我不会说这会增加程序员的自由度-您始终可以使用C ++编写自己的结构和算法。
DeadMG

0

如果您熟悉C ++,则不必担心学习C。C++与C相比有很多改进(使用构造函数/析构函数,基线容器,流和字符串支持RAII的功能很大)。

但是,我建议您学习printfscanf系列函数,以便您阅读使用它们的代码。它们在C ++中非常流行,因此了解它们的用法会有所帮助。我不建议在没有特殊原因的情况下在自己的代码中使用它们。


0

您唯一需要了解C的时间是是否希望产生C代码。如果没有,那就没有问题。

在过去的六年左右的时间里,我还没有专业地写过C。Java,C#或Python等其他语言(至少从生产力的角度,如果不是性能的话)至少可以更好地服务于许多应用程序域。您无疑可以在不接触C的情况下生存并甚至可以作为软件开发人员而蓬勃发展。

如果您想为自己的滥用而学习C,那很好。当您意识到90%的使程序可容忍的工具不再可用时,可能会有些失误,这取决于您对C ++的了解程度以及对C ++特定功能(模板,引用类型,STL,重载)的依赖程度。与C ++或Java相比,C中的类似内存管理之类的工作非常费力且乏味。C和C ++之间还存在一些不兼容性,并且随着每种新语言版本的出现,这种差距将不断扩大。

在某些应用程序领域中,C是最合适的工具:体积小,速度快,功能强大,而且不是汇编。但是对于一般的应用程序开发(尤其是GUI驱动的桌面应用程序),可以使用更好的工具。


-1

我认为,如果您对C ++感到满意,那么您也会对C感到满意。

两者之间的主要区别是C ++是干净的-面向对象-C不是:)


1
我是C ++的忠实拥护者,但我不会称之为干净。C ++是多范式的,这意味着好的C ++代码不一定是面向对象的。
KeithB

-1

了解C可以使您对内存管理等有更深入的了解。这全都与您想要获得的低层次知识以及了解较低级别的知识是否对您有帮助。您可以更进一步,也可以学习汇编语言,但这全都取决于它对您有多少价值。

这也取决于您是否要使用C进行编程。:)


-1

是的,没关系...

恕我直言,既然您擅长C++,那就足够了……

我敢打赌,有些行业正在寻找C ++程序员...但是一旦投入使用,这全都取决于您的项目需求。无论需要什么,您都必须学习。它可能是Java,.Net甚至C ..如果公司准备向您付款,请学习它...

如果您处于职业生涯的早期阶段,IME面试官往往会调查您的态度以及对您所熟悉的语言的理解。

不必C为求知识而学习,而要彻底地学习C ++。.改进您擅长的领域..我相信您可能需要学习很多...对我来说,C ++中总有一些东西要学习..: )


-1

我认为关于C最重要的事情是C和C ++之间的区别。你可能会看到一个其中有一些C风格在某些时候一些代码,你不应该混淆,当你看到喜欢的东西mallocfreeprintffopen,或fclose。您还应该知道它们与C ++的相似之处以及区别。

你也应该知道,<<并且>>是左,右移位运算符,而不是插入运营商。在C ++中,您可以重载运算符,但这些运算符已经被重载以执行流插入和类似的操作,但是它们仍然用于移位整数。

确保您了解C ++所没有的所有C ++基本功能。如果您足够了解stackoverflow.com,就会发现很多问题,涉及语言的差异以及人们对其的误解。

您还应该熟悉C预处理程序,它几乎与C ++预处理程序相同(并且经常与C ++预处理程序相同)。知道如何使用它会在C ++中对您有所帮助,但是在C中它更多地依赖于它。

C ++很难在C中处理的一件大事是析构函数。可以在所有地方调用这些东西,以节省资源,但是在C语言中,您必须更明确地执行所有这些操作。C ++程序员很容易忘记这样做。

就采访而言,如果有人要求您用C语言编写一些通用算法的代码,您会执行以下操作:

struct foo {
       int a;
       void * b;
};
foo x;  // in C++ this would work, but in C it would fail because struct names aren't in the
        // type name table unless you put them there with typedef

我认为他们不会因为您没有做而决定您不知道自己在做什么:

struct foo x;

而且他们真的不在乎您是否使用过,cout除非他们试图让您展示的是您处理输入和输出的能力,而C ++在常见情况下会更容易。

如果您确实找到了需要C的职位而接受了面试,那么您应该在与C ++重叠的地方预先了解C的知识。他们可能会理解,一个好的程序员应该能够相当快地从C ++过渡到C。

话虽这么说,C并不是一种语言。标准库比C ++的要小得多,让您熟悉它的最常见部分也没什么大不了的,因此学习它真的不会受到伤害。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.