C notwendig für C++?



  • Ethon schrieb:

    Nathan schrieb:

    Imo hindert ein Wissen über C einen daran, guten C++-Code zu schreiben. Der wird dann eher - C.
    Dasselbe wie mit Wissen über Java, das wird dann auch Java in C++.

    Finde ich absolut nicht. Ohne C-Kenntnisse versteht man recht wenig von der Funktionsweise der Abstraktionen von C++ und naja - C++ bietet mehr als genug Stolperfallen.

    Der Meinung bin ich auch.

    Wie will man eine Liste verstehen, wenn man nicht einmal weiß, wie man es in C mit Zeigern realisieren würde?

    Jeder Programmierer sollte daher C können, an C geht kein Weg vorbei. Dies gilt auch dann, wenn man heute in anderen Sprachen programmiert.

    Etwas anders sieht es vielleicht bei funktionalen Sprachen wie Haskell aus, aber das ist ein komplett anderes Thema, so wie Äpfel und Birnen.
    Aber auf C baut fast alles gängige auf, C++, Java, C#, D und viele andere.



  • C sind Grundlagen schrieb:

    Wie will man eine Liste verstehen, wenn man nicht einmal weiß, wie man es in C mit Zeigern realisieren würde?

    Was hat das mit C zu tun? Das kann man in C++ genauso ohne C lernen zu müssen. C++ besitzt die Zeiger ja ebenso, dennoch muss man nicht C-APIs lernen um dieses Thema zu verstehen.

    C sind Grundlagen schrieb:

    Jeder Programmierer sollte daher C können, an C geht kein Weg vorbei. Dies gilt auch dann, wenn man heute in anderen Sprachen programmiert.

    Merkwürdig: Ich habe nie C gelernt und programmiere inzwischen etwa 15 Jahre beruflich (Vorwiegend übrigens mit C++). Das (sehr) wenige wirklich rein "C-spezifische" das ich brauche (und das auch nur wegen ein paar C-APIS die ich beruflich einsetzen musste), habe ich mir später angeeignet.

    C sind Grundlagen schrieb:

    Aber auf C baut fast alles gängige auf, C++, Java, C#, D und viele andere.

    Man braucht kein bisschen pures C um C++, Java und C# zu lernen, eher im Gegenteil wenn ich mir den Code anschaue, den manche die aus der C-Welt kamen in eben jenen Sprachen produziert haben (Das mag nicht zwangsweise an C gelegen haben, nur war die Schnittmenge schlecht wartbaren Codes bei diesen Programmierung wesentlich höher als in anderen Gruppen).

    Wer C++ lernen will, braucht nur ein gutes C++ Buch. Das was er von "C" braucht (sagen wir lieber: von der Schnittmenge die in C und C++ identisch sind), deckt ein solches Buch in der Regel auch ab. Beispielsweise Zeiger (wenn dies ggf. aber an einer anderen [späteren] Stelle als in einem C-Buch vorkommt).



  • asc schrieb:

    [...]

    👍



  • interessant. Falls das stimmen sollte, dann für asc und dich eine ...

    ... Aufgabe: Schreibe ein Programm, das "hello, world" ausgibt, und zwar 1) in C++ und 2) unter Verzicht auf alle Sprachelemente, die auch in C vorkommen. Müßte ja einfach sein, wenn man in C++ angeblich kein C braucht.

    "main" fällt schon mal weg (das wird dem Linker gar nicht gefallen), das Semikolon auch, geschweifte Klammern dito. #include und die spitzen Klammern natürlich auch.

    Da wird es aber ziemlich eng mit der Auswahl an Sprachelementen, würde ich meinen:

    iostream 
    
    std::cout <<         << std::endl
    

    Soviel zur immer wieder aufpoppenden Behauptung, man könnte in C++ programmieren, ohne C zu benutzen.



  • großbuchstaben schrieb:

    ... Aufgabe: Schreibe ein Programm, das "hello, world" ausgibt, und zwar 1) in C++ und 2) unter Verzicht auf alle Sprachelemente, die auch in C vorkommen. Müßte ja einfach sein, wenn man in C++ angeblich kein C braucht.

    Du bist auch aus deinem Vater und deiner Mutter hervorgegangen, heißt das du musst dich zwangsweise wie Selbige verhalten?

    C++ ist schon lange nicht mehr ein um Klassen aufgebohrtes C, sondern hat sich in eine eigenständige Sprache weiter entwickelt - die aber weitgehend (aber nicht komplett) zu C abwärtskompatibel ist. Eine Schnittmenge von Sprachelementen sagt nicht, das man beide Sprachen lernen muss, oder das eine Sprache eine andere ist.

    Man muss nicht separat C lernen um C++ zu können. Wenn ein Sprachelement in C++ wichtig ist, wird es auch in einem C++ Buch beschrieben, unabhängig ob es aus einer anderen Sprache übernommen wurde oder nicht. "Kindergarten" mag in Deutsch und Englisch existieren geschrieben werden, das heißt dennoch nicht das man beide Sprachen beherrschen muss.

    Ich kenne bis heute nur einen sehr kleinen Teil der C-API (ich nutze nur den Teil, für den bislang keine eigene C++ Bibliothek geschrieben wurden ist; würde ich C++11 nutzen können, bräuchte ich noch weit weniger als bislang). Auch bin ich z.B. mit malloc und free nur in einem Projekt überhaupt in Berührung gekommen, und das auch nur weil ein anderer Programmierer diese wild mit new/delete gemischt hat, und ich die Fehler ausbauen durfte.

    Man nutzt in C++ in der Regel andere APIs und nur einen Teil der vorhandenen Schnittmenge beider Sprachen. Auch die Denk- und Lösungsansätze sind häufig andere.



  • DerNewb schrieb:

    Hi, wie der Titel schon verraten mag würde ich gerne wissen ob es sich lohnt C++ zu lernen wenn man C noch nicht kann.
    Ich bin ein (wie mein Name schon sagt ^^) extremer Grünschnabel. Ich habe nun einfach Sätze - ich weiß nicht - "programmiert" halt mit Zeilenumbruch und so, einfache Rechenarten berechnet und war gerade dabei mir anzugucken wie man Bedingungen einbaut.

    Das ganze wird so oder so ein Flamewar und beide Parteien haben recht.
    C++ ist eine Erweiterung zu C. Nun gibt es zwei Sichten: Die übliche Sicht ist, dass C-Entwickler eine veraltete Denke haben und man daher auf gar keinen Fall C lernen sollte, damit man diese veraltete Denke nicht übernimmt und die zweite Sicht, die ich eher teile, dass C nunmal die Grundlage von C++ ist. Ich habe erst C gelernt, und als ich C++ lernte, hat sich gezeigt, dass ich in vielen Dingen schon die C++-Denke hatte.

    Vollkommen unabhängig davon, wie Du Dich entscheidest, Du wirst zu Beginn die wichtigsten Datentypen kennenlernen, Du wirst lernen Funktionen zu schreiben und diese zu rufen, Bedingungen und Schleifen zu formulieren. usw. Ohne die Grundlagen von C++, die nunmal C komplett ausmachen, kannst Du auch kein C++ programmieren, denn C++ formuliert keine (bzw. ab C11 wenige) neue Konstrukte für Bedingungen und Schleifen - und das Grundprinzip ist letztlich doch bei allen identisch.
    Wenn Du nun ein C++ Buch kaufst, wirst Du dieselben Grundregeln lernen, als würdest Du ein C Buch kaufen. Du wirst einige Details anders lernen, dass Du std::cout zur Ausgabe nutzt statt printf(), aber printf() ist in C++ genauso enthalten und löst weiterhin dasselbe Problem.

    Die Diskussion ist also heute eher akademischer Natur und wenn ich ehrlich bin, würde ich mich darauf gar nicht erst einlassen. Wenn Du die Grundlagen lernen möchtest, kauf Dir ein C Buch, wenn es Dir gefällt oder ein C++-Buch, wenn Dir dieses besser gefällt: Es steht dasselbe drin - im C++ Buch nur kürzer.

    Mein Tipp ist eher, kauf Dir kein Buch, was dicker als 300 Seiten ist. Dickere Bücher arbeitet kein Mensch durch und häufig ist da viel Blabla-Text nur drin, um das Buch dick zu machen.
    Viele C++ Bücher arbeiten die Grundlagen dann sehr schnell durch, um mehr Platz für C++-Features zu haben und wer C++ lernt, kann häufig schon die Grundlagen aus einer anderen Programmiersprache.

    DerNewb schrieb:

    Nun hab ich irgendwie das blöde Gefühl, dass ich C erstmal lernen sollte, weil ich in einem Begleitheft zu einem Kurs gelesen habe, dass die Kenntnisse über C vorausgesetzt waren für die Kurse. Nun ... was ist denn jetzt?

    Das bedeutet in meiner Meinung nach, dass Du z.B. Funktionen, Bedingungen und Schleifen drauf haben solltest und vielleicht eine Vorstellung davon, wie Du ein Problem alleine mit diesen Mitteln formuliert bekommst, bevor Du in diesen Kurs gehst und mehr darüber lernst, wie man Probleme und Quelltexte besser aufbauen kann, als es C-Anfänger üblicherweise tun. Die Quelltexte eines C-Profis unterscheiden sich kaum von einem C++-Semiprofessionellen.
    Als C++ Profi wirst Du jedoch Möglichkeiten haben, die deutlich über C hinaus gehen - ich gehe aber nicht davon aus, dass Dein Kurs das leisten wird.

    Um "Profi" zu werden wird ein Buch oder Kurs soweiso nicht reichen, Du wirst mit vielen Leuten diskutieren und nicht wenige werden Dir erklären, dass Du das alles total falsch machst. Je mehr Meinungen Du gehört hast, desto eher wirst Du eine gute Lösung für Dein Problem finden. Ganz am Anfang aber ist Dein Problem aber die Grundlagen der Programmierung zu lernen und da ist es einfach wichtig, ein halbwegs passendes Buch zu öffnen und mit dem Lernen anzufangen und später im Kurs den Mund aufzumachen, wenn Du etwas nicht verstanden hast.



  • Jetzt wird die Diskussion aber echt unsinnig...
    Als ob mit der Frage gemeint ist, ob man for-Schleifen & co kennen sollte 🙄

    Wenn mit der Frage gemeint ist, ob man pures C beherrschen muss, um C++ zu können, dann von mir ein klares nein!

    Ich könnte zumindest kein fehlerfreies C-Programm ohne Kompiler-Check schreiben (schon allein, weil ich mit Sicherheit nicht daran denken würde, Variablen am Funktionsanfang zu deklarieren).
    Komme aber trotzdem gut klar mit C++.



  • C sind Grundlagen schrieb:

    Wie will man eine Liste verstehen, wenn man nicht einmal weiß, wie man es in C mit Zeigern realisieren würde?

    Wie will man Zeiger in C verstehen wenn man das sowas nie in Assembler geschrieben hat? Wie will man Assembler verstehen wenn man nie eine CPU designed hat? ... Wie will man Strom verstehen wenn man nie ... 😉
    Man setzt halt auf irgendeiner Abstraktionsebene an. Es ist manchmal gut wenn man auch die tieferliegenden kennt, aber nicht immer nötig. Das ist ja grad das tolle an Abstraktion solange sie nicht leaky ist. 🙂



  • asc schrieb:

    C sind Grundlagen schrieb:

    Wie will man eine Liste verstehen, wenn man nicht einmal weiß, wie man es in C mit Zeigern realisieren würde?

    Was hat das mit C zu tun? Das kann man in C++ genauso ohne C lernen zu müssen. C++ besitzt die Zeiger ja ebenso, dennoch muss man nicht C-APIs lernen um dieses Thema zu verstehen.

    Wenn man C auf die C-Standard-Bibliothek reduziert - dann stimme ich dir halb zu, mittlerweile ist doch ein großer Teil davon als C++-Variante verfügbar. (Vor C++11 gab's aber zb noch kein <chrono> oder <random> )

    Aber mit C-Programmierung assoziere ich in erster Linie die "dreckige" Lowlevel-Arbeit. Und bei der ist es nicht schlecht sie zu verstehen, nur weil es std::string gibt bedeutet das imho nicht dass man keine Ahnung haben sollte wie man in C mit Strings umgehen würde.



  • Ethon schrieb:

    Aber mit C-Programmierung assoziere ich in erster Linie die "dreckige" Lowlevel-Arbeit. Und bei der ist es nicht schlecht sie zu verstehen, nur weil es std::string gibt bedeutet das imho nicht dass man keine Ahnung haben sollte wie man in C mit Strings umgehen würde.

    Jedes gute C++ Buch geht auf Zeiger ein, dazu muss man sich nicht mit C-Strings rumquälen. Ich finde diesen Weg auch gut, ein Anfänger lernt schrittweise besser, man sollte nicht alle Komplexität gleich an den Anfang stellen. In C++ kann man sich schon an einfache Programme mit Ein-/Ausgabe heran tasten, ohne sich gleich um Zeiger zu kümmern.

    Nutzt ihr Geräte erst, nachdem ihr sie anfangs zerlegt habt? Man kann auch erst das "Nutzen" lernen, bevor man in die Details geht.

    Xin schrieb:

    Ohne die Grundlagen von C++, die nunmal C komplett ausmachen...

    Dem widerspreche ich schon. Die Grundlagen die man für die sinnvolle C++ Programmierung benötigt, machen C eben nicht komplett aus. Man benötigt nicht Alles was die Sprache C anbietet um gutes C++ zu schreiben. Ebenso wie man kein C++, Java und Delphi können muss, um C# zu lernen (Und C# basiert u.a. auf diesen Sprachen).



  • asc schrieb:

    Jedes gute C++ Buch geht auf Zeiger ein, dazu muss man sich nicht mit C-Strings rumquälen. Ich finde diesen Weg auch gut, ein Anfänger lernt schrittweise besser, man sollte nicht alle Komplexität gleich an den Anfang stellen.

    Damit "quäle" ich meine C-Schüler in der Hälfte der Zeit. Ich wüsste nichts, woran man besser lernen kann, mit Zeigern umzugehen, sämtliche sonstigen Konstrukte drumrumbauen kann und sich auch noch mit einem einfachen printf() zeigen zu lassen, ob das nun funktioniert hat.
    Wer den C-String nicht beherschen kann, braucht in meinen Augen nicht mit OOP oder abstrakteren Konzepten anzufangen.

    Die wichtigste Erkenntnis, die meine Schüler daraus mitnehmen ist: Zeiger sind nicht kompliziert, sondern primitiv. Und darauf kann man dann komplexere Ideen wie eigene Wrapper-Klassen oder shared_ptr aufbauen.
    Jeder programmiert bei mir seine eigene String-Klasse... Substrings ausschneiden oder Strings einfügen... alles tolle algorithmische Übungen, um Programmieren zu lernen.

    asc schrieb:

    Nutzt ihr Geräte erst, nachdem ihr sie anfangs zerlegt habt? Man kann auch erst das "Nutzen" lernen, bevor man in die Details geht.

    Ich mache auch Geräte-Tauchen. Die Geräte werden vor jedem Tauchgang unter Aufsicht des Partners zusammengebaut, getestet, dann zusätzlich vom Partner getestet und am Ende des Tauchgangs zerlegt und gereinigt. Das "Buddy-System" beim Tauchen nennt man in der Informatik "Pair-Programming". Habe ich schon mal gesehen, macht aber kaum einer.

    Wenn unter Wasser etwas passiert, versteht man warum und wie man das Problem beseitigt. Und bei zwei ausgebildeten Tauchern, wissen beide, wer welche Aufgabe hat, um das Problem zu lösen. Dafür muss man die Details der eigenen Ausrüstung kennen und die des Tauch-Partners.

    Es gibt eine Ausnahme: Schnuppertaucher. Da baue ich mein Zeug und das Gerät des Schnupperers zusammen und teste beide. Wenn da etwas passiert, muss ich reagieren. Passiert mir was, muss ich alleine klarkommen. Darum darf ich mit dem Schnupperer nicht tief tauchen und der Schnupperer ist immer in Griffreichweite.
    Wenn ich etwas professionell lernen will, dann muss ich kapieren, was und warum ich etwas tue. Das nicht zu wissen ist beim Tauchen potentiell gesundheitsgefährdend. Es ist legal ohne Tauchlehrer und Tauchschein (genauer gesagt ohne Ahnung) mit einer irgendwie zusammengebauten Ausrüstung ins Wasser zu steigen und zu tauchen. Aber das dann wirklich sehr gefährlich, bis hin zu tödlich und dafür muss nichtmals die Ausrüstung versagen.
    Und so ist es in der Programmierung nunmal auch.
    Wer sein Programm nicht zerlegen und testen kann, kann nicht sicherstellen, dass es im Einsatz nicht versagt. Darum wissen diejenigen, denen ich C/C++ beibringe, was ein C-String ist.
    Nun bleibt die Frage, was der Threadstarter werden will: Programmierer oder Schnupperprogrammierer, wo ein richtiger Programmierer immer in Reichweite sein muss?

    Wenn er nur mal zum Spaß reinschaut, spricht nichts gegen std::string. Wenn er es ernst meint, zum Einstieg eine ganze Menge.

    asc schrieb:

    Xin schrieb:

    Ohne die Grundlagen von C++, die nunmal C komplett ausmachen...

    Dem widerspreche ich schon.

    Und ich lasse mich nicht auf einen Flamewar ein, weil er weder Dir noch mir, noch dem Threadstarter etwas bringt und in diesem Forum schon tausendmal geführt wurde. Es interessiert einfach nicht, weil ich recht habe und Du auch. Man braucht nicht alles, um gutes C++ zu schreiben. Es schadet aber nicht, sich auch in C umzusehen - im Gegenteil.
    Wenn wir beide Recht haben - wozu diskutieren?



  • Xin schrieb:

    Man braucht nicht alles, um gutes C++ zu schreiben. Es schadet aber nicht, sich auch in C umzusehen - im Gegenteil.
    Wenn wir beide Recht haben - wozu diskutieren?

    Weil eben das "Es schadet aber nicht, sich auch in C umzusehen - im Gegenteil" in allen Projekten in denen ich mitgearbeitet habe, und ehemalige C-Programmierer waren, nicht stimmte. Wobei ich auch keine Systemprogrammierung mache - dort mag es wirklich sinnvoll sein C gut zu beherrschen.



  • asc schrieb:

    Xin schrieb:

    Man braucht nicht alles, um gutes C++ zu schreiben. Es schadet aber nicht, sich auch in C umzusehen - im Gegenteil.
    Wenn wir beide Recht haben - wozu diskutieren?

    Weil eben das "Es schadet aber nicht, sich auch in C umzusehen - im Gegenteil" in allen Projekten in denen ich mitgearbeitet habe, und ehemalige C-Programmierer waren, nicht stimmte.

    Lies nochmal mein erstes Posting: Wer heute C lernt, lernt heute C und nicht vor 20 Jahren. Ich habe vor ... 20 Jahren C programmiert und als ich meine Software auf C++ hievte, lies sich das zu mindestens 95% automatisiert über einen Makro-Editor bewerkstelligen, weil ich offenbar C++ ähnliches C programmiert habe. Ich habe mein erstes C++-Buch wie eine Offenbarung gelesen, weil C++ genau die Sprache war, in der ich meine Software organisierte - nur dass ich eben in C programmierte.

    Wenn Deine Kollegen sich 20 Jahre nicht weiterentwickelt haben, dann ist das kein C-Problem, sondern ein Problem Deiner Kollegen, das Dir heute genauso gut im Java- oder C#-Umfeld genauso passieren kann. Meine Kollegen programmieren noch Fortran und manche switchen zwischen Fortran und C, andere zwischen Fortran und C#, während unser Team mit C++ arbeitet.
    Veraltete C-Programmierung kann also auch die gute Nachricht sein. 😉

    Ich habe kein Problem C-Funktionen in C++ zu nutzen. Sie sind in C++ verfügbar, dokumentiert - auch wenn manche es als Frevel betrachten. Und genau darüber mag ich nicht diskutieren, ob das jetzt Frevel ist oder nicht. Wenn es das Problem sauber gelöst ist, dann darf man darüber diskutieren, ob es bessere Alternativen gibt, aber nicht, ob das jetzt C++ ist nicht. Auch das ist C++.
    Wenn ein C++-Programmierer aber von Frevel spricht, weil er C++ nicht versteht, weil er die in C++ vorhandenen Funktionen ungern benutzt, dann ist das kein C-Problem. Dann hätte es vielleicht nicht geschadet, sich auch in dem Bereich ein wenig umzuschauen. Meiner Meinung nach.
    Der Threadstarter kann tun und lassen, was er will. Ich werde mich mit niemandem fetzen, wer der TS macht Fortschritte, egal ob er mit einem modernen C- oder C++-Buch anfängt. Und ob er sich danach nicht mehr weiterentwickelt, spielt in 20 Jahren auch keine Rolle mehr. Wenn er dann noch C++11 programmiert, wo C++34 aktuell ist - da wird genauso drüber geschimpft, wie heute über die C-Entwickler von vor 20 Jahren.
    So what?



  • asc schrieb:

    Eine Schnittmenge von Sprachelementen sagt nicht, das man beide Sprachen lernen muss, oder das eine Sprache eine andere ist.

    es ist nicht möglich, C++ zu lernen und C dabei ganz wegzulassen. Wer C++ lernt, lernt automatisch einen beträchtlichen Teil von C mit, ob sie will oder nicht.

    Ich würde zustimmen, wenn jemand sagen würde, daß es besser sei, C++ zu lernen ohne vorher C gelernt (und praktiziert) zu haben.



  • Jockelx schrieb:

    Wenn mit der Frage gemeint ist, ob man pures C beherrschen muss, um C++ zu können, dann von mir ein klares nein!

    Wenn du wissen willst, wie die Objekte in C++ oder das sonstige High Level Zeugs unter der Haube realisiert ist, dann ist es schon sinnvoll, wenn man weiß, wie so etwas in C realisiert werden würde.
    Am Ende lernst du dadurch zu verstehen, wo und wie du optimieren musst um den Code performant zu halten. Jemand der nur das Highlevel Zeugs nutzt und nicht versteht, wie dieses unter der Haube realisiert wurde, der kann nicht optimieren. D.h. er wählt unter umständen die Highlevel Features, die für diese Aufgabe nicht geeignet oder nicht die besten sind und verschwendet somit Rechenleistung.

    Ich könnte zumindest kein fehlerfreies C-Programm ohne Kompiler-Check schreiben (schon allein, weil ich mit Sicherheit nicht daran denken würde, Variablen am Funktionsanfang zu deklarieren).

    1. Dann würdest du in einer Prüfung in einem Informatikstudium durchfallen, da hast du nämlich nur Stift und Papier und musst das drauf haben.

    2. Seit C99 ist es erlaubt, Variablen auch später zu deklarieren. Dennoch würde ich davon abraten, da es schlechter Programmierstil ist.
    Bei der For Schleife mal ausgenommen, das wäre also okay:

    for (int i = 0; i <= 10; i++){
      ...
    }
    


  • Dobi schrieb:

    C sind Grundlagen schrieb:

    Wie will man eine Liste verstehen, wenn man nicht einmal weiß, wie man es in C mit Zeigern realisieren würde?

    Wie will man Zeiger in C verstehen wenn man das sowas nie in Assembler geschrieben hat? Wie will man Assembler verstehen wenn man nie eine CPU designed hat? ... Wie will man Strom verstehen wenn man nie ... 😉

    Der Vergleich hinkt gewaltig.

    Das HighLevel Zeugs von C++ ist so stark abstrahiert, dass der sichtbare Code Meilenweit vom Assemblercode entfernt ist, den der Compiler daraus machen würde.
    Bei C bist du mit Zeigern näher an Assembler als bei C++ mit Objekten.

    Man setzt halt auf irgendeiner Abstraktionsebene an. Es ist manchmal gut wenn man auch die tieferliegenden kennt, aber nicht immer nötig. Das ist ja grad das tolle an Abstraktion solange sie nicht leaky ist. 🙂

    Meiner Meinung nach kann der, der sowieso nicht tiefer unter die Haube nachsehen will auch gleich bei Java oder C# bleiben.

    Du mußt das Zeugs unter der Haube verstehen, um den Sprachumfang von C++ optimal einsetzten zu können.
    Deswegen ist das wichtig.



  • asc schrieb:

    Nutzt ihr Geräte erst, nachdem ihr sie anfangs zerlegt habt? Man kann auch erst das "Nutzen" lernen, bevor man in die Details geht.

    Der Vergleich hinkt.

    Mein Staubsauger funktioniert nämlich auch nicht performanter, wenn ich weiß, wie der unter der Haube arbeitet.
    Bei C++ Code ist das aber anders.

    Xin schrieb:

    Ohne die Grundlagen von C++, die nunmal C komplett ausmachen...

    Dem widerspreche ich schon. Die Grundlagen die man für die sinnvolle C++ Programmierung benötigt, machen C eben nicht komplett aus. Man benötigt nicht Alles was die Sprache C anbietet um gutes C++ zu schreiben.

    performanter C++ Code != guter C++ Code

    Du kannst in C++ den saubersten, d.h. übersichtlichsten und wartbarsten Code unter Verwendung aller HighLevel Features und API Funktionen der STL schreiben, aber das ist dann nicht unbedingt performant.

    Deswegen bleibe ich bei der Aussage, wem es nur um übersichtlichen wartbaren Code geht, der ist höchstwahrscheinlich sogar mit C# oder Java besser bedient.



  • Auskenner schrieb:

    Jockelx schrieb:

    Wenn mit der Frage gemeint ist, ob man pures C beherrschen muss, um C++ zu können, dann von mir ein klares nein!

    Wenn du wissen willst, wie die Objekte in C++ oder das sonstige High Level Zeugs unter der Haube realisiert ist, dann ist es schon sinnvoll, wenn man weiß, wie so etwas in C realisiert werden würde.

    Ja, die Diskussion ist irgendwie doof, weil die Frage auch nicht ganz klar ist.
    Ich finde auch, dass man C-Anteil können sollte.
    Mit 'purem C' können meinte ich so Sachen, wie das mit der Variablendeklaration.
    Wusste ich nicht, dass das in C doch auch später geht, aber dieses fehlende Wissen interessiert mich als C++ler auch kein Stück und läßt meine C++-Programme auch kein Stück schlechter werden.



  • Auskenner schrieb:

    Xin schrieb:

    Ohne die Grundlagen von C++, die nunmal C komplett ausmachen...

    Dem widerspreche ich schon. Die Grundlagen die man für die sinnvolle C++ Programmierung benötigt, machen C eben nicht komplett aus. Man benötigt nicht Alles was die Sprache C anbietet um gutes C++ zu schreiben.

    performanter C++ Code != guter C++ Code

    1. Man muss für C++ keine speziellen C-Kenntnisse besitzen um Performanten Code zu schreiben. Man kann in C++ auch ohne rein in C übliche Konstrukte durchaus schnellen Code schreiben - mag nicht ganz an C heranreichen (wobei dies Fallabhängig durchaus möglich ist), aber "C" seperat muss man dafür nicht lernen.

    Ihr tut so als würden interna in C++ Büchern etc. gänzlich ausgespart. Und das ist falsch. Und ebenso ist C++ nicht per se langsamer als C, sofern man die Fallstricke berücksichtigt (und auch die werden nicht selten in Büchern angesprochen).

    2. Gut und Wartbar steht zwar in teilen der Performance entgegen, aber beileibe nicht immer. Zum anderen meint ihr scheinbar das C-Kenntnisse einen automatisch zu performanteren Code führen. Auch das ist aus Praxiserfahrungen nonsense.

    Spätestens wenn man mit "5 Sterne"-Programmierern gearbeitet hat, weiß man, wovon ich spreche.

    Zum anderen:
    Performance ist sicherlich nicht unwichtig, ein wesentlich wichtigeres Kriterium für eine Software ist aber in der Regel das diese sauber läuft. Man sollte guten und wartbaren Code schreiben, und anschließend prüfen ob und wo zu Optimieren ist. Das heißt nicht das man vorträglich bewusst inperformanten Code schreiben soll, aber das man die Aspekte der Wartbarkeit in Vordergrund stellt. Dies gilt ins besondere, wenn die Software auch lange eingesetzt und weiter entwickelt werden soll (was in meinem Fall zumeist zutrifft, ich bin üblicherweise in der langjährigen Produkt(weiter)entwicklung, nicht der schnelllebigen Projektentwicklung tätig.



  • Jockelx schrieb:

    Ich finde auch, dass man C-Anteil können sollte.

    Was aber auch in der notwendigen Schnittmenge in der Regel in jeden C++ Buch enthalten ist. Das ist der Grund warum ich ein seperates erlernen von C auch völlig unsinnig ansehe.


Anmelden zum Antworten