Lernt man C mit, wenn man C++ lernt?



  • Guten Abend,

    Wenn ein Programmieranfänger C++ lernt, beispielsweise nach diesem Buch:

    https://www.amazon.de/C-eine-Einführung-Ulrich-Breymann/dp/3446446370

    Ist er dann nach dem Studium dieses Buches auch in der Lage, die Mittel der Sprache C effektiv zu nutzen und guten prozeduralen (nicht objektorientierten) Code zu schreiben?

    Die Frage stellt sich mir deswegen, da C oft als eine Teilmenge von C++ angesehen wird (auch wenn das so nicht ganz richtig ist) und die Unterschiede zwischen beiden Sprachen wohl auch nicht signifikant sein sollen bezüglich der Funktionsweise, wenngleich C++ natürlich viel mehr Sprachmittel enthält.



  • C lernt man nicht einfach durch das Lesen eines Buches. Dazu gehört eine Menge Erfahrung. Aber ja man kann auch in C++ prozedualen Code schreiben wie in C.



  • Aus eigener Erfahrung kann ich sagen: jein. Man beherscht zwar 99% der Syntax, aber C programmiert man ganz anders als C++. Man kann zwar C schreiben, aber gut wird der Code wahrscheinlich nicht.



  • Dexter1997 schrieb:

    und die Unterschiede zwischen beiden Sprachen wohl auch nicht signifikant sein sollen bezüglich der Funktionsweise

    Das ist dummes Zeug.


  • Global Moderator

    Wenn man C++ kann, kann man recht flott auch C lernen. Aber eher nicht umgekehrt. Und auch nicht automatisch, man muss schon noch etwas dafür tun.

    Vor allem sollte man sich vor gängigen Missverständnissen in acht nehmen, wie zum Beispiel, dass man in C prozedural programmieren müsse. Das kann man zwar, ist aber genau so wenig gängig, wie dies in C++ zu tun (wo man es auch kann).



  • Es sollte noch erwähnt werden, dass es sehr schaden kann, C vor C++ zu lernen, weil man mit C auch i.d.R. Idiome und Paradigmen verinnerlicht die in C++ so einsetzbar, aber dem Sprachkonzept entgegen sind. Stichwort C++ von A bis Z (nicht kaufen).



  • Dexter1997 schrieb:

    Ist er dann nach dem Studium dieses Buches auch in der Lage, die Mittel der Sprache C effektiv zu nutzen und guten prozeduralen (nicht objektorientierten) Code zu schreiben?

    Ist guter prozeduraler Code guter C Code? Viele große C Projekte sind ebenfalls objektorientiert aufgebaut. Das war für mich irgendwann vor 10 Jahren auch eine gewisse Offenbarung. "Gute" C Projekte sind nicht so geschrieben, wie ich sie geschrieben hätte, wenn ich mir einfach nur die Sprache angeschaut hätte.



  • Okay, danke für die Antworten!



  • Das war die Antwort, nach der ich gesucht habe, da ich als Programmieranfänger hin und her gerissen war, was ich nun zuerst lernen sollte.

    https://www.proggen.org/doku.php?id=c:faq:differences-c-cpp

    Eure Antworten waren auch gut, aber die hier ist perfekt (und hoffentlich auch fachlich richtig)!

    Nur das verstehe ich nicht ganz:

    Weitere wichtige Erweiterungen zu C sind Referenzen und Namespaces.

    Referenzen gibt es doch auch schon in C?

    Also die Geschichte mit dem &-Zeichen vor dem Variablennamen, oder was meint der Autor?



  • Dexter1997 schrieb:

    (und hoffentlich auch fachlich richtig)!

    Nein. C++ ist nicht gleich OOP. Das restliche oberflächliche gefasel ist auch nicht besser.

    Für jemanden wie mich (also ohne jegliche Erfahrung)

    Gute Qualifikation...

    Dexter1997 schrieb:

    Nur das verstehe ich nicht ganz:

    Weitere wichtige Erweiterungen zu C sind Referenzen und Namespaces.

    Referenzen gibt es doch auch schon in C?

    Also die Geschichte mit dem &-Zeichen vor dem Variablennamen, oder was meint der Autor?

    Es gibt keine Referenzen in C. Was auch immer du für & Zeichen meinst ...



  • Dexter1997 schrieb:

    https://www.proggen.org/doku.php?id=c:faq:differences-c-cpp

    IMAO ist so ziemlich alles was auf dieser Seite zu C und C++ geschrieben steht von Amateuren verfasst. Ich wuerde mich nicht auf diese Seite verlassen.



  • Dexter1997 schrieb:

    Weitere wichtige Erweiterungen zu C sind Referenzen und Namespaces.

    Referenzen gibt es doch auch schon in C?

    Also die Geschichte mit dem &-Zeichen vor dem Variablennamen, oder was meint der Autor?

    Es gibt den &-Operator, der die Adresse einer Variable liefert. Das wird in C verwendet, um etwas einem Pointer zuzuweisen. Hat mit Referenzen nichts zu tun.

    int i = 5;
    int* pointer_to_i = &i;
    


  • daddy_felix schrieb:

    Es gibt den &-Operator, der die Adresse einer Variable liefert. Das wird in C verwendet, um etwas einem Pointer zuzuweisen. Hat mit Referenzen nichts zu tun.

    int i = 5;
    int* pointer_to_i = &i;
    

    Aha, und ich habe immer gerätselt, was das bedeutet, zb in der WinAPI. Wieder was gelernt.



  • Aus eigener Erfahrung kann ich sagen: jein. Man beherscht zwar 99% der Syntax, aber C programmiert man ganz anders als C++.

    Seh ich auch so ... wobei bei 99% wär ich vorsichtig ^^
    Die Syntax von C ist generell nicht so umfrangreich, auf der anderen Seite gibts schon ne Handvoll Punkte wo die Syntax doch unterschiedlich ist ^^ Aber das hat man schnell intus ^^

    Als C++ Programmierer hat man meist einen "besonderen" Grund um auf Plain C runter zu müssen. Binärcompatible API's, Shader / KernelModule, exotische Hw ohne c++ support ...
    Das Spezifische ist eher das Problem ... und artet oft in der Kunst aus, das rauszufinden was alles nicht mehr geht (weil doch nochmal eingeschränktes C) ^^