Soll ich C lernen, bevor ich C ++ lerne? [geschlossen]

117

Ich habe heute einen Tag der offenen Tür der CS-Abteilung der Universität besucht und uns auf der Labortour zusammengesetzt, um mit ein paar Projekten von Studenten im letzten Jahr zu spielen. Eines war besonders gut - eine Art FPS-Asteroiden-Spiel. Ich beschloss, einen Blick in das srcVerzeichnis zu werfen, um festzustellen, dass es in C ++ erstellt wurde (die meisten anderen Projekte waren Java 3D-Apps).

Ich habe noch kein C gemacht, aber ich habe vorher einen C-Code durchgesehen. Von dem, was ich im CPP-Code in diesem Spiel gesehen habe, sah es nicht sehr anders aus.

Ich bin daran interessiert, entweder C oder C ++ zu lernen, werde aber wahrscheinlich später das andere lernen. Gibt es einen Vorteil für mich, wenn ich voreinander lerne und wenn ja, welchen?

Ross
quelle
Duplikat: stackoverflow.com/questions/171126/…
David Segonds
7
Es ist nicht wirklich ein Duplikat. Implizit fragt diese Frage auch "sollte ich zuerst OOP oder prozedurale Programmierung lernen"
Bobobobo
2
Vor dem Abstieg zu dem unten Antworten (IMO gehen sie in Kreisen), erlauben Sie mir einige Ratschläge zu bieten: TRUE : C ++ nicht alle Funktionen beibehalten und Attribute angewandt C, also implizit ‚ obsoleting ‘ C (der Punkt , die meisten Antworten unten try zu machen). JEDOCH : C ist nicht , nicht , nicht tot. Die Leute scheinen zu verstehen, dass es nicht nötig ist, beides zu lernen , aber in Wirklichkeit hat dies keine Grundlage. Borgen Syntax Ursprung von C, C ++! = C . Wenn Sie C ++ kennen, werden Sie NICHT zu einem qualifizierten C-Entwickler, und wenn Sie C kennen, werden Sie NICHT zu einem qualifizierten C ++ - Entwickler.
Super Cat
4
DAS SAGTE : Es schadet NICHT, C zu übernehmen, bevor man sich mit C ++ befasst. - Je mehr Sie wissen, desto besser sind Sie. - Im Gegenteil, Sie müssen C nicht lernen, wenn Sie das ultimative Ziel sind, C ++ zu lernen . WENN Sie C lernen wollen ++, gehen zu lernen C ++ , und wenn Sie möchten t lernen C, C gehen zu lernen . Beide haben Vor- und Nachteile (Die Einfachheit von C und die Tiefenmerkmale von C ++ sind auf ihre Weise Flüche und Segen), und beide werden noch heute verwendet (C für eingebettete Systeme, Unity, PHP usw. - C ++ auch für Unity, Unreal, etc).
Super Cat
3
PUNKT: Möchten Sie C ++ lernen? Dann überspringen Sie C. Sie brauchen es nicht. Willst du C lernen? Dann gut, lerne C. Wenn du beides lernen willst , dann gehe zuerst zu C. Sie haben beide ihren Platz in der Welt, also denken Sie nicht, dass einer für den anderen ausreicht.
Super Cat

Antworten:

121

Es ist nicht erforderlich, C zu lernen, bevor Sie C ++ lernen.

Sie sind verschiedene Sprachen . Es ist ein weit verbreitetes Missverständnis, dass C ++ in irgendeiner Weise von C abhängig ist und keine vollständig spezifizierte Sprache für sich.

Nur weil C ++ viel von der gleichen Syntax und der gleichen Semantik hat, heißt das nicht, dass Sie zuerst C lernen müssen.

Wenn Sie C ++ lernen, werden Sie schließlich den größten Teil von C lernen, mit einigen Unterschieden zwischen den Sprachen, die Sie im Laufe der Zeit lernen werden. Tatsächlich ist es sehr schwierig, richtiges C ++ zu schreiben, da fortgeschrittene C ++ - Programmierer dazu neigen, C / C ++ zu schreiben. Dies gilt unabhängig davon, ob Sie mit C begonnen haben oder mit C ++ begonnen haben.

Wenn Sie C zuerst kennen, ist dies ein gutes Plus für das Erlernen von C ++. Sie beginnen damit, einen Teil der Sprache zu kennen. Wenn Sie C nicht zuerst kennen, macht es keinen Sinn, sich auf eine andere Sprache zu konzentrieren. Es gibt viele gute Bücher und Tutorials, die Sie davon abhalten, nichts zu wissen, und alles abdecken, was Sie von C lernen würden, was auch für C ++ gilt.

Weitere Gründe finden Sie in dieser Antwort .

Brian R. Bondy
quelle
33
Ich konnte nicht mehr widersprechen. Das Erlernen von C ++ macht es zunächst sehr schwierig, zu C zurückzukehren. C ist eine grundlegende Systemsprache, die nur auf Grundlagen basiert. C ++ ist ein völlig neues Ballspiel. Die Herangehensweisen an jedes Problem in beiden Sprachen sind sehr unterschiedlich. Ich hatte das Glück, an C zu basteln, bevor ich in einen C ++ - Job sprang. Anschließend kann ich den von C ++ bereitgestellten syntaktischen Zucker mental "abkochen" und Probleme mit beiden Sprachen angehen. Es ist sehr einfach für mich, C als den Teil des Sprachpaars zu identifizieren, der "Sachen macht". Das erste Erlernen von C ++ führt zu verwirrten und irregeführten Programmierern.
Matt Joiner
24
@Matt: Ich habe zuerst C ++ gelernt und bin kein irregeführter Programmierer. Ihre Behauptung ist also nicht wahr, ein Beweis durch ein Gegenbeispiel. Und ja, ich habe auch ein goldenes Abzeichen in C. Die Wahrheit ist, dass es sich um zwei verschiedene Sprachen handelt. Sie benötigen keine Sprache als Abhängigkeit, um die andere zu lernen. Das ist nur ein dummes Missverständnis.
Brian R. Bondy
8
@Matt: Auch aus meinem verlinkten Beitrag: Sie sollten zuerst C ++ lernen, nicht weil das Erlernen von C Sie zuerst verletzt, nicht weil Sie etwas verlernen müssen (Sie werden es nicht tun), sondern weil es keinen Vorteil hat, zuerst C zu lernen. Sie werden schließlich sowieso fast alles über C lernen, da es mehr oder weniger in C ++ enthalten ist.
Brian R. Bondy
11
@ Matt: Es tut mir leid, dass Sie immer noch nicht verstehen. Zeichnen Sie ein Venn-Diagramm von C und C ++ und betrachten Sie die sich überschneidenden Teile. C ++ besteht aus dem gesamten C ++ - Kreis, den Sie zeichnen, und nicht nur aus den Teilen, die sich nicht schneiden. Wenn Sie C zuerst kennen, was gut für Sie ist, können Sie C ++ schneller lernen. Wenn Sie C nicht zuerst kennen, gibt es keinen Grund, es zuerst zu lernen. Gehen Sie davon aus, dass nicht jedes Buch über C ++ Zeiger und Speicherverwaltung sowie Zeichenfolgenliterale usw. behandelt? Ich werde jetzt aufhören zu diskutieren, aber Sie können gerne Ihre abschließenden Kommentare hinterlassen.
Brian R. Bondy
11
@Matt: Wie führt C zu einem besseren Verständnis von C ++? Normalerweise schreiben C-Programmierer, die C ++ lernen, hässlichen, fehleranfälligen Code im Stil "C mit Klassen". Ich sage nicht, dass dies immer passiert, aber es ist der natürlichste Fortschritt, wenn man mit C beginnt, weil C diesem schrecklichen Stil von C ++ viel näher ist als dem "modernen" C ++.
Jalf
76

Ich liebe diese Frage - es ist wie die Frage "Was soll ich zuerst lernen, Snowboarden oder Skifahren"? Ich denke, es kommt darauf an, ob du snowboarden oder Ski fahren willst. Wenn Sie beides tun möchten, müssen Sie beides lernen.

In beiden Sportarten rutschen Sie mit Geräten, die ausreichend ähnlich sind, um diese Frage zu provozieren, auf Schnee einen Hügel hinunter. Sie sind jedoch auch so unterschiedlich, dass das Lernen des einen beim anderen nicht viel hilft. Gleiches gilt für C und C ++. Während sie Sprachen zu sein scheinen, die in der Syntax hinreichend ähnlich sind, unterscheidet sich die Denkweise, die Sie zum Schreiben von OO-Code benötigen, von prozeduralem Code, sodass Sie so ziemlich von vorne beginnen müssen, unabhängig davon, welche Sprache Sie als zweites lernen.

cdonner
quelle
70

Ich habe zuerst C gelernt und einen Kurs in Datenstrukturen mit C belegt, bevor ich C ++ gelernt habe. Das hat bei mir gut funktioniert. Ein Datenstrukturkurs in C gab mir ein solides Verständnis für Zeiger und Speicherverwaltung. Es machte auch die Vorteile des objektorientierten Paradigmas deutlich, nachdem ich gelernt hatte, was es war.

Auf der anderen Seite habe ich durch das erste Erlernen von C einige Gewohnheiten entwickelt, die mich anfangs dazu veranlassten, schlechten C ++ - Code zu schreiben, z. B. die übermäßige Verwendung von Zeigern (wenn C ++ - Referenzen dies tun würden) und des Präprozessors.

C ++ ist wirklich eine sehr komplexe Sprache mit vielen Funktionen. Es ist jedoch nicht wirklich eine Obermenge von C. Vielmehr gibt es eine Teilmenge von C ++, die aus den grundlegenden prozeduralen Programmierkonstrukten (Schleifen, Wenns und Funktionen) besteht und C sehr ähnlich ist. In Ihrem Fall würde ich damit beginnen und mich dann zu fortgeschritteneren Konzepten hocharbeiten wie Klassen und Vorlagen.

Das Wichtigste, IMHO, ist es, frühzeitig verschiedenen Programmierparadigmen wie prozedural, objektorientiert, funktional und logisch ausgesetzt zu sein, bevor Ihr Gehirn in eine Sichtweise auf die Welt einfriert. Im Übrigen würde ich Ihnen auch dringend empfehlen, eine funktionale Programmiersprache wie Scheme zu lernen. Es würde Ihren Horizont wirklich erweitern.

Dima
quelle
18

Wenn Sie sich entscheiden, beide zu lernen (und wie andere bereits erwähnt haben, besteht keine explizite Notwendigkeit, beide zu lernen), lernen Sie zuerst C. Der Wechsel von C nach C ++ fühlt sich wie ein natürlicher Fortschritt an. In die andere Richtung zu gehen, fühlt sich an, als würde man absichtlich eine Hand hinter dem Rücken binden. :-)

Head Geek
quelle
13

Ich denke, du solltest zuerst C lernen, weil ich zuerst C gelernt habe. C gab mir einen guten Einblick in die Syntax und Fallstricke mit Dingen wie Zeigern, die alle in C ++ fließen.

Ich denke, C ++ macht es einfach, all diese Fallstricke zusammenzufassen (benötigen Sie ein Array, das nicht überläuft, wenn Sie den Operator [] und einen zwielichtigen Index verwenden? Sicher, erstellen Sie eine Array-Klasse, die Grenzüberprüfungen durchführt), aber Sie müssen wissen, was Sie sind und werden von ihnen gebissen, bevor Sie verstehen, warum Dinge auf bestimmte Weise getan werden.

Wenn alles gesagt und getan ist, ist die Art und Weise, wie C ++ normalerweise gelehrt wird, "C ++ ist C mit Objekten, hier ist das C-Zeug und hier ist, wie all dieses OO-Zeug funktioniert", so dass Sie wahrscheinlich vor jedem echten C ++ grundlegendes C lernen werden, wenn Sie folge sowieso den meisten Texten.

Adam Hawes
quelle
Ich bin nicht einverstanden. Jedes C ++ - Programmierbuch, das es wert ist, behandelt zumindest einige der "Fallstricke", z. B. wie Arrays funktionieren (und wie ein Überlauf verhindert wird)
moonman239
11

Ich werde der Mehrheit hier nicht zustimmen. Ich denke, Sie sollten C lernen, bevor Sie C ++ lernen. Es ist definitiv nicht notwendig, aber ich denke, es macht das Erlernen von C ++ viel einfacher. C ist das Herzstück von C ++. Alles, was Sie über C lernen, ist auf C ++ anwendbar, aber C ist viel kleiner und einfacher zu lernen.

Nehmen Sie K & R und lesen Sie das durch. Es ist kurz und vermittelt Ihnen einen ausreichenden Sinn für die Sprache. Sobald Sie die Grundlagen von Zeigern und Funktionsaufrufen kennen, können Sie etwas einfacher zu C ++ übergehen.

Steve Rowe
quelle
15
Falsch. So ziemlich alles, was C Ihnen beibringt, ist eine schlechte Praxis in C ++. C ist nicht das Herzstück von C ++, es teilt einfach eine Menge Syntax. Bitte, die Welt hat bereits mehr als genug "C mit Klassen" -Programmierer. Lerne entweder C oder C ++. Aber tun Sie nicht so, als wäre C eine C ++ - Lite.
Jalf
13
Ich stehe zu meinen Worten. C ++ baut auf C auf und daher ist C das Herzstück. Die in C ++ verwendeten Redewendungen unterscheiden sich stark von denen in C, aber die Syntax ist dieselbe. Man kann lernen, wie man C ++ ab C richtig programmiert. Schauen Sie sich C ++ Primer an. Das macht es im Grunde.
Steve Rowe
6
+1. C ist eine kleinere Sprache und daher leichter zu lernen. Der Versuch, abwärtskompatibel mit C zu sein, ist eine der Hauptprobleme bei C ++, eine andere ist das Vorlagensystem, das für 90% der C ++ - Programmierer zu kompliziert ist.
Hillu
1
Ein Verständnis der Variablen, Typen [einschließlich Zeiger und Qualifikationen], des Bereichs, der Funktionen, des Präprozessors und der Verknüpfung ist sowohl für C als auch für C ++ von wesentlicher Bedeutung. Ich würde sagen, dass das Erlernen dieser Konzepte mit C einfacher ist, damit Sie sich nicht auch mit dem Wissen um Klassen, einer anderen Bedeutung von staticVorlagen (und den lächerlich einschüchternden Vorlagenfehlern, die Compiler ausgeben) usw.
befassen müssen
1
Du hast einen Punkt. Tatsächlich kann es gut sein, C zu lernen, damit Sie dann mit einer besseren Kenntnis seiner Wurzeln zu C ++ übergehen können.
Daniel Daranas
10

Während des Lernens von C ++ lernen Sie auch den größten Teil von C. Aber denken Sie daran, dass viel C ++ - Code nicht gültig ist. C. C ++ wurde so konzipiert, dass es mit C-Code kompatibel ist. Ich würde also sagen, lernen Sie zuerst C ++. Brian hat diesbezüglich eine großartige Antwort geschrieben .

John T.
quelle
8

Wenn Sie C lernen, müssen Sie zum Zeitpunkt des Schreibens Ihres Codes über einige Themen wie explizite und implizite Speicherverwaltung oder Speichergrößen grundlegender Datentypen nachdenken.

Sobald Sie einen Punkt erreicht haben, an dem Sie sich mit den Funktionen und Fehlfunktionen von C vertraut fühlen , werden Sie wahrscheinlich weniger Probleme haben, in C ++ zu lernen und zu schreiben.

Es ist durchaus möglich, dass der C ++ - Code, den Sie gesehen haben, nicht viel anders aussah als Standard C, aber das kann durchaus daran liegen, dass er nicht objektorientiert war und keine Ausnahmen, Objektorientierung, Vorlagen oder andere erweiterte Funktionen verwendete.

Hillu
quelle
8

Nein.

Es ist im Allgemeinen nützlicher, C ++ zu lernen, da es näher an den modernsten OO-basierten Sprachen wie Eiffel oder C # liegt.

Wenn Sie C ++ lernen möchten, lernen Sie zunächst modernes Standard-C ++. Lass die Mallocs beiseite.


Aber Steve Rowe hat Recht ...

Daniel Daranas
quelle
C ++ ist heutzutage nicht näher an OO-Sprachen wie C # oder Eifel.
Einpoklum
7

Wie die Antworten auf viele andere Fragen im Leben kommt es darauf an. Dies hängt von Ihren Programmierinteressen und -zielen ab. Wenn Sie Desktop-Anwendungen programmieren möchten, möglicherweise mit einer grafischen Benutzeroberfläche, ist C ++ (und OOP) wahrscheinlich der bessere Weg. Wenn Sie an Hardwareprogrammierung auf einem anderen als einem x86-Chipsatz interessiert sind, ist C häufig die bessere Wahl, normalerweise aufgrund seiner Geschwindigkeit. Wenn Sie einen neuen Media Player erstellen oder eine Geschäftsanwendung schreiben möchten, würde ich C ++ wählen. Wenn Sie wissenschaftliche Simulationen von Galaxienkollisionen oder Fluiddynamiken durchführen möchten, sehen Sie sich die Kraft von C an.

Scottie T.
quelle
4
In vielen Hochleistungsrechnerszenarien spielen diese wenigen hundert Taktzyklen tatsächlich eine Rolle.
Scottie T
1
@ScottieT: Angesichts der Tatsache, dass restrictC außer dem Spezifizierer kein anderes leistungsbezogenes syntaktisches / semantisches Konstrukt hat als C ++, warum genau sollte C ++ - Code mit seiner reichhaltigeren Syntax und z. B. Metaprogrammierung langsameren Code liefern? Kennen Sie sogar Ausdrucksvorlagen?
Sebastian Mach
1
@phresnel: Relevanz. C ++ ist eine äußerst komplexe Sprache mit Funktionen, die sich oft nicht lohnen. In der Regel bietet C die gleichen Leistungsmöglichkeiten wie C ++ zu deutlich geringeren Komplexitätskosten.
Matt Joiner
1
@MattJoiner: Wartbarkeit / Erweiterbarkeit sind ebenfalls Leistungsfaktoren, obwohl mir klar ist, dass wissenschaftlicher Code oft nur einmal ausgeführt wird. Wenn ich jedoch das Argument expression-templates (als Beispiel) wiederhole, sage ich, dass C ++ mehr Optimierungsmöglichkeiten bietet (auch weil es einfacher ist, Ausdrucksvorlagencode als intrinsischen Code zu schreiben), mit einer Ausnahme ( restrictdie jedoch Alle wichtigen C ++ - Compiler bieten eine Erweiterung an. Und glauben Sie wirklich, dass es bei gleichem Code bei gleichem Compiler einen Leistungsunterschied zwischen C ++ und C geben wird? [...]
Sebastian Mach
1
@MattJoiner: [...] und wenn ich Aussagen wie "so sehr ich C ++ nicht mag" lese, kann ich die Annahme aufbauen, dass Sie in dieser Diskussion leicht voreingenommen sind. Was genau macht Ihrer Meinung nach die Leistung von C ++ - Code schlechter? Wenn C die gleichen Leistungsmöglichkeiten bietet, was entspricht Ausdrucksvorlagen, Vorlagen im Allgemeinen, Berechnungen zur Kompilierungszeit für nicht intrinsische Datentypen und Funktoren? Und Hinzufügen des Kosten- / Wartbarkeitsfaktors: RAII, Überladung von Operatoren / Funktionen, generische Standardcontainer, Standardthreads, generische Standardalgorithmen, Referenzen?
Sebastian Mach
7

Ich denke, C zuerst zu lernen ist eine gute Idee.

Es gibt einen Grund, warum Comp-Sci-Kurse immer noch C verwenden.

Meiner Meinung nach besteht die Verpflichtung, OOP zu verlangen, darin, jegliches "Gedränge" des Gegenstands zu vermeiden.

Ich denke, dass prozedurale Programmierung der natürlichste Weg ist, zuerst Programmieren zu lernen. Ich denke, das ist wahr, denn am Ende des Tages ist es das, was Sie haben: Codezeilen, die nacheinander ausgeführt werden.

Viele heutige Texte verfolgen einen "Objekte zuerst" -Ansatz und beginnen, über Autos und Schaltvorgänge zu sprechen, bevor sie Arrays einführen.

Bobobobo
quelle
4
Es scheint, dass heutzutage viele Comp-Sci-Kurse Java verwenden, was das Problem, über das Sie sprechen, verschärft.
Dima
2
Sie machen einen sehr guten Punkt. C ++ ist nicht nur viel zu kompliziert für eine Muttersprache, sondern fördert auch größtenteils das Verbergen von Interaktionen auf niedriger Ebene mit dem Betriebssystem und dem Speicher, die für einen guten Informatikunterricht von entscheidender Bedeutung sind. Arrays sollten lange vor Objekten unterrichtet werden.
Matt Joiner
1
Wenn Sie jedoch nicht schlecht in Mathematik sind, ist die funktionale Programmierung möglicherweise natürlicher, da sie vertrauter aussieht, sich anfühlt und funktioniert.
Sebastian Mach
2
"Es gibt einen Grund, warum Comp-Sci-Kurse immer noch C verwenden." Ja, weil die meisten Comp-Sci-Kurse schlecht unterrichtet werden.
Leichtigkeitsrennen im Orbit
6

Nachdem ich beobachtet habe, dass Menschen, die zuerst Java gelernt haben, mit den Konzepten der Zeiger und der Speicherverwaltung in C ++ zu kämpfen haben, würde ich sagen, dass das Erlernen von C zuerst eine gute Idee ist, um diese beiden Konzepte zu verstehen, die von den Komplexitäten anderer C ++ isoliert sind Eigenschaften.

TrayMan
quelle
5

Meine zwei Cent:

Ich schlage vor, zuerst C zu lernen, weil:

  • es ist eine grundlegende Sprache - viele Sprachen stammen von C ab
  • Mehr Plattformen unterstützen C-Compiler als C ++ - seien es eingebettete Systeme, GPU-Chips usw.
  • Laut TIOBE-Index ist C immer noch etwa zweimal beliebter als C ++.
Agnius Vasiliauskas
quelle
3

Ich denke, C ist eine wirklich schöne Programmiersprache, es ist kompakt und etwas leicht zu lernen. Wenn Sie jedoch nur C ++ lernen möchten, beginnen Sie mit C ++. aber ich schlage vor, dass Sie beide lernen. und wenn du das machen willst; Ich denke, es ist besser, mit c zu beginnen. wie gesagt: es ist klein und etwas leicht zu lernen. könnte ein guter Schritt zu einer komplexeren Programmiersprache wie c ++ sein. (da c Ihnen einige Grundlagen bietet)

Viel Glück.

Marnix v. R.
quelle